Роли уровня базы данных
Область применения:SQL Server (все поддерживаемые версии)
База данных SQL Azure
Управляемый экземпляр SQL Azure
Azure Synapse Analytics
Analytics 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 не могут считывать никакие данные из пользовательских таблиц или представлений в базе. |
Нельзя изменить разрешения, назначенные предопределенным ролям базы данных. На следующем рисунке показаны разрешения, назначенные предопределенным ролям базы данных:
Специальные роли для База данных 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