Роли
166Работа с базами данных в .NET Framework --- SQL Server 2012 --- Роли
Исходники баз данныхКогда нескольким пользователям требуется выполнять подобные действия в определенной базе данных и при этом они не являются членами соответствующей группы Windows, то можно воспользоваться ролью базы данных, задающей группу пользователей базы данных, которые могут иметь доступ к одним и тем же объектам базы данных.
Членами роли базы данных могут быть любые из следующих:
группы и учетные записи Windows;
регистрационные имена входа в SQL Server;
другие роли.
Архитектура безопасности компонента Database Engine включает несколько "системных" ролей, которые имеют специальные явные разрешения. Кроме ролей, определяемых пользователями, существует два типа предопределенных ролей: фиксированные серверные роли и фиксированные роли базы данных.
Фиксированные серверные роли
Фиксированные серверные роли определяются на уровне сервера и поэтому находятся вне баз данных, принадлежащих серверу баз данных. В таблице ниже приводится список фиксированных серверных ролей и краткое описание действий, которые могут выполнять члены этих ролей:
Фиксированная серверная роль | Описание |
---|---|
sysadmin | Выполняет любые действия в системе баз данных |
serveradmin | Конфигурирует параметры сервера |
setupadmin | Устанавливает репликацию и управляет расширенными процедурами |
securityadmin | Управляет регистрационными именами и разрешениями для инструкции CREATE DATABASE и чтением журналов логов |
processadmin | Управляет системными процессами |
dbcreator | Создает и модифицирует базы данных |
diskadmin | Управляет файлами на диске |
Членов фиксированной серверной роли можно добавлять и удалять двумя способами:
используя среду Management Studio;
используя инструкции языка Transact-SQL.
Чтобы добавить регистрационное имя в члены фиксированной серверной роли посредством среды Management Studio, разверните в обозревателе объектов узел сервера, в нем папку "Security", а в ней разверните папку "Logins". Выберите имя пользователя, для которого нужно изменить роль, щелкните правой кнопкой мыши и выберите в контекстном меню Properties. В открывшемся окне Login Properties перейдите на вкладку Server Role, где можно задавать или удалять пользователя в фиксированной роли:

