Поделиться через


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

Применимо к:SQL ServerБаза данных SQL AzureУправляемый экземпляр SQL AzureAzure Synapse AnalyticsСистема платформы аналитики (PDW)База данных SQL в предварительной версии Microsoft Fabric

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

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

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

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

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

Tip

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

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

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

Предопределенные роли базы данных

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

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

Разрешения, назначенные фиксированным ролям базы данных, не могут быть изменены. Все роли (включая роль public) имеют разрешения CONNECT. На следующем рисунке показаны разрешения, назначенные фиксированным ролям базы данных:

Имя роли Permissions
db_owner CONTROL DATABASE: имеет все разрешения в базе данных.
db_securityadmin ИЗМЕНИТЬ ЛЮБУЮ РОЛЬ ПРИЛОЖЕНИЯ
СОЗДАТЬ СХЕМУ
ИЗМЕНИТЬ ЛЮБУЮ РОЛЬ
ПРЕДСТАВЛЕНИЕ ОПРЕДЕЛЕНИЯ
db_accessadmin ИЗМЕНИТЬ ПОЛЬЗОВАТЕЛЯ
СОЗДАТЬ СХЕМУ
СОЗДАНИЕ ПОЛЬЗОВАТЕЛЯ
db_backupoperator РЕЗЕРВНОЕ КОПИРОВАНИЕ БАЗЫ ДАННЫХ
ЖУРНАЛ РЕЗЕРВНОГО КОПИРОВАНИЯ
CHECKPOINT
db_ddladmin ИЗМЕНЯТЬ ЛЮБУЮ СБОРКУ
Изменить любой асимметричный ключ
ИЗМЕНИТЬ ЛЮБОЙ СЕРТИФИКАТ
ИЗМЕНЯТЬ ЛЮБОЙ КОНТРАКТ
ИЗМЕНИТЬ ЛЮБОЙ ТРИГГЕР DDL БАЗЫ ДАННЫХ
Изменение любых уведомлений о событиях базы данных (ALTER ANY DATABASE EVENT NOTIFICATION)
ИЗМЕНИТЬ ЛЮБОЕ ПРОСТРАНСТВО ДАННЫХ
ИЗМЕНЕНИЕ ЛЮБОЙ ВНЕШНЕЙ БИБЛИОТЕКИ
ИЗМЕНИТЬ ЛЮБОЙ ПОЛНОТЕКСТОВЫЙ КАТАЛОГ
ИЗМЕНЯТЬ ЛЮБОЙ ТИП СООБЩЕНИЯ
ИЗМЕНИТЬ ЛЮБУЮ УДАЛЕННУЮ СВЯЗЬ СЕРВИСА
ИЗМЕНИТЬ ЛЮБОЙ МАРШРУТ
ИЗМЕНИТЬ ЛЮБУЮ СХЕМУ
ИЗМЕНЕНИЕ ЛЮБОЙ СЛУЖБЫ
ИЗМЕНИТЬ ЛЮБОЙ СИММЕТРИЧНЫЙ КЛЮЧ
CHECKPOINT
СОЗДАТЬ АГГРЕГАТ
СОЗДАНИЕ СБОРКИ
СОЗДАНИЕ АСИММЕТРИЧНОГО КЛЮЧА
СОЗДАТЬ СЕРТИФИКАТ
Создать договор
СОЗДАНИЕ УВЕДОМЛЕНИЯ О СОБЫТИЯХ БАЗЫ ДАННЫХ DDL
СОЗДАТЬ ПО УМОЛЧАНИЮ
СОЗДАНИЕ ВНЕШНЕЙ БИБЛИОТЕКИ
СОЗДАНИЕ КАТАЛОГА FULLTEXT
СОЗДАТЬ ФУНКЦИЮ
СОЗДАТЬ ТИП СООБЩЕНИЯ
СОЗДАТЬ ПРОЦЕДУРУ
СОЗДАНИЕ ОЧЕРЕДИ
СОЗДАНИЕ ПРИВЯЗКИ К УДАЛЕННОЙ СЛУЖБЕ
СОЗДАТЬ МАРШРУТ
СОЗДАНИЕ ПРАВИЛА
СОЗДАТЬ СХЕМУ
Создать сервис
СОЗДАНИЕ СИММЕТРИЧНОГО КЛЮЧА
СОЗДАТЬ СИНОНИМ
CREATE TABLE
CREATE TYPE
СОЗДАТЬ ПРЕДСТАВЛЕНИЕ
СОЗДАТЬ КОЛЛЕКЦИЮ XML-СХЕМ
ССЫЛКИ

Применимо к: SQL Server 2019 и более поздних версий
ИЗМЕНЯТЬ ЛЮБОЙ ВНЕШНИЙ ЯЗЫК
СОЗДАНИЕ ВНЕШНЕГО ЯЗЫКА

