Другим фундаментом системы безопасности сервера являются роли. Под ролью понимаются определенные права на выполнение операторов и работу с объектами базы данных. Роли объединяют нескольких пользователей в группу, наделенную определенными правами, причем одному пользователю может быть назначено несколько ролей.
Существует 8 постоянных ролей сервера, которые предоставляют административные привилегии на уровне сервера, вне зависимости от базы данных:
· sysadmin – может выполнять любые действия на MS SQL Server. По умолчанию сюда входит учетная запись sa и все члены группы администраторов Windows;
· setupadmin – управляет связанными серверами (linked servers) и процедурами, которые выполняются вместе с запуском сервера;
· securityadmin – может создавать и управлять логинами, читать журнал ошибок и создавать БД;
· processadmin – обладает правами управления процессами внутри MS SQL Server, например, член этой роли может завершать задачи, которые выполняются слишком долго;
· dbcreator – разрешено создание и изменение баз данных;
· diskadmin – управляет файлами баз данных: назначает файлы в группы, присоединяет/отсоединяет базы данных и т.д.;
· bulkadmin – позволяет выполнять команду BULK INSERT для вставки сразу большого количества записей в таблицу;
Для просмотра информации о встроенных ролях используются хранимые процедуры:
· sp_helpsrvrole– возвращает список ролей сервера и описание каждой роли;
· sp_helpsrvrolemember [‘имя роли’] – возвращает список ролей и учетных записей, которым присвоены эти роли;
· sp_srvrolepermission [‘имя роли’] – возвращает список разрешений, присвоенных этим ролям.
Замечание. Если указан необязательный параметр [‘имя роли’], то выводится информация, относящаяся только к указанной роли.
На рис. 6.1. показан пример вызова хранимой процедуры.
Рис. 6.1. Пример вызова хранимой процедуры
1. Для добавления учетных записей пользователей для входа в MS SQL Server используется хранимая процедура sp_addlogin:
sp_addlogin [@loginame=] ‘учетная запись пользователя для входа’
[, [@passwd=] ‘пароль пользователя’]
[, [@defdb=] ‘база данных’]
sp_addlogin [ @loginame = ] 'login'
[ , [ @passwd = ] 'password' ]
[ , [ @defdb = ] 'database' ]
[ , [ @deflanguage = ] 'language' ]
[ , [ @sid = ] sid ]
[ , [ @encryptopt= ] 'encryption_option' ]
@defdb – база данных, к которой будет подключать MS SQL Server этого пользователя по умолчанию. Если этот параметр не определен, то будет использоваться системная база данных master.
@deflanguage – язык по умолчанию; если параметр не указан, то будет использоваться язык по умолчанию, заданный для сервера.
@sid – идентификационный номер (security identification number); если параметр не задан, то sid будет сгенерирован.
@encryptopt – указывает, нужно ли производить хэширование пароля, или вместо пароля уже используется хэш.
Эта хранимая процедура широко используется на сегодняшний день. Однако в последующих версиях MS SQL Server она будет удалена. Вместо неё рекомендуется использовать следующую конструкцию:
CREATE LOGIN loginName { WITH <option_list1> | FROM <sources> }
Параметры WITH позволяет задать пароль и настройки безопасности, а раздел FROM указывает, что логин не просто принадлежит MS SQL Server, а ассоциируется либо с учетной записью Windows, либо с сертификатом, либо с ключом.
MS SQL Server накладывает ряд ограничений на имена пользователей, роли и пароли:
· имена пользователей, роли и пароли должны иметь размер от 1 до 128 символов и не содержать обратных слешей (\);
· имена пользователей не должны совпадать с ключевыми словами и встроенными именами пользователей;
· пароль может не содержать никаких символов, но в случае если активированы политики паролей, то он должен удовлетворять их требованиям.
2. Для просмотра информации по именам пользователей, использующимся для входа, используется хранимая процедура sp_helplogins. Пример выполнения этой процедуры показан на рис. 6.2.
Рис. 6.2. Получение списка пользователей MS SQL Server
3. Изменение пароля учетной записи пользователя для входа выполняется с помощью процедуры sp_password.
Замечание. Для получения справки по командам Transact-SQL и хранимым процедурам можно воспользоваться утилитой Management Studio. Для этого необходимо выделить имя оператора и нажать клавишу F1.
Эта хранимая процедура широко используется на сегодняшний день. Однако в последующих версиях MS SQL Server она будет удалена. Вместо неё рекомендуется использовать конструкцию ALTER LOGIN.
4. Удаление учетной записи осуществляет хранимая процедура:
sp_droplogin ‘учетная запись пользователя для входа’.
Эта хранимая процедура широко используется на сегодняшний день. Однако в последующих версиях MS SQL Server она будет удалена. Вместо неё рекомендуется использовать следующую конструкцию:
DROP LOGIN ‘учетная запись пользователя для входа’
5. Для присвоения учетной записи для входа встроенной серверной роли используется процедура:
sp_addsrvrolemember [@loginame=] ‘учетная запись пользователя для входа’ , [@rolename=] ‘роль’