Для добавления и удаления членов в фиксированные серверные роли используются инструкции языка Transact-SQL CREATE SERVER ROLE и DROP SERVER ROLE соответственно. А для изменения членства в серверной роли используется инструкция ALTER SERVER ROLE.
Фиксированные серверные роли нельзя добавлять, удалять или переименовывать. Кроме этого, только члены фиксированных серверных ролей могут выполнять системные процедуры для добавления или удаления регистрационного имени в роли.
Регистрационное имя sa
Регистрационное имя sa является регистрационным именем системного администратора. В версиях более ранних, чем SQL Server 2005, в которых роли отсутствовали, регистрационное имя sa предоставляло все возможные разрешения для задач системного администрирования. В более новых версиях SQL Server регистрационное имя sa включено единственно с целью обратной совместимости. Это регистрационное имя всегда является членом фиксированной серверной роли sysadmin и его нельзя удалить из этой роли.
Регистрационное имя sa следует использовать только в тех случаях, когда нет другого способа войти в систему базы данных.
Фиксированные роли базы данных
Фиксированные роли базы данных определяются на уровне базы данных и поэтому существуют в каждой базе данных, принадлежащей серверу баз данных. В таблице ниже приводится список фиксированных ролей базы данных и краткое описание действий, которые могут выполнять члены этих ролей.
Фиксированная роль базы данных | Описание |
---|---|
db_owner | Пользователи, которые могут выполнять почти все действия в базе данных |
db_accessadmin | Пользователи, которые могут добавлять и удалять пользователей |
db_datareader | Пользователи, которые могут просматривать данные во всех таблицах пользователей базы данных |
db_datawriter | Пользователи, которые могут добавлять, изменять или удалять данные во всех пользовательских таблицах базы данных |
db_ddladmin | Пользователи, которые могут выполнять инструкции DDL в базе данных |
db_securityadmin | Пользователи, которые могут управлять всеми действиями в базе данных, связанными разрешениями безопасности |
db_backupoperator | Пользователи, которые могут выполнять резервное копирование базы данных |
db_denydatareader | Пользователи, которые не могут просматривать любые данные в базе данных |
db_denydatawriter | Пользователи, которые не могут изменять никакие данные в базе данных |
Члены фиксированных ролей баз данных могут выполнять разные действия. Подробную информацию о действиях, которые могут выполнять члены каждой фиксированной роли базы данных смотрите в электронной документации.
Фиксированная роль базы данных public
Кроме перечисленных в таблице фиксированных ролей базы данных, существует специальная фиксированная роль базы данных public. Фиксированная роль базы данных public является специальной ролью, членом которой являются все законные пользователи базы данных. Она охватывает все разрешения по умолчанию для пользователей базы данных. Это позволяет предоставить всем пользователям, которые не имеют должных разрешений, набор разрешений (обычно ограниченный). Роль public предоставляет все разрешения по умолчанию для пользователей базы данных и не может быть удалена. Пользователям, группам или ролям нельзя присвоить членство в этой роли, поскольку они имеют его по умолчанию.
По умолчанию роль public разрешает пользователям выполнять следующие действия:
просматривать системные таблицы и отображать информацию из системной базы данных master, используя определенные системные процедуры;
выполнять инструкции, для которых не требуются разрешения, например, PRINT.
Присвоения пользователю членства в фиксированной роли базы данных
Чтобы присвоить пользователю базы данных членство в фиксированной роли базы данных с помощью среды Management Studio, разверните сервер и папку "Databases", а в ней базу данных, затем разверните папку "Security", "Roles" и папку "Databases Roles". Щелкните правой кнопкой мыши роль, в которую требуется добавить пользователя, и в контекстном меню выберите пункт Properties. В диалоговом окне свойств роли базы данных нажмите кнопку Add и выберите пользователей, которым нужно присвоить членство в этой роли. Теперь этот пользователь является членом данной роли базы данных и наследует все параметры доступа, предоставленные этой роли.
Роли приложений
Роли приложения позволяют принудительно обеспечивать безопасность для определенного приложения. Иными словами, роли приложения позволяют приложению взять на себя ответственность за аутентификацию пользователя, вместо того, чтобы это делала система баз данных. Например, если служащие компании могут изменять данные о сотрудниках только посредством какого-либо приложения (а не посредством инструкций языка Transact-SQL или какого-либо другого средства), для этого приложения можно создать роль приложения.
Роли приложений существенно отличаются от всех других типов ролей. Во-первых, роли приложений не имеют членов, поскольку они используют только приложения, и поэтому им нет необходимости предоставлять разрешения непосредственно пользователям. Во-вторых, для активации роли приложения требуется пароль.
Когда приложение активирует для сеанса роль приложения, этот сеанс утрачивает все разрешения, применимые к именам ввода, учетным записям пользователей, группам пользователей или ролям во всех базах данных. Так как эти роли применимы только к базе данных, в которой они находятся, сеанс может получить доступ к другой базе данных только посредством разрешений, предоставленных пользователю guest базы данных, к которой требуется доступ. Поэтому, если база данных не имеет пользователя guest, сеанс не может получить доступ к этой базе данных.
В следующих двух подразделах описывается управление ролями приложений.
Управление ролями приложений посредством среды Management Studio
Чтобы создать роль приложения с помощью среды Management Studio, разверните узел сервера, папку "Databases", требуемую базу данных, папку "Security". Щелкните правой кнопкой папку "Roles", в появившемся контекстном меню выберите пункт New, а во вложенном меню выберите пункт New Application Role. В открывшемся диалоговом окне Application Role - New введите в соответствующие поля имя новой роли приложения, пароль и, необязательно, схему по умолчанию. Нажмите кнопку OK, чтобы сохранить роль.
Управление ролями приложений посредством инструкций Transact-SQL
Для создания, изменения и удаления ролей приложений применяются инструкции языка Transact-SQL CREATE APPLICATION ROLE, ALTER APPLICATION ROLE и DROP APPLICATION ROLE соответственно.
Инструкция CREATE APPLICATION ROLE, создающая роль приложения для текущей базы данных, имеет два параметра. В первом параметре указывается пароль роли, а во втором - схема по умолчанию, т.е. первая схема, к которой будет обращаться сервер для разрешения имен объектов для этой роли.
В примере ниже показано создание роли приложения WeeklyReports в базе данных SampleDb:
USE SampleDb;
CREATE APPLICATION ROLE WeeklyReports
WITH PASSWORD = '12345!',
DEFAULT_SCHEMA = poco;
Инструкция ALTER APPLICATION ROLE применяется для изменения имени, пароля или схемы по умолчанию существующей роли приложения. Синтаксис этой инструкции очень сходен с синтаксисом инструкции CREATE APPLICATION ROLE. Для выполнения инструкции ALTER APPLICATION ROLE для этой роли необходимо иметь разрешение ALTER.
Для удаления роли приложения используется инструкция DROP APPLICATION ROLE. Роль приложения нельзя удалить, если она владеет какими-либо объектами (защищаемыми объектами).
Активация ролей приложений
При установлении соединения необходимо выполнить системную процедуру sp_setupprole, чтобы активировать разрешения, связанные с ролью приложения. Эта процедура имеет следующий синтаксис:
sp_setapprole [@rolename =] 'role' ,
[@password =] 'password'
[,[@encrypt =] 'encrypt_style']
Соглашения по синтаксису
В параметре role указывается имя роли приложения, определенного в текущей базе данных, в параметре password - пароль для этой роли, а в параметре encrypt_style - метод шифрования, указанный для пароля.
При активации роли приложения с помощью системной процедуры sp_setupprole необходимо иметь в виду следующее:
активированную роль приложения нельзя деактивировать в текущей базе данных, пока сеанс не отсоединится от системы;
роль приложения всегда привязана к базе данных, т.е. ее область видимости ограничивается текущей базой данных. Если в течение сеанса изменить текущую базу данных, то в ней можно будет выполнять действия, зависящие от разрешений в этой базе данных.
Конструкция ролей приложений в SQL Server 2012 не является оптимальной вследствие своей неоднородности. В частности, роли приложения создаются посредством инструкций языка Transact-SQL, после чего они активируются с помощью системной процедуры.
Определяемые пользователем роли сервера
Определяемые пользователем роли сервера впервые стали применяться в SQL Server 2012. Для создания и удаления этих ролей используются инструкции языка Transact-SQL CREATE SERVER ROLE и DROP SERVER ROLE соответственно. Для добавления или удаления членов роли сервера используется инструкция ALTER SERVER ROLE. Использование инструкций CREATE SERVER ROLE и ALTER SERVER ROLE показано в примере ниже:
USE SampleDb;
GO
CREATE SERVER ROLE program_admin;
ALTER SERVER ROLE program_admin ADD MEMBER Vasya;
Определяемые пользователем роли баз данных
Обычно определяемые пользователем роли базы данных применяются, когда группе пользователей базы данных требуется выполнять общий набор действий в базе данных и отсутствует применимая группа пользователей Windows. Для создания, изменения и удаления этих ролей применяется или среда Management Studio, или инструкции языка Transact-SQL CREATE ROLE, ALTER ROLE и DROP ROLE. Управление определяемыми пользователем ролями базы данных рассматривается в следующих двух подразделах.
Управление определяемыми пользователем ролями базы данных с помощью среды Management Studio
Чтобы создать определяемую пользователем роль базы данных с помощью среды Management Studio, разверните узел сервера, папку "Databases", требуемую базу данных, папку "Security". Щелкните правой кнопкой папку "Roles", в появившемся контекстном меню выберите пункт New, а во вложенном меню выберите пункт New Database Role. В открывшемся диалоговом окне Database Role - New введите в соответствующее поле имя новой роли:

