Роли

166 Исходники баз данных

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

Членами роли базы данных могут быть любые из следующих:

Архитектура безопасности компонента Database Engine включает несколько "системных" ролей, которые имеют специальные явные разрешения. Кроме ролей, определяемых пользователями, существует два типа предопределенных ролей: фиксированные серверные роли и фиксированные роли базы данных.

Фиксированные серверные роли

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

Фиксированные серверные роли
Фиксированная серверная роль Описание
sysadmin

Выполняет любые действия в системе баз данных

serveradmin

Конфигурирует параметры сервера

setupadmin

Устанавливает репликацию и управляет расширенными процедурами

securityadmin

Управляет регистрационными именами и разрешениями для инструкции CREATE DATABASE и чтением журналов логов

processadmin

Управляет системными процессами

dbcreator

Создает и модифицирует базы данных

diskadmin

Управляет файлами на диске

Членов фиксированной серверной роли можно добавлять и удалять двумя способами:

Чтобы добавить регистрационное имя в члены фиксированной серверной роли посредством среды 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 разрешает пользователям выполнять следующие действия:

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

Чтобы присвоить пользователю базы данных членство в фиксированной роли базы данных с помощью среды 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.

Пройди тесты
Лучший чат для C# программистов