Роли уровня базы данных

Область применения:yesSQL Server (все поддерживаемые версии) YesБаза данных SQL Azure YesУправляемый экземпляр SQL Azure yesAzure Synapse Analytics yesAnalytics Platform System (PDW)

Для удобства управления разрешениями в базах данных SQL Server предоставляет несколько *ролей, которые являются субъектами безопасности, группирующими других участников. Они похожи на группы в операционной системе Microsoft Windows. Разрешения ролей уровня базы данных распространяются на всю базу данных.

Чтобы добавлять и удалять пользователей в роли базы данных, используйте параметры ADD MEMBER и DROP MEMBER инструкции ALTER ROLE . Система платформы аналитики (PDW) и Azure Synapse не поддерживают такое использование ALTER ROLE. Используйте вместо этого более старые процедуры sp_addrolemember и sp_droprolemember .

Существует два типа ролей уровня базы данных: предопределенные роли базы данных , являющиеся стандартными для базы данных, и пользовательские роли базы данных , которые можно создавать.

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

В роли уровня базы данных можно добавить любую учетную запись базы данных и другие роли SQL Server .

Совет

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

Разрешения определенных пользователями ролей базы данных можно настроить с помощью инструкций GRANT, DENY и REVOKE. Дополнительные сведения см. в разделе Разрешения (компонент Database Engine).

Список всех разрешений см. в афише с разрешениями для ядра СУБД . Разрешения уровня сервера невозможно предоставить ролям базы данных. Имена входа и другие субъекты уровня сервера (например, роли сервера) нельзя добавлять в роли базы данных. Для обеспечения безопасности на уровне сервера в SQL Serverиспользуйте вместо этого роли сервера . Разрешения уровня сервера невозможно предоставить посредством ролей в База данных SQL и Azure Synapse.

Фиксированные роли базы данных

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

Имя предопределенной роли базы данных Описание
db_owner Члены предопределенной роли базы данных db_owner могут выполнять все действия по настройке и обслуживанию базы данных, а также удалять (drop) базу данных в SQL Server. (В База данных SQL и Azure Synapse некоторые операции по обслуживанию требуют наличия разрешений на уровне сервера и не могут быть выполнены членами db_owner.)
db_securityadmin Элементы предопределенной роли базы данных db_securityadmin могут изменять членство в роли (только для настраиваемых ролей) и управлять разрешениями. Элементы этой роли потенциально могут повышать свои права доступа, поэтому необходимо отслеживать их действия.
db_accessadmin Члены предопределенной роли базы данных db_accessadmin могут добавлять или удалять права удаленного доступа к базе данных для имен входа и групп Windows, а также имен входа SQL Server .
db_backupoperator Члены предопределенной роли базы данных db_backupoperator могут создавать резервные копии базы данных.
db_ddladmin Члены предопределенной роли базы данных db_ddladmin могут выполнять любые команды языка определения данных (DDL) в базе данных.
db_datawriter Члены предопределенной роли базы данных db_datawriter могут добавлять, удалять или изменять данные во всех пользовательских таблицах.
db_datareader Члены предопределенной роли базы данных db_datareader могут считывать все данные из всех пользовательских таблиц и представлений. Пользовательские объекты могут существовать в любой схеме, кроме sys и INFORMATION_SCHEMA.
db_denydatawriter Члены предопределенной роли базы данных db_denydatawriter не могут добавлять, изменять или удалять данные в пользовательских таблицах базы данных.
db_denydatareader Члены предопределенной роли базы данных db_denydatareader не могут считывать никакие данные из пользовательских таблиц или представлений в базе.

Нельзя изменить разрешения, назначенные предопределенным ролям базы данных. На следующем рисунке показаны разрешения, назначенные предопределенным ролям базы данных:

fixed_database_role_permissions

Специальные роли для База данных SQL и Azure Synapse

Эти роли базы данных существуют только в виртуальной базе данных master. Их разрешения ограничены действиями, выполняемыми в базе данных master. В эти роли можно добавить только пользователей из базы данных master. Для этих ролей нельзя добавить имена входа, однако можно создать пользователей на основе имен входа, а затем добавить этих пользователей в роли. Кроме того, в эти роли можно добавить пользователей автономной базы данных из базы данных master. При этом пользователи автономной базы данных, добавленные в роль dbmanager в базе данных master, не могут использоваться для создания новых баз данных.

Имя роли Описание
dbmanager Может создавать и удалять базы данных. Член роли dbmanager, который создает базу данных, становится ее владельцем, что позволяет такому члену подключиться к этой базе данных в качестве пользователя dbo. Пользователь dbo имеет все разрешения в этой базе данных. Члены роли dbmanager необязательно имеют разрешения на доступ к базам данных, которые им не принадлежат.
db_exporter Применяется только к выделенным пулам SQL Azure Synapse Analytics (ранее SQL DW).
Члены предопределенной роли базы данных db_exporter могут выполнять все действия для экспорта данных. Разрешения, предоставляемые для этой роли: CREATE TABLE, ALTER ANY SCHEMA, ALTER ANY EXTERNAL DATA SOURCE, ALTER ANY EXTERNAL FILE FORMAT.
loginmanager Может создать и удалять имена входа в виртуальной базе данных master.

Примечание

Субъект на уровне сервера и администратор Azure Active Directory (если настроено) имеют все разрешения в База данных SQL и Azure Synapse без необходимости участия в каких-либо ролях. См. дополнительные сведения об аутентификации и авторизация базы данных SQL, включая предоставление доступа.

