SQL Server 2000

Управление пользователями и системой безопасности

Разбить на страницы
Показывать лекцию целиком

В этой лекции вы узнаете, как управлять пользователями и системой безопасности в среде Microsoft SQL Server 2000. Вместе с планированием резервного копирования и восстановления, определением состава системы и управлением дисковым пространством управление системой безопасности является одной из наиболее характерных задач для администратора баз данных (DBA). Это также одна из наиболее важных задач, которые должен выполнять DBA. Если пренебречь вопросами безопасности системы, это может привести к потере или порче данных.

Эта лекция охватывает ряд тем, относящихся к управлению пользователями и системой безопасности. Вы узнаете о том, как создавать пользовательские login-записи* (пользовательские учетные записи подключения к SQL Server) и управлять ими, а также о режимах аутентификации; кроме того, вы узнаете об идентификаторах пользователей. Пользовательская login-запись (user login) используется для аутентификации доступа к SQL Server. Она может аутентифицироваться через систему Microsoft Windows NT, Windows 2000 или SQL Server. Идентификатор пользователя (user ID) используется, чтобы присваивать пользовательские полномочия для доступа к определенным объектам в отдельных базах данных. Идентификаторы пользователей связаны с пользовательскими учетными записями и могут содержать (или не содержать) одно и то же имя, как вы увидите далее. Вы также узнаете о типах полномочий, которые могут быть присвоены в SQL Server, а также об их использовании. Кроме того, вы узнаете, как использовать роли для более простого управления пользователями. И, наконец, вы узнаете о важном средстве в SQL Server 2000, которое называется делегированием учетной записи безопасности. К концу этой лекции вы получите знания, необходимые для управления пользовательскими login-записями и системой безопасности.

Создание и администрирование пользовательских login-записей

Начнем изучение средств управления пользователями и системой безопасности с рассмотрения пользовательских login-записей. В этом разделе мы опишем сначала, почему так важны login-записи, и рассмотрим методы аутентификации, которые можно использовать для поддержки login-записей. Затем мы рассмотрим три метода создания login-записей: использование SQL Server Enterprise Manager, использование Transact-SQL (T-SQL) и использование мастера создания учетных записей Create Login Wizard. И, наконец, мы увидим, как использовать Enterprise Manager и T-SQL для создания новых пользовательских login-записей.

Зачем нужно создавать пользовательские login-записи?

Пользовательские login-записи позволяют вам защищать свои данные от преднамеренного или непреднамеренного модифицирования несанкционированными (неавторизованными) пользователями. С помощью пользовательских login-записей SQL Server может аутентифицировать отдельных авторизованных пользователей. Каждой пользовательской login-записи присваивается уникальное имя и пароль. Каждому пользователю присваивается его собственная учетная login-запись для входа в SQL Server. Без пользовательских login-записей для всех соединений с SQL Server использовался бы один и тот же идентификатор, а это означает, что вы не могли бы создавать различные уровни безопасности для тех, кто осуществляет доступ к базе данных.

Вы можете создавать различные уровни безопасности, предоставляя различным учетным login-записям различные полномочия для доступа к объектам и выполнения функций. Вы можете также шифровать определенные объекты базы данных, такие как хранимые процедуры и представления, чтобы скрывать их определения от неавторизованных пользователей. Кроме того, используя пользовательские login-записи, вы можете разрешать вставку и обновление информации в определенных таблицах базы данных только некоторым пользователям и предоставлять доступ к этим таблицам по чтению основной массе пользователей.

Чтобы увидеть, как осуществляется ограничение доступа к данным с помощью пользовательских login-записей, вернемся к примеру, впервые представленному в лекции 18, где показано использование представлений для ограничения доступа к критически важным данным. Предположим, что у нас имеется таблица Employee, содержащая информацию о сотрудниках, включая имя каждого сотрудника, номер телефона, номер офиса), должность, заработную плату, надбавку и т.д. Чтобы воспрепятствовать доступу определенных пользователей к конфиденциальным данным этой таблицы, сначала нужно создать представление, содержащее только общедоступные данные, такие как имена сотрудников, номера телефонов и номера офисов. Затем, реализуя пользовательские login-записи, вы можете ограничить доступ к исходной таблице, разрешив при этом доступ всех пользователей к представлению. Но если не использовать возможности пользовательских login-записей, то любой пользователь будет иметь доступ и к представлению, и к таблице, что лишает смысла использование этого представления.

Режимы аутентификации

Для доступа к SQL Server можно использовать два режима аутентификации: режим аутентификации Windows (Windows Authentication) и режим смешанной аутентификации (Mixed Mode Authentication). В первом случае аутентификация пользователя осуществляется операционной системой Windows. Затем SQL Server использует аутентификацию этой операционной системы, чтобы определить, какие пользовательские полномочия можно применять в каждом случае. В смешанном режиме аутентификацию пользователя осуществляют как Windows NT/2000, так и SQL Server. Для доступа к SQL Server вы должны в любом случае сначала осуществить вход по учетной записи Windows NT/2000, поэтому при выборе режима аутентификации вы должны решить, нужно ли вам использовать аутентификацию SQL Server в дополнение к аутентификации Windows. Рассмотрим каждый из этих режимов аутентификации более подробно. Ниже в этом разделе вы узнаете, как реализовать оба этих режима.

Аутентификация в Windows

Как уже говорилось, при аутентификации с помощью Windows обеспечение безопасности для SQL Server осуществляет с помощью учетных записей система Windows NT/2000. При подсоединении пользователя к Windows NT/2000 эта система проверяет подлинность пользователя по его учетной записи. SQL Server "убеждается" в том, что пользователь был проверен системой Windows NT/2000, и разрешает доступ, основываясь на этой аутентификации. Для этого используется интеграция процесса проверки login-записей SQL Server с процессом проверки учетных записей в Windows. Атрибуты безопасности на уровне сети проверяются с помощью сложного процесса шифрования, обеспечиваемого в Windows NT/2000. После аутентификации операционной системой в этом режиме дальнейшая аутентификация для доступа к SQL Server уже не требуется. Для доступа к SQL Server вы должны только указать свой пароль доступа к Windows NT/2000.

Режим аутентификации Windows считается более надежным методом, чем режим смешанной аутентификации, за счет использования дополнительных средств безопасности. Это защищенная проверка и шифрование паролей, аудит, поддержка сроков действия паролей, минимальная длина паролей и автоматическое блокирование учетных записей после определенного количества безуспешных попыток входа.

Режим смешанной аутентификации

В режиме смешанной аутентификации пользователи могут осуществлять доступ к SQL Server с помощью аутентификации в Windows или аутентификации в SQL Server. При соединении, осуществляемом в этом режиме из незащищенной системы, SQL Server аутентифицирует данные входа, проверяя, имеется ли учетная login-запись для пользователя, запрашивающего вход. SQL Server осуществляет аутентификацию по этой учетной login-записи путем сравнения имени и пароля пользователя, подсоединяющегося к SQL Server, с информацией учетной login-записи, хранящейся в базе данных. Если для этого пользователя не создана учетная login-запись или пользователь неверно указал имя или пароль, то SQL Server не разрешает доступ.

Режим аутентификации Windows недоступен, если SQL Server работает под управлением Windows 95/98, поэтому вы должны применять на этих платформах аутентификацию SQL Server (указывая режим смешанной аутентификации). Кроме того аутентификация SQL Server требуется для Web-приложений (с помощью Microsoft Internet Information Server), поскольку пользователи этих приложений, скорее всего, находятся не в том же домене, где сервер, и поэтому для них нельзя использовать систему безопасности Windows. Для других приложений также может потребоваться аутентификация SQL Server: некоторые разработчики предпочитают использовать для своих приложений систему безопасности SQL Server, поскольку это упрощает обеспечение безопасности их приложений. Если приложения используют систему безопасности SQL Server (в доверенной сети), то разработчики этих приложений не обязаны обеспечивать аутентификацию внутри самих приложений, что упрощает их работу.

Задание режима аутентификации