Нажмите кнопку Add, чтобы добавить членов в новую роль. Выберите требуемых членов (пользователей и/или другие роли) новой роли базы данных и нажмите кнопку OK.
Управление определяемыми пользователем ролями базы данных с помощью инструкций Transact-SQL
Для создания новой определяемой пользователем роли базы данных в текущей базе данных применяется инструкция CREATE ROLE. Синтаксис этой инструкции выглядит таким образом:
CREATE ROLE role_name [AUTHORIZATION owner_name]
В параметре role_name инструкции указывается имя создаваемой определяемой пользователем роли, а в параметре owner_name - пользователь базы данных или роль, которая будет владельцем новой роли. (Если пользователь не указан, владельцем роли будет пользователь, исполняющий инструкцию CREATE ROLE.)
Для изменения имени определяемой пользователем роли базы данных применяется инструкция ALTER ROLE, а для удаления роли из базы данных - инструкция DROP ROLE. Роль, которая является владельцем защищаемых объектов (т.е. объектов базы данных), удалить нельзя. Чтобы удалить такую роль, сначала нужно изменить владельца этих объектов.
В примере ниже показано создание определяемой пользователем роли базы данных и добавление в нее членов:
USE SampleDb;
CREATE ROLE marketing AUTHORIZATION Vasya;
GO
ALTER ROLE marketing ADD MEMBER 'Vasya';
ALTER ROLE marketing ADD MEMBER 'ProfessorWeb\Alexandr';
В этом примере сначала создается определяемая пользователем роль базы данных marketing, а затем, предложением ADD MEMBER инструкции ALTER ROLE, в нее добавляются два члена - Vasya и ProfessorWeb\Alexandr.