Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Относится к:SQL Server
База данных SQL Azure
Управляемый экземпляр SQL Azure
Azure 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. Дополнительные сведения см. в разделе Разрешения (компонент ядро СУБД).
Список всех разрешений см. в афише с разрешениями для ядра СУБД . Разрешения на уровне сервера не могут быть предоставлены ролям базы данных. Имена входа и другие субъекты уровня сервера (например, роли сервера) нельзя добавлять к ролям базы данных. Для обеспечения безопасности на уровне сервера в SQL Server используйте роли сервера . Разрешения на уровне сервера нельзя предоставлять с помощью ролей в База данных SQL Azure и Azure Synapse Analytics.
Предопределенные роли базы данных
В следующей таблице показаны фиксированные роли базы данных и их возможности. Эти роли существуют во всех базах данных. Кроме роли общедоступной базы данных разрешения, назначенные предопределенным ролям базы данных, не могут быть изменены.
| Исправлено имя роли базы данных | Description |
|---|---|
| db_owner |
Члены предопределенной роли базы данных db_owner могут выполнять все действия по настройке и обслуживанию базы данных, а также DROP базу данных в SQL Server. (В Базе данных SQL и Azure Synapse некоторые действия обслуживания требуют разрешений на уровне сервера и не могут выполняться членами db_owner.) |
| 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 | ALTER ANY APPLICATION ROLECREATE SCHEMAALTER ANY ROLEVIEW DEFINITION |
| db_accessadmin | ALTER ANY USERCREATE SCHEMACREATE USER |
| db_backupoperator | BACKUP DATABASEBACKUP LOGCHECKPOINT |
| db_ddladmin | ALTER ANY ASSEMBLYALTER ANY ASYMMETRIC KEYALTER ANY CERTIFICATEALTER ANY CONTRACTALTER ANY DATABASE DDL TRIGGERALTER ANY DATABASE EVENT NOTIFICATIONALTER ANY DATASPACEALTER ANY EXTERNAL LIBRARYALTER ANY FULLTEXT CATALOGALTER ANY MESSAGE TYPEALTER ANY REMOTE SERVICE BINDINGALTER ANY ROUTEALTER ANY SCHEMAALTER ANY SERVICEALTER ANY SYMMETRIC KEYCHECKPOINTCREATE AGGREGATECREATE ASSEMBLYCREATE ASYMMETRIC KEYCREATE CERTIFICATECREATE CONTRACTCREATE DATABASE DDL EVENT NOTIFICATIONCREATE DEFAULTCREATE EXTERNAL LIBRARYCREATE FULLTEXT CATALOGCREATE FUNCTIONCREATE MESSAGE TYPECREATE PROCEDURECREATE QUEUECREATE REMOTE SERVICE BINDINGCREATE ROUTECREATE RULECREATE SCHEMACREATE SERVICECREATE SYMMETRIC KEYCREATE SYNONYMCREATE TABLECREATE TYPECREATE VIEWCREATE XML SCHEMA COLLECTIONREFERENCESОбласть применения: SQL Server 2019 (15.x) и более поздних версий: ALTER ANY EXTERNAL LANGUAGECREATE EXTERNAL LANGUAGEОбласть применения: SQL Server 2022 (16.x) и более поздних версий: ALTER ANY EXTERNAL DATA SOURCEALTER ANY EXTERNAL FILE FORMATALTER ANY EXTERNAL JOBALTER ANY EXTERNAL STREAMALTER LEDGERENABLE LEDGER |
| db_datareader | GRANT SELECT ON DATABASE::<database-name> |
| db_denydatareader | DENY SELECT ON DATABASE::<database-name> |
| db_datawriter | GRANT INSERT ON DATABASE::<database-name>GRANT UPDATE ON DATABASE::<database-name>GRANT DELETE ON DATABASE::<database-name> |
| db_denydatawriter | DENY INSERT ON DATABASE::<database-name>DENY UPDATE ON DATABASE::<database-name>DENY DELETE ON DATABASE::<database-name> |
| public | Нет разрешений на уровне базы данных, присущих роли общедоступной базы данных. Однако некоторые разрешения базы данных присутствуют по умолчанию. В частности, VIEW ANY COLUMN ENCRYPTION KEY DEFINITIONи VIEW ANY COLUMN MASTER KEY DEFINITIONSELECT разрешение на многие отдельные системные таблицы. Эти разрешения можно отменить. |
Специальные роли для Базы данных Azure SQL и 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 SOURCE, ALTER 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, обновлённые с более ранней версии, могут содержать более старую версию роли, которая была названа с использованием Data Transformation Services (DTS), а не SSIS. Дополнительные сведения см. в разделе Роли служб Integration Services (служба SSIS). |
|
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, запускающие пакеты, так, чтобы они использовали учетную запись-посредник с ограниченными привилегиями, либо добавляйте в роли db_ssisadmin и dc_adminтолько участников sysadmin.
Работа с ролями уровня базы данных
В следующей таблице приведены команды, представления и функции, предназначенные для работы с ролями уровня баз данных.
| 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. |
| CREATE ROLE | Command | Создает новую роль базы данных в текущей базе данных. |
| ALTER ROLE | Command | Изменяет имя или членство роли базы данных. |
| DROP ROLE | Command | Удаляет роль из базы данных. |
| sp_addrole | Command | Создает новую роль базы данных в текущей базе данных. |
| sp_droprole | Command | Удаляет роль базы данных из текущей базы данных. |
| sp_addrolemember | Command | Добавляет пользователя базы данных, роль базы данных, учетную запись Windows или группу Windows в роль базы данных в текущей базе данных. Все платформы, кроме Analytics Platform System (PDW) и Azure Synapse, должны вместо этого использовать ALTER ROLE. |
| sp_droprolemember | Command | Удаляет учетную запись безопасности из роли SQL Server в текущей базе данных. Все платформы, кроме Analytics Platform System (PDW) и Azure Synapse, должны вместо этого использовать ALTER ROLE. |
| 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