Некоторые роли баз данных не применимы к Azure SQL или Azure Synapse:

  • db_backupoperator неприменима для баз данных SQL Azure (не управляемых экземпляров) и бессерверных пулов Azure Synapse из-за недоступности команд резервного копирования и восстановления T-SQL.
  • db_datawriter и db_denydatawriter не применимы к бессерверному Azure Synapse, так как он просто считывает внешние данные.

Роли базы данных msdb

База данных msdb содержит специальные роли, показанные в следующей таблице.

Имя роли базы данных msdb Описание
db_ssisadmin

db_ssisoperator

db_ssisltduser
Члены этих ролей базы данных могут администрировать и использовать службы Integration Services. Экземпляры SQL Server, обновленные с предыдущей версии, могут содержать более старую версию роли, имя которой присвоено с помощью служб DTS, а не служб Integration Services. Дополнительные сведения см. в разделе "Роли служб Integration Services (служба SSIS)".
dc_admin

dc_operator

dc_proxy
Члены этих ролей базы данных могут администрировать и использовать сборщик данных. Дополнительные сведения см. в разделе Data Collection.
PolicyAdministratorRole Члены роли базы данных db_ PolicyAdministratorRole могут выполнять все действия по настройке и обслуживанию политик и условий средства "Управление на основе политики". Дополнительные сведения см. в разделах Администрирование серверов с помощью управления на основе политик.
ServerGroupAdministratorRole

ServerGroupReaderRole
Члены этих ролей базы данных могут администрировать и использовать зарегистрированные группы серверов.
dbm_monitor Создается в базе данных msdb при регистрации в мониторе зеркального отображения базы данных первой базы данных. Роль dbm_monitor не имеет членов до тех пор, пока системный администратор не назначит ее пользователям.

Важно!

Члены роли db_ssisadmin и роли dc_admin могут повышать свои права доступа до sysadmin. Такое повышение права доступа может произойти, так как эти роли могут изменять пакеты служб Службы Integration Services , а пакеты Службы Integration Services могут выполняться SQL Server при помощи контекста безопасности sysadmin агента SQL Server . Чтобы предотвратить такое повышение прав доступа при выполнении планов обслуживания, наборов элементов сбора данных и других пакетов служб Службы Integration Services , настройте задания агента SQL Server , запускающие пакеты, на использование учетной записи-посредника с ограниченными правами доступа или добавьте в роли db_ssisadmin и dc_admin только членов роли sysadmin .

Работа с ролями уровня базы данных

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

Компонент Тип Описание
sp_helpdbfixedrole (Transact-SQL) Метаданные Возвращает список всех предопределенных ролей базы данных.
sp_dbfixedrolepermission (Transact-SQL) Метаданные Отображает разрешения предопределенной роли базы данных.
sp_helprole (Transact-SQL) Метаданные Возвращает информацию о ролях, относящихся к текущей базе данных.
sp_helprolemember (Transact-SQL) Метаданные Возвращает сведения о членах роли в текущей базе данных.
sys.database_role_members (Transact-SQL) Метаданные Возвращает одну строку для каждого члена каждой роли базы данных.
IS_MEMBER (Transact-SQL) Метаданные Указывает, является ли текущий пользователь членом указанной группы Microsoft Windows или роли базы данных Microsoft SQL Server.
CREATE ROLE (Transact-SQL) Get-Help Создает новую роль базы данных в текущей базе данных.
ALTER ROLE (Transact-SQL) Get-Help Изменяет имя или членство роли базы данных.
DROP ROLE (Transact-SQL) Get-Help Удаляет роль из базы данных.
sp_addrole (Transact-SQL) Get-Help Создает новую роль базы данных в текущей базе данных.
sp_droprole (Transact-SQL) Get-Help Удаляет роль базы данных из текущей базы данных.
Хранимая процедура Хранимая процедура sp_addrolemember (Transact-SQL) Get-Help Добавляет пользователя базы данных, роль базы данных, имя входа Windows или группу Windows к роли текущей базы данных. Все платформы, за исключением Система платформы аналитики (PDW) и Azure Synapse, должны использовать вместо этого ALTER ROLE.
sp_droprolemember (Transact-SQL) Get-Help Удаляет учетную запись безопасности из роли SQL Server в текущей базе данных. Все платформы, за исключением Система платформы аналитики (PDW) и Azure Synapse, должны использовать вместо этого ALTER ROLE.
GRANT Разрешения Добавляет разрешение для роли.
DENY Разрешения Запрещает разрешение для роли.
REVOKE Разрешения Удаляет разрешения, выданные или запрещенные ранее.

Роль базы данных public

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

Примеры

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

A. Добавление пользователя к роли уровня базы данных

В следующем примере пользователь Бен добавляется к фиксированной роли уровня базы данных db_datareader.

ALTER ROLE db_datareader
	ADD MEMBER Ben;  
GO

Б. Вывод всех субъектов базы данных, которые являются членами роли уровня базы данных

Следующая инструкция возвращает все члены любой роли базы данных.

SELECT    roles.principal_id                            AS RolePrincipalID
    ,    roles.name                                    AS RolePrincipalName
    ,    database_role_members.member_principal_id    AS MemberPrincipalID
    ,    members.name                                AS MemberPrincipalName
FROM sys.database_role_members AS database_role_members  
JOIN sys.database_principals AS roles  
    ON database_role_members.role_principal_id = roles.principal_id  
JOIN sys.database_principals AS members  
    ON database_role_members.member_principal_id = members.principal_id;  
GO