Применимо к: SQL Server 2022 и более поздних версий
ИЗМЕНЕНИЕ ЛЮБОГО ВНЕШНЕГО ИСТОЧНИКА ДАННЫХ
ИЗМЕНИТЬ ЛЮБОЙ ВНЕШНИЙ ФОРМАТ ФАЙЛА
ИЗМЕНЕНИЕ ЛЮБОЙ ВНЕШНЕЙ ЗАДАЧИ
ИЗМЕНИТЬ ЛЮБОЙ ВНЕШНИЙ ПОТОК
ALTER LEDGER
ВКЛЮЧЕНИЕ РЕЕСТРА
db_datareader ПРЕДОСТАВЛЕНИЕ ВЫБОРА В БАЗЕ ДАННЫХ::<database-name>
db_denydatareader ЗАПРЕТИТЬ ВЫБОР В БАЗЕ ДАННЫХ::<database-name>
db_datawriter ПРЕДОСТАВЛЕНИЕ ВСТАВКИ В БАЗУ ДАННЫХ::<database-name>
ПРЕДОСТАВИТЬ ОБНОВЛЕНИЕ В БАЗЕ ДАННЫХ::<database-name>
ПРЕДОСТАВИТЬ ПРАВО НА УДАЛЕНИЕ В БАЗЕ ДАННЫХ::<database-name>
db_denydatawriter Запрет на вставку в базу данных::<database-name>
ЗАПРЕТИТЬ ОБНОВЛЕНИЕ БАЗЫ ДАННЫХ::<database-name>
ЗАПРЕТИТЬ УДАЛЕНИЕ В БАЗЕ ДАННЫХ::<database-name>
public Нет разрешений на уровне базы данных, присущих роли общедоступной базы данных. Однако некоторые разрешения базы данных присутствуют по умолчанию. В частности, разрешение на просмотр определения ключа шифровки столбца, просмотр определения главного ключа столбца и разрешение SELECT на множество отдельных системных таблиц. Эти разрешения можно отменить.

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

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

Имя роли Description
dbmanager Может создавать и удалять базы данных. Участник роли dbmanager , создающей базу данных, становится владельцем этой базы данных, которая позволяет пользователю подключаться к этой базе данных в качестве пользователя dbo. Пользователь dbo имеет все разрешения в этой базе данных. Члены роли dbmanager не обязательно имеют разрешения на доступ к базам данных, которым они не принадлежат.
db_exporter Члены предопределенной роли базы данных db_exporter могут выполнять все действия для экспорта данных. Разрешения, предоставленные с помощью этой роли, CREATE TABLE: ALTER ANY SCHEMA, ALTER ANY EXTERNAL DATA SOURCEALTER ANY EXTERNAL FILE FORMAT.

Применяется к выделенным пулам SQL Azure Synapse Analytics (ранее SQL DW)
loginmanager Может создавать и удалять имена входа в виртуальной master базе данных.

Note

Субъект уровня сервера и администратор Microsoft Entra (если настроен) имеют все разрешения в База данных SQL и Azure Synapse Analytics без необходимости быть членами каких-либо ролей. Дополнительные сведения см. в статье Авторизация доступа к базе данных База данных SQL, Управляемый экземпляр SQL и Azure Synapse Analytics.

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

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

  • db_datawriter и db_denydatawriter не применимы к бессерверным службам Azure Synapse Analytics, так как он просто считывает внешние данные.

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

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

msdb имя роли Description
db_ssisadmin
db_ssisoperator
db_ssisltduser
Члены этих ролей базы данных могут администрировать и использовать службы SSIS. Экземпляры SQL Server, обновляемые с более ранней версии, могут содержать более раннюю версию роли, которая была названа с помощью служб преобразования данных (DTS), а не служб SSIS. Дополнительные сведения см. в разделе Роли Integration Services (служба Integration Services).
dc_admin
dc_operator
dc_proxy
Члены этих ролей базы данных могут администрировать и использовать сборщик данных. Дополнительные сведения см. в разделе "Сбор данных".
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 задания, которые запускают пакеты, чтобы использовать учетную запись прокси с ограниченными привилегиями или добавлять только членов sysadmin в роли db_ssisadmin и dc_admin.

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

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

Feature Type Description
sp_helpdbfixedrole Metadata Возвращает список всех предопределенных ролей базы данных.
sp_dbfixedrolepermission Metadata Отображает разрешения предопределенной роли базы данных.
sp_helprole Metadata Возвращает информацию о ролях, относящихся к текущей базе данных.
sp_helprolemember Metadata Возвращает сведения о членах роли в текущей базе данных.
sys.database_role_members Metadata Возвращает одну строку для каждого члена каждой роли базы данных.
IS_MEMBER Metadata Указывает, является ли текущий пользователь членом указанной группы Microsoft Windows, группы Microsoft Entra или роли базы данных Microsoft SQL Server.
СОЗДАТЬ РОЛЬ Command Создает новую роль базы данных в текущей базе данных.
ИЗМЕНИТЬ РОЛЬ Command Изменяет имя или членство роли базы данных.
DROP ROLE Command Удаляет роль из базы данных.
sp_addrole Command Создает новую роль базы данных в текущей базе данных.
sp_droprole Command Удаляет роль базы данных из текущей базы данных.
sp_addrolemember Command Добавляет пользователя базы данных, роль базы данных, имя входа Windows или группу Windows к роли текущей базы данных. Вместо этого следует использовать ALTER ROLE все платформы, кроме платформы Analytics Platform System (PDW) и Azure Synapse.
sp_droprolemember Command Удаляет учетную запись безопасности из роли SQL Server в текущей базе данных. Вместо этого следует использовать ALTER ROLE все платформы, кроме платформы Analytics Platform System (PDW) и Azure Synapse.
GRANT Permissions Добавляет разрешение для роли.
DENY Permissions Запрещает разрешение для роли.
REVOKE Permissions Удаляет разрешения, выданные или запрещенные ранее.

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

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

Examples

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

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

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

ALTER ROLE db_datareader ADD MEMBER Ben;
GO

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

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

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
INNER JOIN sys.database_principals AS roles
    ON database_role_members.role_principal_id = roles.principal_id
INNER JOIN sys.database_principals AS members
    ON database_role_members.member_principal_id = members.principal_id;
GO