На уровне сервера служба безопасности оперирует понятием «учетная запись» (login). При подключении к SQL Server требуется ввести login и пароль. Login внутри SQL Server-а может совпадать с login-ом операционной системы (называется такая процедура подключения – аутентификация Windows. Так сейчас сделано в а-303).
Каждой учетной записи можно предоставить права на манипуляции со всеми (!) базами сервера. Эти права называются ролями сервера(server role).
Имеется 9 стандартных ролей сервера (fixed server role):
Serveradmin – конфигурирование и выключение сервера.
Setupadmin – управление связанными серверами и процедурами, автоматически запускаемыми при старте SQL Server.
Securityadmin – регистрация и удаление учетных записей, выдача пользователям прав на доступ к базам данных.
Processadmin – управление процессами, запущенными в SQL Server.
Dbcreator – может создавать и изменять базы данных.
Diskadmin – управляет файлами SQL Server.
Bulkadmin – управление массивным копированием (при архивировании и восстановлении баз из резервных копий).
Новые учетные записи можно создавать с помощью Enterprise Manager, а можно с помощью команд SQL. Для создания новой учетной записи вызывается системная хранимая процедура:
sp_addlogin @loginame = ‘новый_login’
[,@passwd = ‘пароль’] //если нужен пароль
[,@defdb = ‘имя_базы_данных_по_умолчанию’] // по умолчанию системная база ‘master’
[,@deflanguage = ‘язык_по_умолчанию’]
[,@sid = ‘SID’]
[,@encryptopt = ‘опция_шифрования_пароля’]
SID (Security ID) – двоичное число, которое является идентификатором безопасности учетной записи.
"Опция_шифрования_пароля" может принимать одно из значений:
NULL – пароль данной учетной записи будет шифроваться (по умолчанию);
Skip_encryption – пароль не будет шифроваться;
Skip_encryption_old – используется старый способ шифрования поролей, принтый в старых версиях SQL Server (используется для совместимости).
Для создания учетных записей SQL Server, совпадающих с login-ами отдельных пользователей Windows NT или группы пользователей используется хранимая процедура:
sp_grantlogin @loginname = ‘Login_в_WinNT’
Login_в_WinNT включает полное имя пользователя с указанием домена. Например, в домене VT определена учетная запись student303. Регистрация производится командой:
EXEC sp_grantlogin ‘VT\student303’
Создание учетных записей через Enterprise Manager: выделить значок logins в папке security нужного сервера ® в правой части панели откроется список учетных записей.
Внутри базы данных система безопасности оперирует понятием пользователь (user). Пользователям выдаются различные права (изменение, добавление, удаление) на объекты той базы данных, в которой они зарегистрированы.
Одна учетная запись (login) ассоциируется в каждой базе данных, к которой она имеет доступ, с одним пользователем (user). При этом один user может использоваться для предоставления доступа нескольким людям, подключенным к серверу под разными login-ами.
Например, учетная запись, имеющая доступ к базам данных A, B, C, может проходить в базе A под именем пользователя ‘vasya’, в базе B под именем ‘grant’, а в базе C еще под каким-то именем.
Для связывания учетной записи (login) с определенным именем пользователя (user) может использоваться хранимая процедура:
sp_adduser @loginname = ‘login’ // имя учетной записи
[,@name_in_db = ‘user’] // имя пользователя базы данных
[,@grpname = ‘role’] // имя роли
Если используется учетная запись Windows NT, то ее отображение в имя пользователя производится с помощью хранимой процедуры:
sp_grantdbaccess @loginame = ‘login’ // Login в Windows NT
[,@name_in_db = ‘user’] // имя пользователя базы данных
Если необязательный параметр name_in_db не указывать, создается user с именем, совпадающим с login.
Внутри базы данных права доступа к объектам этой базы распределяются на уровне пользователей. Например, один пользователь имеет право добавлять и удалять строки таблицы A, таблицу B только читать, а в таблице С изменять существующие строки.
Администратор БД имеет полный доступ ко всем объектам базы.
Пользователь, который создал объект, считается владельцем объектаи имеет на этот объект все права (изменение, добавление, удаление). Владелец объекта может назначать другим пользователям права доступа на свой объект.
При создании базы данных определяются два стандартных пользователя: dbo и guest (public).
guest (public) – имеет минимальные права доступа. Любой новый пользователь автоматически получает уровень прав guest.
dbo – (Database owner – владелец базы данных) – пользователь с максимальными правами на базу.
Если несколько пользователей имеют одинаковые права доступа к объектам БД, этих пользователей удобно объединить в группу и давать права доступа общие для всех членов группы. Такие группы пользователей в SQL Server называются ролями базы данных(database role). Можно назначить права доступа к объектам базы данных для конкретной роли и работать с ней как с обычным пользователем. Например, если сотрудник переходит в другой отдел, достаточно удалить его из одной роли и добавить в другую, а не устанавливать новые права для каждого пользователя.
Роли базы данных бывают фиксированными, или стандартными (fixed database role), и роли пользователя (их ‘вручную’ определяет администратор БД).
Фиксированные роли базы данных:
db_owner – владелец всех объектов базы, имеет максимальные права.
db_accessadmin – может добавлять и удалять пользователей.
db_securityadmin – управлять всеми разрешениями, объектами, ролями и членами ролей.
db_ddladmin – может выполнять любые команды DDL, кроме GRANT, DENY и REVOKE.
db_backupoperator – может выполнять команды DBCC, CHEKPOINT и BACKUP.
db_datareader – может просматривать любые данные в любой таблице БД.
db_datawriter – может модифицировать любые данные в любой таблице БД.
db_denydatareader – запрещается просмотр данных в любой таблице БД.
db_denydatawriter – запрещается модифицирование данных в любой таблице БД.
Public – роль с минимальными правами, которая присваивается каждому пользователю.
В роль базы данных можно добавить пользователей, другие роли SQL Server, отдельных пользователей и группы пользователей Windows NT (которым предварительно разрешен доступ к соответствующей базе данных login-ом). Это делает системная хранимая процедура
sp_addrolemember @rolemember = ‘имя роли в текущей БД’
@membername = ‘имя объекта’ // login-ы WinNT, user-ы и имена ролей
Другие хранимые процедуры:
sp_addrole – создать роль;
sp_droprole – удалить роль;
sp_droprolemember – удалить пользователя из роли;
sp_dropuser – удалить пользователя из базы данных.
Когда пользователи подключаются к SQL Server, действия, которые они могут выполнять, определяются правами (или разрешениями – permissions), выданными их учетной записи, роли или user-у.