Система безопасности SQL Server 2000
В предыдущих главах преимущественно рассматривалась установка и настройка SQL Server 2000. Когда все необходимые действия по подготовке сервера закончены, можно приступать к его эксплуатации. В первую очередь необходимо обеспечить пользователям доступ к базам данных. На этом этапе следует грамотно спланировать права доступа к данным. Плохо продуманная система безопасности не сможет предотвратить кражу или повреждение данных предприятия.
Планируя права доступа, необходимо исходить из принципа, что пользователь должен иметь доступ только к той информации, которая ему необходима в соответствии с его обязанностями. Не стоит, например, предоставлять главному бухгалтеру доступ к информации технического отдела, а главному инженеру – к информации о заработной плате его сотрудников. Несоблюдение этого простого правила может привести к неудовлетворительным последствиям.
Для любого предприятия кража информации является нежелательной. Если в базе данных хранится информация о научных исследованиях, на которые затрачено несколько лет и колоссальные финансовые средства, то кража информации конкурентами может очень сильно пошатнуть финансовое положение компании. Конкуренты, не вложившие никаких средств в разработку технологии, могут позволить себе держать низкие цены. Если же пострадавшая компания будет устанавливать такие же цены, то она будет работать себе в убыток и не сможет окупить технологию.
Помимо кражи, возможно незлонамеренное повреждение и уничтожение информации. И несмотря на то что это произошло случайно, финансовые потери могут быть значительными. Выходом из подобных ситуаций является использование систем резервного копирования.
Из вышесказанного следует, как важно правильно спроектировать права доступа пользователей к базам данных. Если к базе данных обращается более одного пользователя, то это уже является поводом для разграничения их прав. Можно ограничиться простым разделением возможностей пользователей, дав одному право изменять любые объекты базы данных, второму – читать любую информацию, а третьему – только выполнять хранимые процедуры. Но в больших базах данных масштаба предприятия или корпорации необходимо более детальное разграничение доступа. Для этого часто создаются два списка. Первый список включает в себя всех пользователей, которым необходимо предоставить доступ к тем или иным объектам базы данных. Второй список содержит перечень всех пользовательских объектов базы данных. Затем в первом списке выбирается пользователь, а во втором отмечаются права доступа, которые необходимо ему предоставить. Описанный метод не является единственным, это лишь пример планирования прав доступа.
Мы рассмотрели правила разграничения доступа пользователей к данным, но не затронули проблемы предоставления доступа к базам данных через приложения. Большинство приложений работает в контексте идентификатора безопасности пользователя, запустившего приложение. Это означает, что приложение будет иметь те же права доступа, что и пользователь. Но для работы некоторых приложений необходимо иметь фиксированный набор прав доступа, не зависящих от прав доступа пользователя, работающего с программой. SQL Server 2000 позволяет сделать это с применением специальных ролей приложения.
SQL Server 2000 является системой, удовлетворяющей самым жестким требованиям к безопасности информации. Условно система безопасности может быть разделена на два уровня: уровень сервера и уровень базы данных.
На первом уровне разрешается или отклоняется доступ пользователей к самому серверу. На втором – пользователи, имеющие доступ на уровне сервера, получают доступ к объектам базы данных. Такой подход позволяет более гибко управлять доступом пользователей к базам данных. На уровне сервера система безопасности оперирует понятиями: аутентификация (authentication); учетная запись (login); встроенные роли сервера (fixed server roles).
На уровне базы данных используются понятия: пользователь базы данных (database user); фиксированная роль базы данных (fixed database role); пользовательская роль базы данных (users database role); роль приложения (application role).
Каждый пользователь, прежде чем получить право совершать какие-либо действия в системе, должен идентифицировать себя. Обычный способ идентификации – ввод имени пользователя при входе в систему. В свою очередь система должна убедиться, что пользователь, пытающийся получить доступ, действительно является тем, за кого себя выдает. Для этого предназначена аутентификация– проверка подлинности пользователя. Стандартное средство аутентификации – ввод пароля. Такой метод регистрации применяется повсеместно, в том числе в Windows и в SQL Server 2000.
SQL Server 2000 поддерживает два метода аутентификации (Authentication Modes):
- средствами Windows NT (Windows NT Authentication);
- средствами SQL Server 2000 (SQL Server Authentication).
При аутентификации Windows NT подлинность пользователя проверяется операционной системой. Операционная система работает с учетными записями (logins), которые содержат все данные о пользователе, включая его имя, пароль, членство в группах, каталог по умолчанию и т. д. Каждая учетная запись имеет уникальный идентификатор (login ID) или, как его называют по-другому, идентификатор безопасности (SID, Security Identification), с помощью которого пользователь регистрируется в сети. Доступ ко всем ресурсам сети производится на основе идентификатора учетной записи. Когда пользователь пытается получить доступ к ресурсу, операционная система ищет его login ID и сравнивает тип разрешенного доступа с типом запрашиваемого доступа. Если конфликтов нет, то доступ предоставляется.
Аутентификация SQL Server реализуется на самом SQL Server 2000. Вся информация о пользователях хранится в системной базе Master. Для каждого пользователя указывается имя учетной записи, уникальный идентификатор SQL Server, пароль и другая информация. При попытке пользователя подключиться к серверу система безопасности потребует ввести имя учетной записи и ее пароль. Затем сравнит введенные данные с информацией, хранящейся в системных таблицах. Если данные совпадают, то доступ предоставляется. В противном случае пользователь получает сообщение об ошибке и соединение не устанавливается.
Аутентификация SQL Server в основном применяется клиентами, для которых недоступна регистрация в домене Windows NT, например, пользователями Novell NetWare, Unix и т. д. При подключении к SQL Server 2000 через Интернет регистрация в домене не выполняется, поэтому в данном случае также необходимо использовать аутентификацию SQL Server. Кроме того, аутентификация SQL Server необходима при работе сервера под управлением Windows 98.
Для управления учетными записями SQL Server рекомендуется применять специальный интерфейс Enterprise Manager или системные хранимые процедуры.
В Enterprise Manager список учетных записей, сконфигурированных на сервере, содержится в папке \Security\Logins. Если выбрать эту папку в левой панели Enterprise Manager, то в правой части окна будет выведен список всех пользовательских учетных записей, которые содержатся в представлении syslogins (рис. 11).
Информация об учетных записях представлена в следующих столбцах:
1. Name. Имя учетной записи. Максимальная длина 128 символов.
2. Type. Тип учетной записи:
- NTUser (пользователь WindowsNT);
- NTGroup (группа Windows NT);
- Standard (пользователь SQL Server).
3. Server Access. Тип доступа к SQL Server 2000:
- Permit (разрешен);
- Deny (запрещен).
4. Default Database. База данных по умолчанию.
5. User. Имя пользователя базы данных, в которого отображается данная учетная запись.
6. Default Language. Язык по умолчанию, установленный для учетной записи.
Для просмотра свойств учетной записи достаточно дважды щелкнуть левой кнопкой мыши на значке нужного пользователя. В ответ откроется диалоговое окно, содержащее информацию об учетной записи.
В SQL Server 7.0 был добавлен новый механизм – роли (roles), которые пришли на смену группам SQL Server 6.х. В SQL Server 2000 доступны как роли, так и группы.
Роли – это средство объединения учетных записей в группы с целью упрощения администрирования. Включив учетную запись в ту или иную роль сервера, можно предоставить ей определенный набор прав по администрированию сервера. Никаким другим способом выдать права на выполнение этих операций невозможно. В SQL Server 2000 имеется две группы ролей: роли сервера (server role); роли базы данных (database role).
Набор ролей сервера строго ограничен. Никто, включая администратора сервера, не может создать новую или удалить существующую роль сервера. Поэтому они называются фиксированными ролями (fixed server roles). Наиболее важные встроенные роли сервера и их описание представлены ниже:
- sysadmin. Члены этой роли имеют абсолютные права в SQL Server. Никто не имеет бо2льших прав доступа, чем члены данной роли.
- setupadmin. Этой роли предоставлены права управления связанными серверами, конфигурирования хранимых процедур, запускаемых автоматически при старте SQL Server 2000, а также право добавлять учетные записи в роль.
- serveradmin. Обычно в эту роль включаются пользователи, которые должны выполнять администрирование сервера, имеют право на останов сервера, изменять параметры работы служб и т.д.
- securityadmin. Члены данной роли имеют возможность создавать новые учетные записи, которым они могут предоставлять права на создание баз данных и ее объектов, а также управлять связанными серверами.
Роли базы данных делятся на следующие виды:
1. Фиксированная роль базы данных (fixed database role). Делает возможным предоставление пользователям набора прав, которые нельзя организовать никаким иным способом. Количество и назначение фиксированных ролей стандартно и не может быть изменено. Наиболее важные из них следующие:
- db_securityadmin. Члены роли могут управлять правами доступа к объектам базы данных других пользователей и членством их групп.
- db_owner. Члены роли имеют права владельца, т.е. могут выполнять любые действия.
- db_denydatawriter. Членам этой роли запрещено изменение данных независимо от выданных им разрешений.
- db_denydatareader. Членам этой роли запрещен просмотр данных независимо от выданных им разрешений.
- db_ddladmin. Члены роли могут создавать, изменять и удалять объекты базы данных.
2. Пользовательская роль базы данных (users database role). Если фиксированные роли предназначены для наделения пользователей специальными правами в базе данных, то пользовательские роли служат лишь для группировки пользователей с целью облегчения управления их правами доступа к объектам.
3. Роль приложения (application role). Позволяет выдать права доступа не конкретному пользователю или их группе, а приложению в целом. При этом не важно, какой именно пользователь работает с приложением и какие права доступа он имеет. Получив доступ к приложению, пользователь может выполнять все действия, разрешенные роли приложения.
Административные задачи
Задачи администрирования можно условно разделить на две части:
1. Администрирование собственно SQL Server 2000, которая подразумевает выполнение задач, имеющих отношение к работе всего сервера. Например, управление объемом оперативной памяти, используемой сервером, управление работой и настройками служб SQL Server 2000, предоставление пользователям доступа к серверу, резервное копирование системных баз данных, создание пользовательских баз данных и т. д.
2. Администрирование баз данных, существующих на сервере, включающее отображение учетных записей в пользователей баз данных, создание ролей, пользовательских объектов базы данных, управление правами доступа пользователей к этим объектам, выполнение резервного копирования, управление размером базы и журнала транзакций и т. д.
Администрирование сервера и баз данных имеет мало общих задач. Тем не менее некоторые из них могут решаться как на уровне сервера, так и на уровне базы данных. Например, изменение размера и создание резервных копий базы данных способен выполнять как администратор сервера, так и администратор базы данных.
В небольших организациях обязанности системного администратора и администратора баз данных часто совмещает один человек. Более того, нередко этот же человек выполняет и администрирование сети организации. При условии достаточно высокой квалификации администратора подобный подход является довольно эффективным, так как позволяет одному человеку быть в курсе всех проблем пользователей. К тому же организации не требуется платить зарплату трем отдельным сотрудникам – администратору сети, системному администратору и администратору баз данных. В крупных компаниях, имеющих сотни компьютеров и пользователей, административные задачи распределяются между персоналом.
В задачи администрирования сервера входит следующее.
Инсталляция и обновление версий SQL Server. Администратор должен следить за выходом новых версий продукта, сервисных пакетов (Service Pack) и исправлений (Patches). Как и в любом другом продукте, в SQL Server могут иметься некоторые недоработки и ошибки в программном коде. По мере использования эти недочеты обнаруживаются и устраняются. Если недочеты незначительны, то выпускается сервисный пакет, который обычно исправляет множество недочетов. Если же обнаруживается серьезная ошибка, то производитель выпускает исправление, или, как его еще называют, заплатку. Заплатка обычно предназначена для решения одной, но важной проблемы и выпускается гораздо оперативнее, чем сервисные пакеты.
Запуск и останов служб SQL Server 2000. Со стороны SQL Server 2000 только члены фиксированных ролей sysadmin и serveradmin могут выполнять запуск и останов служб сервера. В обычной ситуации останов служб не требуется. Службы SQL Server 2000 могут непрерывно работать на протяжении многих недель и месяцев. Тем не менее останов служб может понадобиться для выполнения некоторых административных задач, например, перестроения системных баз данных, восстановления их резервных копий и некоторых других задач.
Конфигурирование связанных и удаленных серверов. Когда в сети имеется более одного сервера баз данных (не обязательно все они являются SQL Server 2000), то часто бывает необходимо предоставить пользователям возможность обращаться к данным, хранящимся на этих серверах. Работа со связанными и удаленными серверами позволяет пользователям безболезненно обращаться к любому серверу сети.
Управление хранимыми процедурами, стартующими при запуске SQL Server 2000. Если при каждом старте службы MSSQLServer должны выполняться определенные задачи, то администратор может воспользоваться возможностью автоматического запуска хранимых процедур при запуске сервера.
Управление настройками служб SQL Server 2000. Одной из основных задач является контроль за параметрами работы служб, включающий в себя управление объемом оперативной памяти, используемой сервером, потоками, приоритетом, настройками по умолчанию для пользовательских соединений, конфигурирование почтовых профилей и многое другое.
Управление учетными записями. В задачи администрирования входит также создание учетных записей Windows NT и SQL Server, предоставление им доступа к SQL Server 2000.
Резервное копирование. Необходимо своевременно создавать резервные копии пользовательских и системных баз данных с помощью полных дифференциальных копий, а также копий журнала транзакций. Резервное копирование позволит восстановить информацию даже в случае полного уничтожения сервера. Также нужно выполнять конфигурирование устройств резервного копирования, следить за носителями и т. д.
Создание и поддержание баз данных. Создание баз данных выполняется на уровне сервера. Администратор должен следить за размером баз данных и при необходимости увеличивать их размер или добавлять дополнительные файлы. В принципе, SQL Server 2000 может самостоятельно увеличивать размер базы данных. Помимо этого, данная категория задач также предполагает выполнение отсоединения и присоединения баз данных.
Осуществление мониторинга и оптимизации. Необходимо периодически анализировать работу SQL Server 2000 для поиска “узких мест”. Подобный анализ может помочь увеличить производительность сервера.
Далее перечислены по управлению базами данных.
Создание объектов базы данных. Чаще всего выполняется предварительная разработка структуры базы данных, которая затем реализуется в виде набора объектов. Администратор базы данных должен выполнить создание таблиц, представлений, хранимых процедур, правил, умолчаний, ограничений целостности и т. д.
Управление пользователями и ролями. Прежде чем пользователи смогут работать с объектами базы данных, необходимо отобразить их учетные записи в пользователей баз данных. Для удобства управления могут создаваться пользовательские роли.
Предоставление доступа к объектам базы данных. После того как в базе данных созданы объекты и пользователи, можно приступить к управлению разрешениями доступа пользователей к объектам базы данных.
Выполнение резервного копирования. Резервное копирование может выполняться как на уровне сервера, так и на уровне базы данных. Выполнением резервного копирования пользовательских баз данных может заниматься администратор соответствующей базы данных, если системный администратор считает это целесообразным.
Обеспечение целостности и достоверности данных. Периодически необходимо выполнять проверку целостности данных. В противном случае пользователи могут столкнуться с различными проблемами при работе с данными.
Перестроение индексов и обновление статистики. С течением времени данные в таблицах претерпевают изменения и степень заполнения как индексных страниц, так и страниц данных способна увеличиться. Это может стать причиной низкой производительности операций добавления и изменения данных. Тогда необходимо выполнить перестроение индексов.
Создание ролей приложения. Если предполагается, что для доступа к базе данных будет использоваться специальное приложение, то для удобства и обеспечения дополнительной безопасности можно использовать роли приложения.
Выполнение мониторинга запросов. Если некоторые запросы или хранимые процедуры выполняются слишком долго, то следует провести анализ хода выполнения запроса. Может оказаться, что последовательность обращения запроса или процедуры к объектам базы данных приводит к появлению конфликтов доступа и длительному ожиданию освобождения нужных ресурсов. Выходом из ситуации может послужить изменение запроса.
Приведенные списки задач администраторов сервера и баз данных не исчерпывают всех задач. Однако данный перечень позволяет судить о нагрузке на администраторов.