Чтобы задать режим аутентификации, выполните следующие шаги.

  • Откройте окно Enterprise Manager. В левой панели щелкните правой кнопкой мыши на имени сервера, содержащего базу данных, для которой вы хотите задать режим аутентификации, и выберите из контекстного меню пункт Properties (Свойства), чтобы появилось окно SQL Server Properties. Щелкните на вкладке Security (Безопасность) (рис. 34.1).
  • В этой вкладке вы можете выбрать как режим аутентификации, так и служебную учетную запись для запуска SQL Server. В секции Security выберите режим аутентификации: кнопка выбора SQL Server and Windows NT/2000 (смешанный режим) или Windows NT/2000 only (только Windows). Вы можете также задать уровень аудита входов по учетным записям. Соответствующая кнопка выбора определяет, какой тип аудита будет выполняться для входов (если вообще будет выполняться). Имеется четыре следующих уровня:
  • None (Нет). Аудит входов не выполняется. Это вариант, принятый по умолчанию.
  • Success (Успешный вход).Регистрируются все успешные попытки входа.
  • Failure (Безуспешный вход).Регистрируются все безуспешные попытки входа.
  • All (Все).Регистрируются все попытки входа.
  • (рис 34.1) Вкладка Security (Безопасность) окна SQL Server Properties Примечание. Уровень аудита – это свойство базы данных. Определенный уровень аудита будет применяться ко всем входам.
  • В секции Startup service account (Служебная учетная запись для запуска SQL Server) нужно указать, какую учетную запись Windows NT следует использовать при запуске службы SQL Server. Вы можете использовать встроенную учетную запись локальной системы (System account) или указать определенную учетную запись, такую как Administrator, и пароль. Щелкните на кнопке OK для подтверждения своих установок.
  • Login-записи и пользователи

    В нескольких следующих разделах вы узнаете, как создавать login-записи и пользователей. Но прежде чем приступить к этому процессу, вы должны четко разобраться в таких понятиях, как учетные записи и пользователи. В этом разделе дается краткое описание этих двух терминов.

    Как уже говорилось, пользовательская учетная запись Windows NT/2000 может потребоваться для подсоединения к базе данных. Независимо от используемого режима аутентификации (аутентификация Windows NT/2000 или режим смешанной аутентификации) учетная запись, которую вы используете для подсоединения к SQL Server, называется login-записью SQL Server (учетной записью подключения к SQL Server). Кроме этой учетной записи, каждая база данных имеет набор пользовательских учетных псевдозаписей, присвоенных этой базе данных. Эти учетные псевдозаписи являются алиасами (альтернативными именами) для учетных login-записей SQL Server. Например, в базе данных у вас может быть пользователь с именем manager, связанный с login-записью guest, а база данных pubs может иметь пользователя с именем manager, связанного с login-записью sa. По умолчанию учетная login-запись SQL Server не имеет связанного с ней идентификатора пользователя (user ID); тем самым она не содержит никаких полномочий доступа.

    Создание login-записей SQL Server

    Вы можете выполнять большинство административных задач SQL Server, используя один из нескольких методов, и задача создания пользовательских login-записей не является исключением из этого правила. Как уже говорилось, вы можете создать login-запись, используя один из трех методов: с помощью Enterprise Manager, с помощью T-SQL или с помощью мастера создания login-записей Create Login Wizard. В этом разделе вы узнаете, как создавать login для SQL Server с помощью каждого их этих методов.

    Использование Enterprise Manager для создания login-записей SQL Server

    Чтобы создать login-запись для SQL Server с помощью Enterprise Manager, выполните следующие шаги.

  • В левой панели Enterprise Manager раскройте группу серверов, раскройте сервер и затем раскройте папку Security. Щелкните правой кнопкой мыши на Logins и выберите из контекстного меню New Login (Создать login-запись), чтобы появилось окно свойств login-записи SQL Server Login Properties (рис. 34.2). В текстовом поле Name вкладки General введите имя login-записи. Если вы используете аутентификацию Windows, то это должно быть допустимое имя учетной записи Windows NT или Windows 2000. При этом в текстовом поле Domain (Домен) нужно указать домен Windows NT или Windows 2000. В секции Default (По умолчанию) укажите принятую по умолчанию базу данных и язык, который будет использоваться пользователем. В секции Authentication (Аутентификация) укажите, какая аутентификация будет использоваться: по учетной записи Windows NT или Windows 2000 (кнопка выбора Windows NT Authentication) или аутентификация в SQL Server (кнопка выбора SQL Server Authentication). Во втором случае будет использоваться смешанный режим аутентификации.
  • Щелкните на вкладке Server Roles (Роли сервера) (рис 34.3(рис 34.3) Вкладка General окна SQL Server Login Properties(рис 34.2) Вкладка Server Roles (Роли сервера) окна SQL Server Login Properties
  • Щелкните на вкладке Database Access (Доступ к базе данных) (рис 34.4(рис 34.4) Вкладка Database Access (Доступ к базе данных) окна SQL Server Login Properties
  • По окончании установки параметров сохраните login-запись, щелкнув на кнопке OK. Чтобы увидеть эту login-запись в списке других login-записей, щелкните на вкладке Logins в Enterprise Manager. Login-записи появятся в правой панели.
  • Использование T-SQL для создания login-записей

    Для создания login-записи с помощью T-SQL используется хранимая процедура sp_addlogin или хранимая процедура sp_grantlogin. Хранимая процедура sp_addlogin позволяет только добавлять аутентифицированного в SQL Server пользователя к базе данных SQL Server. Хранимая процедура sp_grantlogin позволяет добавлять пользователя, аутентифицированного в системе Windows NT/2000.

    Хранимая процедура sp_addlogin имеет следующий синтаксис:

    sp_addlogin  [ @loginame = ] 'имя_login-записи'
             [  ,  [ @passwd = ] 'пароль' ]
             [  ,  [ @defdb = ] 'база данных' ]
             [  ,  [ @deflanguage = ] 'язык' ]
             [  ,  [ @sid = ] 'sid' ]
             [  ,  [ @encryptopt = ] 'параметр_шифрования' ]

    Используются следующие необязательные параметры.

  • пароль. Указывает пароль login-записи для SQL Server. Значение по умолчанию – NULL.
  • база данных. Указывает базу данных по умолчанию для login-записи. Значение по умолчанию – master.
  • язык. Указывает язык по умолчанию для login-записи. Значение по умолчанию – текущий язык для SQL Server.
  • sid. Указывает идентификатор безопасности (SID), который является уникальным идентификационным номером. Если вы не указываете какое-либо значение, то он генерируется для вас системой. Параметр sid обычно не генерируется пользователями, но администраторы используют sid в ряде ситуаций. Когда DBA выполняет задачи поиска и устранения проблем, sid может потребоваться, чтобы определить проверяемую login-запись. Параметр sid является внутренним идентификатором для login-записи.
  • параметр_шифрования.Указывает, будет ли шифроваться пароль в системных таблицах. Значение по умолчанию – NULL, означающее, что пароль будет шифроваться. Значение skip_encryption (пропустить шифрование) означает, что пароль не будет шифроваться. Если указать значение skip_encryption_old, то пароль, зашифрованный в более ранней версии SQL Server, не будет шифроваться еще раз. Вам следует изменять значение по умолчанию, только если вы хотите избежать шифрования пароля в системных таблицах.
  • Ниже приводится простой пример добавления login-записи:

    EXEC sp_addlogin 'PatB'

    Не забудьте использовать ключевое слово EXEC перед именем хранимой процедуры.

    Ниже приводится более сложный пример добавления login-записи:

    sp_addlogin 'SharonR', 'mypassword', 'Northwind', 'us_english'

    Эта команда создает пользователя с именем SharonR и паролем "mypassword." По умолчанию будет использоваться база данных Northwind, и язык по умолчанию – U.S. English. В обычном случае вы должны предоставить создание идентификатора безопасности (SID) SQL Server вместо самостоятельного создания этого идентификатора.

    Хранимая процедура sp_grantlogin имеет следующий синтаксис:

    sp_grantlogin 'имя_login-записи'

    Ниже показан пример использования хранимой процедуры sp_grantlogin:

    EXEC sp_grantlogin 'MOUNTAIN_DEW\DickB'

    "DickB" – имя учетной записи Windows NT или Windows 2000, "MOUNTAIN_DEW" – имя системы.

    Добавив эти login-записи, вы можете просматривать их в Enterprise Manager. Для этого щелкните на папке Logins в левой панели.

    Использование мастера Create Login Wizard

    Чтобы создать login-запись для SQL Server с помощью мастера Create Login Wizard, выполните следующие шаги.

  • В окне Enterprise Manager раскройте группу серверов и щелкните на имени сервера. В меню Tools выберите пункт Wizards (Мастера). В появившемся диалоговом окне Select Wizard (Выбор мастера) раскройте папку Database, щелкните на Create Login Wizard (рис. 34.5) и затем щелкните на кнопке OK. Появится начальное окно мастера Create Login Wizard (рис. 34.6).
  • Щелкните на кнопке Next (Далее), чтобы появилось окно Select Authentication Mode for This Login (Выбор режима аутентификации для данной login-записи) (рис 34.7(рис 34.6) Окно Select Wizard(рис 34.5) Начальное окно мастера Create Login Wizard
  • Щелкните на кнопке Next, чтобы появилось окно Authentication with Windows NT (Аутентификация с помощью Windows) или Authentication With SQL Server (Аутентификация с помощью SQL Server), – в зависимости от режима аутентификации, выбранного вами на шаге 2. Нарис 34.8(рис 34.8) Окно Select Authentication Mode for This Login (Выбор режима аутентификации для данной login-записи)(рис 34.7) Окно Authentication with SQL Server (Аутентификация с помощью Windows)
  • Щелкните на кнопке Next, чтобы появилось окно Grant Access to Security Roles (Предоставление доступа ролям безопасности) (рис. 34.9). В этом окне вы можете выбрать роли базы данных, которые будут присвоены данной login-записи.
  • Щелкните на кнопке Next, чтобы появилось окно Grant Access to Databases (Предоставление доступа к базам данных) (рис. 34.10). В этом окне вы можете выбрать базы данных, к которым будет иметь доступ эта login-запись.
  • Щелкните на кнопке Next, чтобы появилось окно Completing the Create Login Wizard (Завершение работы мастера) (рис 34.11(рис 34.10) Окно Grant Access to Security Roles (Предоставление доступа ролям безопасности)(рис 34.9) Окно Grant Access to Databases (Предоставление доступа к базам данных)(рис 34.11) Окно Completing the Create Login Wizard (Завершение работы мастера)
  • Создание пользователей SQL Server

    Вы можете создавать пользователей SQL Server с помощью Enterprise Manager или T-SQL. (В SQL Server нет мастера, с помощью которого можно выполнять этот процесс.) В этом разделе вы узнаете, как использовать оба этих метода для создания пользователей SQL Server. Напомним, что пользователь SQL Server определяется для определенной базы данных, а полномочия доступа к этой базе данных присваиваются определенной пользовательской login-записи. Идентификатор пользователя (user ID) SQL Server можно рассматривать как аналог login-записи SQL Server, но они не обязательно имеют одинаковые имена.

    Примечание. Чтобы создать пользователя SQL Server, у вас уже должна быть создана login-запись SQL Server, поскольку имя пользователя является ссылкой на login-запись SQL Server.

    Использование Enterprise Manager для создания пользователей

    В отличие от login-записей SQL Server, которые создаются из папки Security в Enterprise Manager, пользователи SQL Server создаются из папки определенной базы данных в левой панели Enterprise Manager. Для создания пользователей с помощью Enterprise Manager выполните следующие шаги.

  • Щелкните правой кнопкой мыши на базе данных, в которой должен быть создан пользователь, укажите в контекстном меню команду New (Создать) и затем выберите пункт Database User (Пользователь базы данных), чтобы появилось окно свойств Database User Properties (рис 34.12(рис 34.12) Окно Database User Properties (Свойства пользователя базы данных)В раскрывающемся списке Login name введите допустимое имя login-записи SQL Server и в текстовом поле User name введите имя нового пользователя. Затем укажите роли для базы данных, членом которых будет новый пользователь; для этого установите соответствующие флажки в списке Database role membership (Участие в ролях базы данных). Как будет показано ниже в этой лекции, присваивая полномочия этим ролям, вы можете применять эти полномочия к данному пользователю.
  • Щелкните на кнопке Properties, чтобы появилось окно Database Role Properties (Свойства роли базы данных) (рис 34.13(рис 34.13) Окно Database Role Properties (Свойства роли базы данных)
  • По окончании два раза щелкните на кнопке OK, чтобы создать пользователя базы данных.
  • Использование T-SQL для создания пользователей

    Чтобы использовать T-SQL для создания пользователей базы данных, нужно выполнить хранимую процедуру sp_adduser. Эту хранимую процедуру можно запустить из ISQL или OSQL с использованием следующего синтаксиса:

    sp_adduser	[ @loginame = ] 'имя_login-записи'
           [  ,  [ @name_in_db = ] 'пользователь' ]
           [  ,  [ @grpname = ] 'группа' ]

    Имя_login-записи – это имя учетной login-записи SQL Server, которое является обязательным параметром. Переменная пользователь – это имя нового пользователя, и группа – это группа или роль, к которой будет принадлежать новый пользователь. Если значение параметра пользователь не указано, то оно совпадает со значением параметра имя_login-записи.

    С помощью следующей команды создается новый пользователь базы данных с именем JackR и учетной записью Windows NT или Windows 2000 FORT_WORTH\ DB_User:

    sp_adduser 'FORT_WORTH\DB_User', 'JackR'

    "FORT_WORTH" – имя системы или домена. "DB_User" – имя учетной записи Windows NT или Windows 2000.

    Администрирование полномочий доступа к базам данных

    Полномочия используются для управления доступом к объектам баз данных; они указывают, какие пользователи могут выполнять определенные операции с базой данных. Вы можете задавать полномочия на уровне сервера и на уровне базы данных. Полномочия на уровне сервера используются для того, чтобы администраторы баз данных (DBA) могли выполнять административные задачи для баз данных. Полномочия на уровне базы данных используются для того, чтобы разрешать или запрещать доступ к объектам и операторам базы данных. В этом разделе мы рассмотрим типы полномочий и способы их присваивания.

    Полномочия на уровне сервера

    Как уже говорилось, полномочия на уровне сервера присваиваются DBA и позволяют им выполнять задачи администрирования. Эти полномочия определяются по фиксированным ролям сервера. Пользовательским login-записям могут быть присвоены фиксированные роли на сервере, но эти роли нельзя модифицировать. (Роли на сервере описываются в разделе "Использование фиксированных ролей на сервере" далее.) К полномочиям на сервере относятся полномочия SHUTDOWN, CREATE DATABASE, BACKUP DATABASE и CHECKPOINT. Полномочия на сервере используются только для авторизации DBA, чтобы они могли выполнять административные задачи; их не нужно модифицировать или предоставлять отдельным пользователям.

    Полномочия на уровне объектов базы данных

    Полномочия на уровне объектов базы данных – это класс полномочий, которые предоставляются для доступа к объектам базы данных. Полномочия доступа к объектам необходимы для доступа к таблице или представлению с помощью таких операторов, как SELECT, INSERT, UPDATE и DELETE. Полномочия доступа к объектам также требуются для использования оператора EXECUTE, который применяется для запуска хранимых процедур. Для присваивания полномочий доступа к объектам используются Enterprise Manager и операторы T-SQL.

    Использование Enterprise Manager для присваивания полномочий доступа к объектам

    Чтобы использовать Enterprise Manager для предоставления полномочий доступа к объектам базы данных, выполните следующие шаги.

  • Раскройте группу серверов, раскройте сервер, раскройте базу данных, для которой хотите присвоить полномочия, и щелкните на папке Users (Пользователи). В правой панели появится список пользователей. Щелкните правой кнопкой мыши на имени пользователя и выберите из контекстного меню пункт Properties, чтобы появилось диалоговое окно Database User Properties (рис 34.14(рис 34.14) Окно Database User Properties
  • Щелкните на кнопке Permissions (Полномочия), чтобы появилось окно Database User Properties (рис 34.15(рис 34.15) Вкладка Permissions окна Database User PropertiesДля вызова этой вкладки вы можете также щелкнуть правой кнопкой мыши на имени данного пользователя, указать в контекстном меню пункт All Tasks (Все задачи) и выбрать пункт Manage Permissions (Управление полномочиями). В этой вкладке вы можете управлять полномочиями, присваиваемыми данному пользователю. Чтобы присвоить этому пользователю полномочия доступа к объектам внутри базы данных, установите нужные флажки в колонках SELECT, INSERT, UPDATE, DELETE, EXEC и DRI окна списка. ("DRI" – сокращение от "declarative referential integrity" – описательная целостность на уровне ссылок.) В колонке Object (Объект) содержится список объектов. Вы можете использовать кнопки выбора вверху этого окна, чтобы включить в список все объекты (первая кнопка выбора) или только те объекты, к которым уже имеет полномочия доступа данный пользователь.
  • Использование T-SQL для присваивания полномочий доступа к объектам

    Чтобы использовать T-SQL для присваивания какому-либо пользователю полномочий доступа к объектам, вы должны выполнить оператор GRANT. Этот оператор имеет следующий синтаксис:

    GRANT  { ALL | полномочия }
           	[ колонка ON {таблица | представление} ] |
           	[ ON таблица(колонка) ] |
           	[ ON представление(колонка) ] |
           	[ ON { хранимая_процедура | расширенная_процедура } ]
    TO учетная_запись_безопасности
           	[ WITH GRANT OPTION ]
           	[ AS { группа | роль } ]

    Параметр учетная_запись_безопасности может быть представлен одним из следующих типов учетных записей:

  • Пользователь SQL Server.
  • Роль SQL Server.
  • Пользователь Windows NT или Windows 2000.
  • Группа Windows NT или Windows 2000.
  • Использование ключевого слова GRANT OPTION позволяет пользователю или пользователям, указанным в данном операторе, предоставлять указанный тип полномочий другим пользователям. Это может оказаться полезным, если вы предоставляете полномочия другим DBA. Однако GRANT OPTION следует использовать с осторожностью.

    Необязательный параметр AS указывает, кто имеет право на выполнение этого оператора GRANT. Право на выполнение оператора GRANT должно быть конкретно предоставлено пользователю или роли.

    Ниже приводится пример использования оператора GRANT:

    GRANT  SELECT, INSERT, UPDATE
    ON     	Customers 
    TO     	MaryW 
    WITH   GRANT OPTION 
    AS     	Accounting

    Параметр AS Accounting используется потому, что роль Accounting имеет полномочия на предоставление полномочий по таблице Customers. Ключевое слово GRANT OPTION позволяет пользователю MaryW предоставлять указанные полномочия другим пользователям.

    Дополнительная информация. Для просмотра списка полномочий, которые можно указывать в операторе GRANT, найдите текст "GRANT, described (GRANT)" в индексе Books Online.

    Использование T-SQL для отзыва полномочий по объектам

    Для отзыва полномочий какого-либо пользователя по объектам вы можете использовать оператор T-SQL REVOKE. Оператор REVOKE имеет следующий синтаксис:

    REVOKE  [ GRANT OPTION FOR ] 
            	{ ALL  [ PRIVILEGES ] | полномочия }
                  			[ колонка ON {таблица | представление} ] |
                  			[ ON таблица(колонка) ] |
                  			[ ON представление(колонка) ] |
                  			[ ON { хранимая_процедура | расширенная_процедура } ]
            	{ TO     | FROM } учетная_запись_безопасности
                  			[ CASCADE ]
                  			[ AS { группа | роль } ]

    Параметр учетная_запись_безопасности может быть представлен одним из следующих типов учетных записей:

  • Пользователь SQL Server.
  • Роль SQL Server.
  • Пользователь Windows NT или Windows 2000.
  • Группа Windows NT или Windows 2000.
  • Ключевое слово GRANT OPTION FOR позволяет вам отзывать полномочия, которые вы предоставили с помощью ключевого слова GRANT OPTION, а также отзывать указанные здесь полномочия. Необязательный параметр AS указывает, кто имеет право на выполнение этого оператора REVOKE.

    Ниже приводится пример использования оператора REVOKE:

    REVOKE  	ALL
    ON      		Customers 
    FROM    	MaryW

    Оператор REVOKE ALL выполнит отзыв всех полномочий, которые имеет пользователь MaryW по таблице Customers.

    Дополнительная информация. Для просмотра списка полномочий, которые можно указывать в операторе REVOKE, найдите текст "REVOKE, described (REVOKE)" в индексе Books Online.

    Полномочия на использование операторов для баз данных

    Кроме полномочий доступа к объектам баз данных, вы можете также предоставлять полномочия на использование операторов. Полномочия доступа к объектам позволяют пользователям выполнять доступ к существующим объектам базы данных, в то время как полномочия на использование операторов позволяют им создавать объекты баз данных, включая базы данных и таблицы. Можно предоставлять следующие полномочия на использование операторов.

  • BACKUP DATABASE. Позволяет пользователю выполнять оператор BACKUP DATABASE.
  • BACKUP LOG. Позволяет пользователю выполнять оператор BACKUP LOG.
  • CREATE DATABASE. Позволяет пользователю создавать новую базу данных.
  • CREATE DEFAULT. Позволяет пользователю создавать значения по умолчанию, которые можно присвоить колонкам.
  • CREATE PROCEDURE. Позволяет пользователю создавать хранимые процедуры.
  • CREATE RULE. Позволяет пользователю создавать правила.
  • CREATE TABLE. Позволяет пользователю создавать новые таблицы.
  • CREATE VIEW. Позволяет пользователю создавать новые представления.
  • Вы можете предоставлять полномочия на использование операторов с помощью Enterprise Manager или T-SQL.

    Использование Enterprise Manager для предоставления полномочий на использование операторов

    Чтобы использовать Enterprise Manager для предоставления полномочий на использование операторов для баз данных какому-либо пользователю, выполните следующие шаги.

  • Раскройте группу серверов, раскройте сервер и затем раскройте папку Databases. Щелкните правой кнопкой мыши на имени базы данных, для которой хотите присвоить полномочия, и выберите из контекстного меню пункт Properties, чтобы появилось окно Properties для этой базы данных (рис 34.16(рис 34.16) Окно Properties для базы данных
  • Щелкните на вкладке Permissions (рис 34.17(рис 34.17) Вкладка Permissions окна Properties базы данных
  • Использование T-SQL для предоставления полномочий на использование операторов

    Для предоставления полномочий на использование операторов какому-либо пользователю с помощью T-SQL применяется оператор GRANT. Этот оператор имеет следующий синтаксис:

    GRANT  { ALL | оператор }
    TO     	учетная_запись_безопасности

    Пользователю могут быть предоставлены полномочия на использование операторов CREATE DATABASE, CREATE DEFAULT, CREATE PROCEDURE, CREATE RULE, CREATE TABLE, CREATE VIEW, DROP TABLE, DROP VIEW, BACKUP DATABASE и BACKUP LOG, описанных выше в этой лекции. Например, чтобы предоставить полномочия на использование операторов CREATE DATABASE и CREATE TABLE пользовательской учетной записи JackR, используйте следующий оператор:

    GRANT  CREATE DATABASE, CREATE TABLE 
    TO     	'JackR'

    Как видите, добавление полномочий на использование операторов в пользовательскую учетную запись не представляет каких-либо сложностей.

    Использование T-SQL для отзыва полномочий на использование операторов

    Вы можете использовать оператор T-SQL REVOKE для удаления из пользовательской учетной записи полномочий на использование операторов. Этот оператор имеет следующий синтаксис:

    REVOKE  { ALL | оператор }
    FROM     учетная_запись_безопасности

    Например, для удаления из учетной записи пользователя JackR только полномочий на использование оператора CREATE DATABASE используйте следующий оператор:

    REVOKE  	CREATE DATABASE 
    FROM    	'JackR'

    Как видите, удаление полномочий на использование операторов из пользовательской учетной записи не представляет каких-либо сложностей.

    Администрирование ролей баз данных

    Вы можете упростить задачу управления многими полномочиями для многих пользователей путем использования ролей для баз данных. Роли баз данных используются, чтобы предоставлять группам пользователей одни и те же полномочия доступа к базам данных без необходимости присваивания этих полномочий по отдельности. Вместо присваивания отдельных полномочий отдельным пользователям вы можете создать роль, представляющую полномочия, используемые группой пользователей, и затем присвоить их этой группе.

    Обычно роли создаются для определенных рабочих групп, классов работ или задач. При этом подходе новые пользователи могут становиться членами одной или нескольких ролей баз данных, исходя из заданий, которые они будут выполнять. Например, роли можно определять для классов работ, таких как счета кредиторов, проектирование и использование людских ресурсов. Если пользователь включается в один из этих отделов или групп, то он просто становится членом (участником) роли, созданной для этой группы. Пользователь может быть членом одной или нескольких ролей, но это не является обязательным требованием. Кроме участия в какой-либо роли базы данных, пользователю можно также присваивать отдельные полномочия.

    Создание и модифицирование ролей

    Для выполнения задач создания и модифицирования ролей баз данных используются те же средства, что и для выполнения большинства задач, относящихся к администрированию баз данных: Enterprise Manager или операторы T-SQL. (В SQL Server нет мастера для этих задач.) Используя любое из этих средств, вы должны выполнить следующие задачи при реализации роли.

  • Создать роль базы данных.
  • Предоставить полномочия этой роли.
  • Назначить пользователей-участников этой роли.
  • Просматривая свойства роли, вы увидите как полномочия, предоставленные этой роли, так и пользователей, назначенных для этой роли.

    Использование Enterprise Manager для администрирования ролей

    Для создания ролей базы данных с помощью Enterprise Manager выполните следующие шаги.

  • Раскройте группу серверов, раскройте сервер и затем раскройте папку Databases. Щелкните правой кнопкой мыши на имени базы данных, в которой хотите создать роль (мы будем использовать для данного примера Northwind), укажите в контекстном меню команду New и затем выберите пункт Database Role (Роль базы данных). Альтернативный способ – раскрыть базу данных, щелкнуть правой кнопкой мыши на Roles (Роли) и выбрать из контекстного меню пункт New Database Role (Создать роль базы данных). При любом способе появится окно Database Role Properties (Свойства роли базы данных) (рис 34.18(рис 34.18) Окно Database Role Properties (Свойства роли базы данных)
  • Задайте описательное имя для роли в текстовом поле Name – выберите имя, которое поможет вам вспомнить назначение этой роли. На рис. 34.18 показано имя Accounts Payable (Счета кредиторов), выбранное для этой роли.
  • Чтобы назначить пользователей для этой роли, щелкните на кнопке Add (Добавить). Появится список пользовательских учетных записей, имеющих доступ к соответствующей базе данных (рис 34.19(рис 34.19) Диалоговое окно Add Role Members (Добавление членов роли)
  • Чтобы задать полномочия для данной роли, откройте окно Database Role Properties. Для этого раскройте папку Roles, щелкните правой кнопкой мыши на имени роли и выберите из контекстного меню пункт Properties. Затем щелкните на кнопке Permissions, чтобы появилось окно Database Role Properties – Northwind (рис 34.20(рис 34.20) Окно Database Role Properties – Northwind
  • В этом окне вы можете присваивать данной роли различные полномочия доступа к объектам базы данных, содержащей эту роль. Для этого установите нужные флажки в окне списка. Объекты базы данных приводятся в списке колонки Object. Вы можете использовать кнопки выбора вверху этого окна, чтобы включить в список все объекты (первая кнопка выбора) или только те объекты, к которым уже имеет полномочия доступа данная роль. Назначив данную роль какому-либо пользователю, вы предоставляете этому пользователю все полномочия, присвоенные данной роли.

    После создания роли вы можете модифицировать ее в окне Database Role Properties. Чтобы модифицировать роль, выполните шаги, используемые для добавления полномочий к роли. Вы можете добавлять или удалять пользователей и полномочия в окне Database Role Properties.

    Использование T-SQL для администрирования ролей

    Вы можете также создавать роли с помощью хранимой процедуры sp_addrole. Эта хранимая процедура имеет следующий синтаксис:

    sp_addrole  [ @rolename = ] ''роль'
            [  ,  [ @ownername = ] 'владелец' ]

    Например, добавить роль с именем readonly к базе данных Northwind, используйте следующий оператор T-SQL:

    USE Northwind 
    GO
    sp_addrole 'readonly' , 'dbo'
    GO

    Оператор USE Northwind указывает Northwind как текущую базу данных. Если не указать базу данных, то роль будет создана в базе данных, принятой у вас по умолчанию.

    Эта хранимая процедура только создает роль. Чтобы добавить полномочия к этой роли, используйте описанный выше оператор GRANT. Для удаления полномочий из роли используйте оператор REVOKE, также описанный выше в этой лекции.

    Например, чтобы добавить в роль readonly полномочия типа SELECT по таблицам Employees, Customers и Orders, используйте следующий оператор GRANT:

    USE Northwind
    GO 
    GRANT  SELECT 
    ON     	Employees 
    TO     	readonly 
    GO 
    GRANT  SELECT 
    ON     	Customers 
    TO     	readonly 
    GO

    Чтобы добавить пользователей к этой роли, используйте хранимую процедуру sp_addrolemember. Хранимая процедура sp_addrolemember имеет следующий синтаксис:

    sp_addrolemember 'роль', 'учетная_запись_безопасности'

    Следующий оператор добавляет пользователя к роли readonly:

    USE Northwind
    GO
    sp_addrolemember 'readonly' , 'Guest'
    GO

    Использование фиксированных ролей на сервере

    Во время инсталляции SQL Server создается ряд заранее определенных ролей, которые применяются на уровне сервера. Эти фиксированные роли на сервере используются для предоставления полномочий DBA; они могут содержать как полномочия на уровне сервера, так и полномочия доступа к объектам и операторам. Ниже приводится список этих ролей.

  • bulkadmin. Позволяет выполнять массовые вставки.
  • dbcreator. Позволяет создавать и изменять базы данных.
  • diskadmin. Позволяет управлять файлами на дисках.
  • processadmin. Позволяет управлять процессами SQL Server.
  • securityadmin. Позволяет управлять login-записями и создавать полномочия доступа к базам данных.
  • serveradmin. Позволяет задавать любые параметры сервера и закрывать базу данных.
  • setupadmin.Позволяет управлять связанными серверами и процедурами запуска.
  • sysadmin.Позволяет выполнять любые операции на сервере.
  • Присваивая пользовательские учетные записи фиксированным ролям на сервере, вы позволяете пользователям осуществлять административные задачи, полномочия на выполнение которых имеют эти роли. В зависимости от ваших потребностей это может оказаться предпочтительнее использования всеми DBA одной и той же административной учетной записи. Подобно ролям для баз данных фиксированные роли на уровне сервера намного проще поддерживать, чем отдельные полномочия, но фиксированные роли нельзя модифицировать. Вы можете добавить пользователя к фиксированной роли, выполнив следующие шаги.

  • В окне Enterprise Manager раскройте группу серверов, раскройте сервер, раскройте папку Security и затем щелкните на Server Roles (Роли на сервере). Щелкните правой кнопкой мыши на фиксированной роли, к которой хотите добавить пользователя, и выберите из контекстного меню пункт Properties. Появится окно Server Role Properties (Свойства роли на сервере) (рис 34.21(рис 34.21) Окно Server Role Properties (Свойства роли на сервере)
  • Чтобы добавить к этой роли пользовательскую учетную запись, сначала щелкните на кнопке Add. Появится диалоговое окно Add Members (рис 34.22(рис 34.22) Диалоговое окно Add Members
  • Выбрав пользователей, которых хотите добавить к данной фиксированной роли, щелкните на кнопке OK. Произойдет возврат в окно Server Role Properties. Щелкните на кнопке OK, чтобы добавить пользователя к данной роли.
  • Делегирование учетной записи безопасности

    SQL Server 2000 использует средства безопасности Windows 2000 с помощью модели безопасности Kerberos. (Информацию о модели безопасности Kerberos см. в лекции 2.) SQL Server 2000 использует протокол Kerberos для поддержки взаимной аутентификации между клиентом и сервером. Это позволяет передавать "верительные данные" клиента между компьютерами, чтобы этот клиент мог подсоединяться к нескольким серверам; при доступе к новому серверу этот сервер может продолжать работу с помощью верительных данных клиента. Это совместное использование верительных данных называется делегированием учетной записи безопасности.

    Рассмотрим пример делегирования учетной записи безопасности. Предположим, что клиент подсоединяется к серверу ServerA как NTDOMAIN\AlexR, а ServerA подсоединяется к серверу ServerB. Тем самым ServerB "знает", что подсоединение осуществляется с помощью учетной записи системы безопасности NTDOMAIN\AlexR. Это позволяет клиенту обойтись без регистрации на сервере ServerB.

    Если вы хотите использовать делегирование учетной записи безопасности, то все серверы, к которым вы подсоединяетесь, должны работать под управлением Windows 2000 с активизированной поддержкой Kerberos, а вы должны использовать службы Active Directory. Для делегирования работы в службах Active Directory должны быть установлены следующие параметры.

  • Account is sensitive and cannot be delegated (Учетная запись является критически важной и не может быть делегирована). Этот параметр нельзя устанавливать, если пользователь запрашивает делегирование.
  • Account is trusted for delegation (Учетная запись является доверяемой для делегирования). Этот параметр должен быть установлен для служебной учетной записи SQL Server 2000.
  • Computer is trusted for delegation (Компьютер является доверяемым для делегирования).Этот параметр должен быть установлен для сервера, на котором выполняется один из экземпляров SQL Server 2000.
  • Конфигурирование SQL Server

    Прежде чем использовать делегирование учетных записей безопасности, вы должны сконфигурировать SQL Server, чтобы он допускал делегирование. Делегирование вызывает взаимную аутентификацию. Чтобы можно было использовать делегирование учетных записей безопасности, SQL Server 2000 должен иметь SPN-имя (Service Principal Name), назначенное администратором учетных записей домена Windows 2000. SPN-имя должно быть присвоено служебной учетной записи сервера SQL Server на данном компьютере. SPN-имя необходимо для проверки того, что SQL Server верифицирован на определенном сервере и по определенному адресу порта (socket) администратором учетных записей домена Windows 2000. Администратор вашего домена может задать SPN-имя для SQL Server с помощью утилиты Setspn, входящей в комплект Windows 2000 Resource Kit. Чтобы создать SPN-имя для SQL Server, запустите следующий оператор:

    setspn -A MSSQLSvc/Host:port serviceaccount

    Вот пример использования этого оператора:

    setspn -A MSSQLSvc/MyServer.MyDomain.MyCompany.com sqlaccount
    Дополнительная информация. Более подробную информацию по утилите Setspn см. в документации Windows 2000.

    Чтобы использовать делегирование учетных записей безопасности, вы должны также использовать TCP/IP. Вы не можете использовать именованные каналы (named pipes), поскольку SPN-имя указывает определенный порт (socket) TCP/IP. Если вы используете несколько портов, то должны иметь SPN для каждого порта.

    Вы можете активизировать делегирование с помощью учетной записи LocalSystem. SQL Server выполнит саморегистрацию при запуске службы и автоматически зарегистрирует SPN-имя. Этот вариант проще, чем активизация с помощью пользовательской учетной записи в домене. Однако при закрытии SQL Server SPN-имена будут лишены регистрации для учетной записи LocalSystem. Чтобы активизировать делегирование под учетной записью LocalSystem, выполните следующий оператор в утилите Setspn:

    setspn -A MSSQLSvc/Host:port serviceaccount
    Примечание. Изменяя служебную учетную запись в SQL Server 2000, вы должны удалить все определенные SPN-имена и создать новые.

    Заключение

    В этой лекции вы узнали об управлении пользователями и системой безопасности SQL Server. Вы узнали, как используются учетные записи подключения (login-записи) и учетные записи пользователей базы данных, чтобы осуществлять доступ к базе данных, как создавать login-записи и пользователей баз данных, а также управлять ими. Вы также узнали, как упростить управление пользователями с помощью ролей базы данных, полномочия которых можно присваивать группе пользователей и модифицировать их из одной точки. Вы также узнали о специальной группе ролей, которые называются фиксированными ролями на сервере и используются для предоставления административных полномочий пользователям и DBA. И, наконец, мы рассмотрели улучшенное средство безопасности, включенное в SQL Server 2000, которое позволяет передавать защищенным образом учетные записи безопасности между серверами в среде Windows 2000. В лекции 35 вы узнаете о хранимых процедурах SQL Server и оптимизации ваших запросов.

    Страницы:

    В этой лекции вы узнаете, как управлять пользователями и системой безопасности в среде Microsoft SQL Server 2000. Вместе с планированием резервного копирования и восстановления, определением состава системы и управлением дисковым пространством управление системой безопасности является одной из наиболее характерных задач для администратора баз данных (DBA). Это также одна из наиболее важных задач, которые должен выполнять DBA. Если пренебречь вопросами безопасности системы, это может привести к потере или порче данных.

    Эта лекция охватывает ряд тем, относящихся к управлению пользователями и системой безопасности. Вы узнаете о том, как создавать пользовательские login-записи* (пользовательские учетные записи подключения к SQL Server) и управлять ими, а также о режимах аутентификации; кроме того, вы узнаете об идентификаторах пользователей. Пользовательская login-запись (user login) используется для аутентификации доступа к SQL Server. Она может аутентифицироваться через систему Microsoft Windows NT, Windows 2000 или SQL Server. Идентификатор пользователя (user ID) используется, чтобы присваивать пользовательские полномочия для доступа к определенным объектам в отдельных базах данных. Идентификаторы пользователей связаны с пользовательскими учетными записями и могут содержать (или не содержать) одно и то же имя, как вы увидите далее. Вы также узнаете о типах полномочий, которые могут быть присвоены в SQL Server, а также об их использовании. Кроме того, вы узнаете, как использовать роли для более простого управления пользователями. И, наконец, вы узнаете о важном средстве в SQL Server 2000, которое называется делегированием учетной записи безопасности. К концу этой лекции вы получите знания, необходимые для управления пользовательскими login-записями и системой безопасности.

    Создание и администрирование пользовательских login-записей

    Начнем изучение средств управления пользователями и системой безопасности с рассмотрения пользовательских login-записей. В этом разделе мы опишем сначала, почему так важны login-записи, и рассмотрим методы аутентификации, которые можно использовать для поддержки login-записей. Затем мы рассмотрим три метода создания login-записей: использование SQL Server Enterprise Manager, использование Transact-SQL (T-SQL) и использование мастера создания учетных записей Create Login Wizard. И, наконец, мы увидим, как использовать Enterprise Manager и T-SQL для создания новых пользовательских login-записей.

    Зачем нужно создавать пользовательские login-записи?

    Пользовательские login-записи позволяют вам защищать свои данные от преднамеренного или непреднамеренного модифицирования несанкционированными (неавторизованными) пользователями. С помощью пользовательских login-записей SQL Server может аутентифицировать отдельных авторизованных пользователей. Каждой пользовательской login-записи присваивается уникальное имя и пароль. Каждому пользователю присваивается его собственная учетная login-запись для входа в SQL Server. Без пользовательских login-записей для всех соединений с SQL Server использовался бы один и тот же идентификатор, а это означает, что вы не могли бы создавать различные уровни безопасности для тех, кто осуществляет доступ к базе данных.

    Вы можете создавать различные уровни безопасности, предоставляя различным учетным login-записям различные полномочия для доступа к объектам и выполнения функций. Вы можете также шифровать определенные объекты базы данных, такие как хранимые процедуры и представления, чтобы скрывать их определения от неавторизованных пользователей. Кроме того, используя пользовательские login-записи, вы можете разрешать вставку и обновление информации в определенных таблицах базы данных только некоторым пользователям и предоставлять доступ к этим таблицам по чтению основной массе пользователей.

    Чтобы увидеть, как осуществляется ограничение доступа к данным с помощью пользовательских login-записей, вернемся к примеру, впервые представленному в лекции 18, где показано использование представлений для ограничения доступа к критически важным данным. Предположим, что у нас имеется таблица Employee, содержащая информацию о сотрудниках, включая имя каждого сотрудника, номер телефона, номер офиса), должность, заработную плату, надбавку и т.д. Чтобы воспрепятствовать доступу определенных пользователей к конфиденциальным данным этой таблицы, сначала нужно создать представление, содержащее только общедоступные данные, такие как имена сотрудников, номера телефонов и номера офисов. Затем, реализуя пользовательские login-записи, вы можете ограничить доступ к исходной таблице, разрешив при этом доступ всех пользователей к представлению. Но если не использовать возможности пользовательских login-записей, то любой пользователь будет иметь доступ и к представлению, и к таблице, что лишает смысла использование этого представления.

    Режимы аутентификации

    Для доступа к SQL Server можно использовать два режима аутентификации: режим аутентификации Windows (Windows Authentication) и режим смешанной аутентификации (Mixed Mode Authentication). В первом случае аутентификация пользователя осуществляется операционной системой Windows. Затем SQL Server использует аутентификацию этой операционной системы, чтобы определить, какие пользовательские полномочия можно применять в каждом случае. В смешанном режиме аутентификацию пользователя осуществляют как Windows NT/2000, так и SQL Server. Для доступа к SQL Server вы должны в любом случае сначала осуществить вход по учетной записи Windows NT/2000, поэтому при выборе режима аутентификации вы должны решить, нужно ли вам использовать аутентификацию SQL Server в дополнение к аутентификации Windows. Рассмотрим каждый из этих режимов аутентификации более подробно. Ниже в этом разделе вы узнаете, как реализовать оба этих режима.

    Аутентификация в Windows

    Как уже говорилось, при аутентификации с помощью Windows обеспечение безопасности для SQL Server осуществляет с помощью учетных записей система Windows NT/2000. При подсоединении пользователя к Windows NT/2000 эта система проверяет подлинность пользователя по его учетной записи. SQL Server "убеждается" в том, что пользователь был проверен системой Windows NT/2000, и разрешает доступ, основываясь на этой аутентификации. Для этого используется интеграция процесса проверки login-записей SQL Server с процессом проверки учетных записей в Windows. Атрибуты безопасности на уровне сети проверяются с помощью сложного процесса шифрования, обеспечиваемого в Windows NT/2000. После аутентификации операционной системой в этом режиме дальнейшая аутентификация для доступа к SQL Server уже не требуется. Для доступа к SQL Server вы должны только указать свой пароль доступа к Windows NT/2000.

    Режим аутентификации Windows считается более надежным методом, чем режим смешанной аутентификации, за счет использования дополнительных средств безопасности. Это защищенная проверка и шифрование паролей, аудит, поддержка сроков действия паролей, минимальная длина паролей и автоматическое блокирование учетных записей после определенного количества безуспешных попыток входа.

    Режим смешанной аутентификации

    В режиме смешанной аутентификации пользователи могут осуществлять доступ к SQL Server с помощью аутентификации в Windows или аутентификации в SQL Server. При соединении, осуществляемом в этом режиме из незащищенной системы, SQL Server аутентифицирует данные входа, проверяя, имеется ли учетная login-запись для пользователя, запрашивающего вход. SQL Server осуществляет аутентификацию по этой учетной login-записи путем сравнения имени и пароля пользователя, подсоединяющегося к SQL Server, с информацией учетной login-записи, хранящейся в базе данных. Если для этого пользователя не создана учетная login-запись или пользователь неверно указал имя или пароль, то SQL Server не разрешает доступ.

    Режим аутентификации Windows недоступен, если SQL Server работает под управлением Windows 95/98, поэтому вы должны применять на этих платформах аутентификацию SQL Server (указывая режим смешанной аутентификации). Кроме того аутентификация SQL Server требуется для Web-приложений (с помощью Microsoft Internet Information Server), поскольку пользователи этих приложений, скорее всего, находятся не в том же домене, где сервер, и поэтому для них нельзя использовать систему безопасности Windows. Для других приложений также может потребоваться аутентификация SQL Server: некоторые разработчики предпочитают использовать для своих приложений систему безопасности SQL Server, поскольку это упрощает обеспечение безопасности их приложений. Если приложения используют систему безопасности SQL Server (в доверенной сети), то разработчики этих приложений не обязаны обеспечивать аутентификацию внутри самих приложений, что упрощает их работу.

    Задание режима аутентификации

    Чтобы задать режим аутентификации, выполните следующие шаги.

  • Откройте окно Enterprise Manager. В левой панели щелкните правой кнопкой мыши на имени сервера, содержащего базу данных, для которой вы хотите задать режим аутентификации, и выберите из контекстного меню пункт Properties (Свойства), чтобы появилось окно SQL Server Properties. Щелкните на вкладке Security (Безопасность) (рис. 34.1).
  • В этой вкладке вы можете выбрать как режим аутентификации, так и служебную учетную запись для запуска SQL Server. В секции Security выберите режим аутентификации: кнопка выбора SQL Server and Windows NT/2000 (смешанный режим) или Windows NT/2000 only (только Windows). Вы можете также задать уровень аудита входов по учетным записям. Соответствующая кнопка выбора определяет, какой тип аудита будет выполняться для входов (если вообще будет выполняться). Имеется четыре следующих уровня:
  • None (Нет). Аудит входов не выполняется. Это вариант, принятый по умолчанию.
  • Success (Успешный вход).Регистрируются все успешные попытки входа.
  • Failure (Безуспешный вход).Регистрируются все безуспешные попытки входа.
  • All (Все).Регистрируются все попытки входа.
  • (рис 34.1) Вкладка Security (Безопасность) окна SQL Server Properties Примечание. Уровень аудита – это свойство базы данных. Определенный уровень аудита будет применяться ко всем входам.
  • В секции Startup service account (Служебная учетная запись для запуска SQL Server) нужно указать, какую учетную запись Windows NT следует использовать при запуске службы SQL Server. Вы можете использовать встроенную учетную запись локальной системы (System account) или указать определенную учетную запись, такую как Administrator, и пароль. Щелкните на кнопке OK для подтверждения своих установок.
  • Login-записи и пользователи

    В нескольких следующих разделах вы узнаете, как создавать login-записи и пользователей. Но прежде чем приступить к этому процессу, вы должны четко разобраться в таких понятиях, как учетные записи и пользователи. В этом разделе дается краткое описание этих двух терминов.

    Как уже говорилось, пользовательская учетная запись Windows NT/2000 может потребоваться для подсоединения к базе данных. Независимо от используемого режима аутентификации (аутентификация Windows NT/2000 или режим смешанной аутентификации) учетная запись, которую вы используете для подсоединения к SQL Server, называется login-записью SQL Server (учетной записью подключения к SQL Server). Кроме этой учетной записи, каждая база данных имеет набор пользовательских учетных псевдозаписей, присвоенных этой базе данных. Эти учетные псевдозаписи являются алиасами (альтернативными именами) для учетных login-записей SQL Server. Например, в базе данных у вас может быть пользователь с именем manager, связанный с login-записью guest, а база данных pubs может иметь пользователя с именем manager, связанного с login-записью sa. По умолчанию учетная login-запись SQL Server не имеет связанного с ней идентификатора пользователя (user ID); тем самым она не содержит никаких полномочий доступа.

    Создание login-записей SQL Server

    Вы можете выполнять большинство административных задач SQL Server, используя один из нескольких методов, и задача создания пользовательских login-записей не является исключением из этого правила. Как уже говорилось, вы можете создать login-запись, используя один из трех методов: с помощью Enterprise Manager, с помощью T-SQL или с помощью мастера создания login-записей Create Login Wizard. В этом разделе вы узнаете, как создавать login для SQL Server с помощью каждого их этих методов.

    Использование Enterprise Manager для создания login-записей SQL Server

    Чтобы создать login-запись для SQL Server с помощью Enterprise Manager, выполните следующие шаги.

  • В левой панели Enterprise Manager раскройте группу серверов, раскройте сервер и затем раскройте папку Security. Щелкните правой кнопкой мыши на Logins и выберите из контекстного меню New Login (Создать login-запись), чтобы появилось окно свойств login-записи SQL Server Login Properties (рис. 34.2). В текстовом поле Name вкладки General введите имя login-записи. Если вы используете аутентификацию Windows, то это должно быть допустимое имя учетной записи Windows NT или Windows 2000. При этом в текстовом поле Domain (Домен) нужно указать домен Windows NT или Windows 2000. В секции Default (По умолчанию) укажите принятую по умолчанию базу данных и язык, который будет использоваться пользователем. В секции Authentication (Аутентификация) укажите, какая аутентификация будет использоваться: по учетной записи Windows NT или Windows 2000 (кнопка выбора Windows NT Authentication) или аутентификация в SQL Server (кнопка выбора SQL Server Authentication). Во втором случае будет использоваться смешанный режим аутентификации.
  • Щелкните на вкладке Server Roles (Роли сервера) (рис 34.3(рис 34.3) Вкладка General окна SQL Server Login Properties(рис 34.2) Вкладка Server Roles (Роли сервера) окна SQL Server Login Properties
  • Щелкните на вкладке Database Access (Доступ к базе данных) (рис 34.4(рис 34.4) Вкладка Database Access (Доступ к базе данных) окна SQL Server Login Properties
  • По окончании установки параметров сохраните login-запись, щелкнув на кнопке OK. Чтобы увидеть эту login-запись в списке других login-записей, щелкните на вкладке Logins в Enterprise Manager. Login-записи появятся в правой панели.
  • Использование T-SQL для создания login-записей

    Для создания login-записи с помощью T-SQL используется хранимая процедура sp_addlogin или хранимая процедура sp_grantlogin. Хранимая процедура sp_addlogin позволяет только добавлять аутентифицированного в SQL Server пользователя к базе данных SQL Server. Хранимая процедура sp_grantlogin позволяет добавлять пользователя, аутентифицированного в системе Windows NT/2000.

    Хранимая процедура sp_addlogin имеет следующий синтаксис:

    sp_addlogin  [ @loginame = ] 'имя_login-записи'
             [  ,  [ @passwd = ] 'пароль' ]
             [  ,  [ @defdb = ] 'база данных' ]
             [  ,  [ @deflanguage = ] 'язык' ]
             [  ,  [ @sid = ] 'sid' ]
             [  ,  [ @encryptopt = ] 'параметр_шифрования' ]

    Используются следующие необязательные параметры.

  • пароль. Указывает пароль login-записи для SQL Server. Значение по умолчанию – NULL.
  • база данных. Указывает базу данных по умолчанию для login-записи. Значение по умолчанию – master.
  • язык. Указывает язык по умолчанию для login-записи. Значение по умолчанию – текущий язык для SQL Server.
  • sid. Указывает идентификатор безопасности (SID), который является уникальным идентификационным номером. Если вы не указываете какое-либо значение, то он генерируется для вас системой. Параметр sid обычно не генерируется пользователями, но администраторы используют sid в ряде ситуаций. Когда DBA выполняет задачи поиска и устранения проблем, sid может потребоваться, чтобы определить проверяемую login-запись. Параметр sid является внутренним идентификатором для login-записи.
  • параметр_шифрования.Указывает, будет ли шифроваться пароль в системных таблицах. Значение по умолчанию – NULL, означающее, что пароль будет шифроваться. Значение skip_encryption (пропустить шифрование) означает, что пароль не будет шифроваться. Если указать значение skip_encryption_old, то пароль, зашифрованный в более ранней версии SQL Server, не будет шифроваться еще раз. Вам следует изменять значение по умолчанию, только если вы хотите избежать шифрования пароля в системных таблицах.
  • Ниже приводится простой пример добавления login-записи:

    EXEC sp_addlogin 'PatB'

    Не забудьте использовать ключевое слово EXEC перед именем хранимой процедуры.

    Ниже приводится более сложный пример добавления login-записи:

    sp_addlogin 'SharonR', 'mypassword', 'Northwind', 'us_english'

    Эта команда создает пользователя с именем SharonR и паролем "mypassword." По умолчанию будет использоваться база данных Northwind, и язык по умолчанию – U.S. English. В обычном случае вы должны предоставить создание идентификатора безопасности (SID) SQL Server вместо самостоятельного создания этого идентификатора.

    Хранимая процедура sp_grantlogin имеет следующий синтаксис:

    sp_grantlogin 'имя_login-записи'

    Ниже показан пример использования хранимой процедуры sp_grantlogin:

    EXEC sp_grantlogin 'MOUNTAIN_DEW\DickB'

    "DickB" – имя учетной записи Windows NT или Windows 2000, "MOUNTAIN_DEW" – имя системы.

    Добавив эти login-записи, вы можете просматривать их в Enterprise Manager. Для этого щелкните на папке Logins в левой панели.

    Использование мастера Create Login Wizard

    Чтобы создать login-запись для SQL Server с помощью мастера Create Login Wizard, выполните следующие шаги.

  • В окне Enterprise Manager раскройте группу серверов и щелкните на имени сервера. В меню Tools выберите пункт Wizards (Мастера). В появившемся диалоговом окне Select Wizard (Выбор мастера) раскройте папку Database, щелкните на Create Login Wizard (рис. 34.5) и затем щелкните на кнопке OK. Появится начальное окно мастера Create Login Wizard (рис. 34.6).
  • Щелкните на кнопке Next (Далее), чтобы появилось окно Select Authentication Mode for This Login (Выбор режима аутентификации для данной login-записи) (рис 34.7(рис 34.6) Окно Select Wizard(рис 34.5) Начальное окно мастера Create Login Wizard
  • Щелкните на кнопке Next, чтобы появилось окно Authentication with Windows NT (Аутентификация с помощью Windows) или Authentication With SQL Server (Аутентификация с помощью SQL Server), – в зависимости от режима аутентификации, выбранного вами на шаге 2. Нарис 34.8(рис 34.8) Окно Select Authentication Mode for This Login (Выбор режима аутентификации для данной login-записи)(рис 34.7) Окно Authentication with SQL Server (Аутентификация с помощью Windows)
  • Щелкните на кнопке Next, чтобы появилось окно Grant Access to Security Roles (Предоставление доступа ролям безопасности) (рис. 34.9). В этом окне вы можете выбрать роли базы данных, которые будут присвоены данной login-записи.
  • Щелкните на кнопке Next, чтобы появилось окно Grant Access to Databases (Предоставление доступа к базам данных) (рис. 34.10). В этом окне вы можете выбрать базы данных, к которым будет иметь доступ эта login-запись.
  • Щелкните на кнопке Next, чтобы появилось окно Completing the Create Login Wizard (Завершение работы мастера) (рис 34.11(рис 34.10) Окно Grant Access to Security Roles (Предоставление доступа ролям безопасности)(рис 34.9) Окно Grant Access to Databases (Предоставление доступа к базам данных)(рис 34.11) Окно Completing the Create Login Wizard (Завершение работы мастера)
  • Создание пользователей SQL Server

    Вы можете создавать пользователей SQL Server с помощью Enterprise Manager или T-SQL. (В SQL Server нет мастера, с помощью которого можно выполнять этот процесс.) В этом разделе вы узнаете, как использовать оба этих метода для создания пользователей SQL Server. Напомним, что пользователь SQL Server определяется для определенной базы данных, а полномочия доступа к этой базе данных присваиваются определенной пользовательской login-записи. Идентификатор пользователя (user ID) SQL Server можно рассматривать как аналог login-записи SQL Server, но они не обязательно имеют одинаковые имена.

    Примечание. Чтобы создать пользователя SQL Server, у вас уже должна быть создана login-запись SQL Server, поскольку имя пользователя является ссылкой на login-запись SQL Server.

    Использование Enterprise Manager для создания пользователей

    В отличие от login-записей SQL Server, которые создаются из папки Security в Enterprise Manager, пользователи SQL Server создаются из папки определенной базы данных в левой панели Enterprise Manager. Для создания пользователей с помощью Enterprise Manager выполните следующие шаги.

  • Щелкните правой кнопкой мыши на базе данных, в которой должен быть создан пользователь, укажите в контекстном меню команду New (Создать) и затем выберите пункт Database User (Пользователь базы данных), чтобы появилось окно свойств Database User Properties (рис 34.12(рис 34.12) Окно Database User Properties (Свойства пользователя базы данных)В раскрывающемся списке Login name введите допустимое имя login-записи SQL Server и в текстовом поле User name введите имя нового пользователя. Затем укажите роли для базы данных, членом которых будет новый пользователь; для этого установите соответствующие флажки в списке Database role membership (Участие в ролях базы данных). Как будет показано ниже в этой лекции, присваивая полномочия этим ролям, вы можете применять эти полномочия к данному пользователю.
  • Щелкните на кнопке Properties, чтобы появилось окно Database Role Properties (Свойства роли базы данных) (рис 34.13(рис 34.13) Окно Database Role Properties (Свойства роли базы данных)
  • По окончании два раза щелкните на кнопке OK, чтобы создать пользователя базы данных.
  • Использование T-SQL для создания пользователей

    Чтобы использовать T-SQL для создания пользователей базы данных, нужно выполнить хранимую процедуру sp_adduser. Эту хранимую процедуру можно запустить из ISQL или OSQL с использованием следующего синтаксиса:

    sp_adduser	[ @loginame = ] 'имя_login-записи'
           [  ,  [ @name_in_db = ] 'пользователь' ]
           [  ,  [ @grpname = ] 'группа' ]

    Имя_login-записи – это имя учетной login-записи SQL Server, которое является обязательным параметром. Переменная пользователь – это имя нового пользователя, и группа – это группа или роль, к которой будет принадлежать новый пользователь. Если значение параметра пользователь не указано, то оно совпадает со значением параметра имя_login-записи.

    С помощью следующей команды создается новый пользователь базы данных с именем JackR и учетной записью Windows NT или Windows 2000 FORT_WORTH\ DB_User:

    sp_adduser 'FORT_WORTH\DB_User', 'JackR'

    "FORT_WORTH" – имя системы или домена. "DB_User" – имя учетной записи Windows NT или Windows 2000.

    Администрирование полномочий доступа к базам данных

    Полномочия используются для управления доступом к объектам баз данных; они указывают, какие пользователи могут выполнять определенные операции с базой данных. Вы можете задавать полномочия на уровне сервера и на уровне базы данных. Полномочия на уровне сервера используются для того, чтобы администраторы баз данных (DBA) могли выполнять административные задачи для баз данных. Полномочия на уровне базы данных используются для того, чтобы разрешать или запрещать доступ к объектам и операторам базы данных. В этом разделе мы рассмотрим типы полномочий и способы их присваивания.

    Полномочия на уровне сервера

    Как уже говорилось, полномочия на уровне сервера присваиваются DBA и позволяют им выполнять задачи администрирования. Эти полномочия определяются по фиксированным ролям сервера. Пользовательским login-записям могут быть присвоены фиксированные роли на сервере, но эти роли нельзя модифицировать. (Роли на сервере описываются в разделе "Использование фиксированных ролей на сервере" далее.) К полномочиям на сервере относятся полномочия SHUTDOWN, CREATE DATABASE, BACKUP DATABASE и CHECKPOINT. Полномочия на сервере используются только для авторизации DBA, чтобы они могли выполнять административные задачи; их не нужно модифицировать или предоставлять отдельным пользователям.

    Полномочия на уровне объектов базы данных

    Полномочия на уровне объектов базы данных – это класс полномочий, которые предоставляются для доступа к объектам базы данных. Полномочия доступа к объектам необходимы для доступа к таблице или представлению с помощью таких операторов, как SELECT, INSERT, UPDATE и DELETE. Полномочия доступа к объектам также требуются для использования оператора EXECUTE, который применяется для запуска хранимых процедур. Для присваивания полномочий доступа к объектам используются Enterprise Manager и операторы T-SQL.

    Использование Enterprise Manager для присваивания полномочий доступа к объектам

    Чтобы использовать Enterprise Manager для предоставления полномочий доступа к объектам базы данных, выполните следующие шаги.

  • Раскройте группу серверов, раскройте сервер, раскройте базу данных, для которой хотите присвоить полномочия, и щелкните на папке Users (Пользователи). В правой панели появится список пользователей. Щелкните правой кнопкой мыши на имени пользователя и выберите из контекстного меню пункт Properties, чтобы появилось диалоговое окно Database User Properties (рис 34.14(рис 34.14) Окно Database User Properties
  • Щелкните на кнопке Permissions (Полномочия), чтобы появилось окно Database User Properties (рис 34.15(рис 34.15) Вкладка Permissions окна Database User PropertiesДля вызова этой вкладки вы можете также щелкнуть правой кнопкой мыши на имени данного пользователя, указать в контекстном меню пункт All Tasks (Все задачи) и выбрать пункт Manage Permissions (Управление полномочиями). В этой вкладке вы можете управлять полномочиями, присваиваемыми данному пользователю. Чтобы присвоить этому пользователю полномочия доступа к объектам внутри базы данных, установите нужные флажки в колонках SELECT, INSERT, UPDATE, DELETE, EXEC и DRI окна списка. ("DRI" – сокращение от "declarative referential integrity" – описательная целостность на уровне ссылок.) В колонке Object (Объект) содержится список объектов. Вы можете использовать кнопки выбора вверху этого окна, чтобы включить в список все объекты (первая кнопка выбора) или только те объекты, к которым уже имеет полномочия доступа данный пользователь.
  • Использование T-SQL для присваивания полномочий доступа к объектам

    Чтобы использовать T-SQL для присваивания какому-либо пользователю полномочий доступа к объектам, вы должны выполнить оператор GRANT. Этот оператор имеет следующий синтаксис:

    GRANT  { ALL | полномочия }
           	[ колонка ON {таблица | представление} ] |
           	[ ON таблица(колонка) ] |
           	[ ON представление(колонка) ] |
           	[ ON { хранимая_процедура | расширенная_процедура } ]
    TO учетная_запись_безопасности
           	[ WITH GRANT OPTION ]
           	[ AS { группа | роль } ]

    Параметр учетная_запись_безопасности может быть представлен одним из следующих типов учетных записей:

  • Пользователь SQL Server.
  • Роль SQL Server.
  • Пользователь Windows NT или Windows 2000.
  • Группа Windows NT или Windows 2000.
  • Использование ключевого слова GRANT OPTION позволяет пользователю или пользователям, указанным в данном операторе, предоставлять указанный тип полномочий другим пользователям. Это может оказаться полезным, если вы предоставляете полномочия другим DBA. Однако GRANT OPTION следует использовать с осторожностью.

    Необязательный параметр AS указывает, кто имеет право на выполнение этого оператора GRANT. Право на выполнение оператора GRANT должно быть конкретно предоставлено пользователю или роли.

    Ниже приводится пример использования оператора GRANT:

    GRANT  SELECT, INSERT, UPDATE
    ON     	Customers 
    TO     	MaryW 
    WITH   GRANT OPTION 
    AS     	Accounting

    Параметр AS Accounting используется потому, что роль Accounting имеет полномочия на предоставление полномочий по таблице Customers. Ключевое слово GRANT OPTION позволяет пользователю MaryW предоставлять указанные полномочия другим пользователям.

    Дополнительная информация. Для просмотра списка полномочий, которые можно указывать в операторе GRANT, найдите текст "GRANT, described (GRANT)" в индексе Books Online.

    Использование T-SQL для отзыва полномочий по объектам

    Для отзыва полномочий какого-либо пользователя по объектам вы можете использовать оператор T-SQL REVOKE. Оператор REVOKE имеет следующий синтаксис:

    REVOKE  [ GRANT OPTION FOR ] 
            	{ ALL  [ PRIVILEGES ] | полномочия }
                  			[ колонка ON {таблица | представление} ] |
                  			[ ON таблица(колонка) ] |
                  			[ ON представление(колонка) ] |
                  			[ ON { хранимая_процедура | расширенная_процедура } ]
            	{ TO     | FROM } учетная_запись_безопасности
                  			[ CASCADE ]
                  			[ AS { группа | роль } ]

    Параметр учетная_запись_безопасности может быть представлен одним из следующих типов учетных записей:

  • Пользователь SQL Server.
  • Роль SQL Server.
  • Пользователь Windows NT или Windows 2000.
  • Группа Windows NT или Windows 2000.
  • Ключевое слово GRANT OPTION FOR позволяет вам отзывать полномочия, которые вы предоставили с помощью ключевого слова GRANT OPTION, а также отзывать указанные здесь полномочия. Необязательный параметр AS указывает, кто имеет право на выполнение этого оператора REVOKE.

    Ниже приводится пример использования оператора REVOKE:

    REVOKE  	ALL
    ON      		Customers 
    FROM    	MaryW

    Оператор REVOKE ALL выполнит отзыв всех полномочий, которые имеет пользователь MaryW по таблице Customers.

    Дополнительная информация. Для просмотра списка полномочий, которые можно указывать в операторе REVOKE, найдите текст "REVOKE, described (REVOKE)" в индексе Books Online.

    Полномочия на использование операторов для баз данных

    Кроме полномочий доступа к объектам баз данных, вы можете также предоставлять полномочия на использование операторов. Полномочия доступа к объектам позволяют пользователям выполнять доступ к существующим объектам базы данных, в то время как полномочия на использование операторов позволяют им создавать объекты баз данных, включая базы данных и таблицы. Можно предоставлять следующие полномочия на использование операторов.

  • BACKUP DATABASE. Позволяет пользователю выполнять оператор BACKUP DATABASE.
  • BACKUP LOG. Позволяет пользователю выполнять оператор BACKUP LOG.
  • CREATE DATABASE. Позволяет пользователю создавать новую базу данных.
  • CREATE DEFAULT. Позволяет пользователю создавать значения по умолчанию, которые можно присвоить колонкам.
  • CREATE PROCEDURE. Позволяет пользователю создавать хранимые процедуры.
  • CREATE RULE. Позволяет пользователю создавать правила.
  • CREATE TABLE. Позволяет пользователю создавать новые таблицы.
  • CREATE VIEW. Позволяет пользователю создавать новые представления.
  • Вы можете предоставлять полномочия на использование операторов с помощью Enterprise Manager или T-SQL.

    Использование Enterprise Manager для предоставления полномочий на использование операторов

    Чтобы использовать Enterprise Manager для предоставления полномочий на использование операторов для баз данных какому-либо пользователю, выполните следующие шаги.

  • Раскройте группу серверов, раскройте сервер и затем раскройте папку Databases. Щелкните правой кнопкой мыши на имени базы данных, для которой хотите присвоить полномочия, и выберите из контекстного меню пункт Properties, чтобы появилось окно Properties для этой базы данных (рис 34.16(рис 34.16) Окно Properties для базы данных
  • Щелкните на вкладке Permissions (рис 34.17(рис 34.17) Вкладка Permissions окна Properties базы данных
  • Использование T-SQL для предоставления полномочий на использование операторов

    Для предоставления полномочий на использование операторов какому-либо пользователю с помощью T-SQL применяется оператор GRANT. Этот оператор имеет следующий синтаксис:

    GRANT  { ALL | оператор }
    TO     	учетная_запись_безопасности

    Пользователю могут быть предоставлены полномочия на использование операторов CREATE DATABASE, CREATE DEFAULT, CREATE PROCEDURE, CREATE RULE, CREATE TABLE, CREATE VIEW, DROP TABLE, DROP VIEW, BACKUP DATABASE и BACKUP LOG, описанных выше в этой лекции. Например, чтобы предоставить полномочия на использование операторов CREATE DATABASE и CREATE TABLE пользовательской учетной записи JackR, используйте следующий оператор:

    GRANT  CREATE DATABASE, CREATE TABLE 
    TO     	'JackR'

    Как видите, добавление полномочий на использование операторов в пользовательскую учетную запись не представляет каких-либо сложностей.

    Использование T-SQL для отзыва полномочий на использование операторов

    Вы можете использовать оператор T-SQL REVOKE для удаления из пользовательской учетной записи полномочий на использование операторов. Этот оператор имеет следующий синтаксис:

    REVOKE  { ALL | оператор }
    FROM     учетная_запись_безопасности

    Например, для удаления из учетной записи пользователя JackR только полномочий на использование оператора CREATE DATABASE используйте следующий оператор:

    REVOKE  	CREATE DATABASE 
    FROM    	'JackR'

    Как видите, удаление полномочий на использование операторов из пользовательской учетной записи не представляет каких-либо сложностей.

    Администрирование ролей баз данных

    Вы можете упростить задачу управления многими полномочиями для многих пользователей путем использования ролей для баз данных. Роли баз данных используются, чтобы предоставлять группам пользователей одни и те же полномочия доступа к базам данных без необходимости присваивания этих полномочий по отдельности. Вместо присваивания отдельных полномочий отдельным пользователям вы можете создать роль, представляющую полномочия, используемые группой пользователей, и затем присвоить их этой группе.

    Обычно роли создаются для определенных рабочих групп, классов работ или задач. При этом подходе новые пользователи могут становиться членами одной или нескольких ролей баз данных, исходя из заданий, которые они будут выполнять. Например, роли можно определять для классов работ, таких как счета кредиторов, проектирование и использование людских ресурсов. Если пользователь включается в один из этих отделов или групп, то он просто становится членом (участником) роли, созданной для этой группы. Пользователь может быть членом одной или нескольких ролей, но это не является обязательным требованием. Кроме участия в какой-либо роли базы данных, пользователю можно также присваивать отдельные полномочия.

    Создание и модифицирование ролей

    Для выполнения задач создания и модифицирования ролей баз данных используются те же средства, что и для выполнения большинства задач, относящихся к администрированию баз данных: Enterprise Manager или операторы T-SQL. (В SQL Server нет мастера для этих задач.) Используя любое из этих средств, вы должны выполнить следующие задачи при реализации роли.

  • Создать роль базы данных.
  • Предоставить полномочия этой роли.
  • Назначить пользователей-участников этой роли.
  • Просматривая свойства роли, вы увидите как полномочия, предоставленные этой роли, так и пользователей, назначенных для этой роли.

    Использование Enterprise Manager для администрирования ролей

    Для создания ролей базы данных с помощью Enterprise Manager выполните следующие шаги.

  • Раскройте группу серверов, раскройте сервер и затем раскройте папку Databases. Щелкните правой кнопкой мыши на имени базы данных, в которой хотите создать роль (мы будем использовать для данного примера Northwind), укажите в контекстном меню команду New и затем выберите пункт Database Role (Роль базы данных). Альтернативный способ – раскрыть базу данных, щелкнуть правой кнопкой мыши на Roles (Роли) и выбрать из контекстного меню пункт New Database Role (Создать роль базы данных). При любом способе появится окно Database Role Properties (Свойства роли базы данных) (рис 34.18(рис 34.18) Окно Database Role Properties (Свойства роли базы данных)
  • Задайте описательное имя для роли в текстовом поле Name – выберите имя, которое поможет вам вспомнить назначение этой роли. На рис. 34.18 показано имя Accounts Payable (Счета кредиторов), выбранное для этой роли.
  • Чтобы назначить пользователей для этой роли, щелкните на кнопке Add (Добавить). Появится список пользовательских учетных записей, имеющих доступ к соответствующей базе данных (рис 34.19(рис 34.19) Диалоговое окно Add Role Members (Добавление членов роли)
  • Чтобы задать полномочия для данной роли, откройте окно Database Role Properties. Для этого раскройте папку Roles, щелкните правой кнопкой мыши на имени роли и выберите из контекстного меню пункт Properties. Затем щелкните на кнопке Permissions, чтобы появилось окно Database Role Properties – Northwind (рис 34.20(рис 34.20) Окно Database Role Properties – Northwind
  • В этом окне вы можете присваивать данной роли различные полномочия доступа к объектам базы данных, содержащей эту роль. Для этого установите нужные флажки в окне списка. Объекты базы данных приводятся в списке колонки Object. Вы можете использовать кнопки выбора вверху этого окна, чтобы включить в список все объекты (первая кнопка выбора) или только те объекты, к которым уже имеет полномочия доступа данная роль. Назначив данную роль какому-либо пользователю, вы предоставляете этому пользователю все полномочия, присвоенные данной роли.

    После создания роли вы можете модифицировать ее в окне Database Role Properties. Чтобы модифицировать роль, выполните шаги, используемые для добавления полномочий к роли. Вы можете добавлять или удалять пользователей и полномочия в окне Database Role Properties.

    Использование T-SQL для администрирования ролей

    Вы можете также создавать роли с помощью хранимой процедуры sp_addrole. Эта хранимая процедура имеет следующий синтаксис:

    sp_addrole  [ @rolename = ] ''роль'
            [  ,  [ @ownername = ] 'владелец' ]

    Например, добавить роль с именем readonly к базе данных Northwind, используйте следующий оператор T-SQL:

    USE Northwind 
    GO
    sp_addrole 'readonly' , 'dbo'
    GO

    Оператор USE Northwind указывает Northwind как текущую базу данных. Если не указать базу данных, то роль будет создана в базе данных, принятой у вас по умолчанию.

    Эта хранимая процедура только создает роль. Чтобы добавить полномочия к этой роли, используйте описанный выше оператор GRANT. Для удаления полномочий из роли используйте оператор REVOKE, также описанный выше в этой лекции.

    Например, чтобы добавить в роль readonly полномочия типа SELECT по таблицам Employees, Customers и Orders, используйте следующий оператор GRANT:

    USE Northwind
    GO 
    GRANT  SELECT 
    ON     	Employees 
    TO     	readonly 
    GO 
    GRANT  SELECT 
    ON     	Customers 
    TO     	readonly 
    GO

    Чтобы добавить пользователей к этой роли, используйте хранимую процедуру sp_addrolemember. Хранимая процедура sp_addrolemember имеет следующий синтаксис:

    sp_addrolemember 'роль', 'учетная_запись_безопасности'

    Следующий оператор добавляет пользователя к роли readonly:

    USE Northwind
    GO
    sp_addrolemember 'readonly' , 'Guest'
    GO

    Использование фиксированных ролей на сервере

    Во время инсталляции SQL Server создается ряд заранее определенных ролей, которые применяются на уровне сервера. Эти фиксированные роли на сервере используются для предоставления полномочий DBA; они могут содержать как полномочия на уровне сервера, так и полномочия доступа к объектам и операторам. Ниже приводится список этих ролей.

  • bulkadmin. Позволяет выполнять массовые вставки.
  • dbcreator. Позволяет создавать и изменять базы данных.
  • diskadmin. Позволяет управлять файлами на дисках.
  • processadmin. Позволяет управлять процессами SQL Server.
  • securityadmin. Позволяет управлять login-записями и создавать полномочия доступа к базам данных.
  • serveradmin. Позволяет задавать любые параметры сервера и закрывать базу данных.
  • setupadmin.Позволяет управлять связанными серверами и процедурами запуска.
  • sysadmin.Позволяет выполнять любые операции на сервере.
  • Присваивая пользовательские учетные записи фиксированным ролям на сервере, вы позволяете пользователям осуществлять административные задачи, полномочия на выполнение которых имеют эти роли. В зависимости от ваших потребностей это может оказаться предпочтительнее использования всеми DBA одной и той же административной учетной записи. Подобно ролям для баз данных фиксированные роли на уровне сервера намного проще поддерживать, чем отдельные полномочия, но фиксированные роли нельзя модифицировать. Вы можете добавить пользователя к фиксированной роли, выполнив следующие шаги.

  • В окне Enterprise Manager раскройте группу серверов, раскройте сервер, раскройте папку Security и затем щелкните на Server Roles (Роли на сервере). Щелкните правой кнопкой мыши на фиксированной роли, к которой хотите добавить пользователя, и выберите из контекстного меню пункт Properties. Появится окно Server Role Properties (Свойства роли на сервере) (рис 34.21(рис 34.21) Окно Server Role Properties (Свойства роли на сервере)
  • Чтобы добавить к этой роли пользовательскую учетную запись, сначала щелкните на кнопке Add. Появится диалоговое окно Add Members (рис 34.22(рис 34.22) Диалоговое окно Add Members
  • Выбрав пользователей, которых хотите добавить к данной фиксированной роли, щелкните на кнопке OK. Произойдет возврат в окно Server Role Properties. Щелкните на кнопке OK, чтобы добавить пользователя к данной роли.
  • Делегирование учетной записи безопасности

    SQL Server 2000 использует средства безопасности Windows 2000 с помощью модели безопасности Kerberos. (Информацию о модели безопасности Kerberos см. в лекции 2.) SQL Server 2000 использует протокол Kerberos для поддержки взаимной аутентификации между клиентом и сервером. Это позволяет передавать "верительные данные" клиента между компьютерами, чтобы этот клиент мог подсоединяться к нескольким серверам; при доступе к новому серверу этот сервер может продолжать работу с помощью верительных данных клиента. Это совместное использование верительных данных называется делегированием учетной записи безопасности.

    Рассмотрим пример делегирования учетной записи безопасности. Предположим, что клиент подсоединяется к серверу ServerA как NTDOMAIN\AlexR, а ServerA подсоединяется к серверу ServerB. Тем самым ServerB "знает", что подсоединение осуществляется с помощью учетной записи системы безопасности NTDOMAIN\AlexR. Это позволяет клиенту обойтись без регистрации на сервере ServerB.

    Если вы хотите использовать делегирование учетной записи безопасности, то все серверы, к которым вы подсоединяетесь, должны работать под управлением Windows 2000 с активизированной поддержкой Kerberos, а вы должны использовать службы Active Directory. Для делегирования работы в службах Active Directory должны быть установлены следующие параметры.

  • Account is sensitive and cannot be delegated (Учетная запись является критически важной и не может быть делегирована). Этот параметр нельзя устанавливать, если пользователь запрашивает делегирование.
  • Account is trusted for delegation (Учетная запись является доверяемой для делегирования). Этот параметр должен быть установлен для служебной учетной записи SQL Server 2000.
  • Computer is trusted for delegation (Компьютер является доверяемым для делегирования).Этот параметр должен быть установлен для сервера, на котором выполняется один из экземпляров SQL Server 2000.
  • Конфигурирование SQL Server

    Прежде чем использовать делегирование учетных записей безопасности, вы должны сконфигурировать SQL Server, чтобы он допускал делегирование. Делегирование вызывает взаимную аутентификацию. Чтобы можно было использовать делегирование учетных записей безопасности, SQL Server 2000 должен иметь SPN-имя (Service Principal Name), назначенное администратором учетных записей домена Windows 2000. SPN-имя должно быть присвоено служебной учетной записи сервера SQL Server на данном компьютере. SPN-имя необходимо для проверки того, что SQL Server верифицирован на определенном сервере и по определенному адресу порта (socket) администратором учетных записей домена Windows 2000. Администратор вашего домена может задать SPN-имя для SQL Server с помощью утилиты Setspn, входящей в комплект Windows 2000 Resource Kit. Чтобы создать SPN-имя для SQL Server, запустите следующий оператор:

    setspn -A MSSQLSvc/Host:port serviceaccount

    Вот пример использования этого оператора:

    setspn -A MSSQLSvc/MyServer.MyDomain.MyCompany.com sqlaccount
    Дополнительная информация. Более подробную информацию по утилите Setspn см. в документации Windows 2000.

    Чтобы использовать делегирование учетных записей безопасности, вы должны также использовать TCP/IP. Вы не можете использовать именованные каналы (named pipes), поскольку SPN-имя указывает определенный порт (socket) TCP/IP. Если вы используете несколько портов, то должны иметь SPN для каждого порта.

    Вы можете активизировать делегирование с помощью учетной записи LocalSystem. SQL Server выполнит саморегистрацию при запуске службы и автоматически зарегистрирует SPN-имя. Этот вариант проще, чем активизация с помощью пользовательской учетной записи в домене. Однако при закрытии SQL Server SPN-имена будут лишены регистрации для учетной записи LocalSystem. Чтобы активизировать делегирование под учетной записью LocalSystem, выполните следующий оператор в утилите Setspn:

    setspn -A MSSQLSvc/Host:port serviceaccount
    Примечание. Изменяя служебную учетную запись в SQL Server 2000, вы должны удалить все определенные SPN-имена и создать новые.

    Заключение

    В этой лекции вы узнали об управлении пользователями и системой безопасности SQL Server. Вы узнали, как используются учетные записи подключения (login-записи) и учетные записи пользователей базы данных, чтобы осуществлять доступ к базе данных, как создавать login-записи и пользователей баз данных, а также управлять ими. Вы также узнали, как упростить управление пользователями с помощью ролей базы данных, полномочия которых можно присваивать группе пользователей и модифицировать их из одной точки. Вы также узнали о специальной группе ролей, которые называются фиксированными ролями на сервере и используются для предоставления административных полномочий пользователям и DBA. И, наконец, мы рассмотрели улучшенное средство безопасности, включенное в SQL Server 2000, которое позволяет передавать защищенным образом учетные записи безопасности между серверами в среде Windows 2000. В лекции 35 вы узнаете о хранимых процедурах SQL Server и оптимизации ваших запросов.

    Вернуться к учебному плану