添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)

为了轻松管理数据库中的权限,SQL Server 提供了多个角色,这些角色是将其他主体分组的安全主体。 它们类似于 Microsoft Windows 操作系统中的组 。 数据库级角色在其权限范围内是数据库范围的。

若要向数据库角色添加和删除用户,请使用 ADD MEMBER ALTER ROLE 语句的 DROP MEMBER 选项。 分析平台系统 (PDW) 和 Azure Synapse Analytics 不支持使用 ALTER ROLE 。 请改用较旧的 sp_addrolemember sp_droprolemember 过程。

有两种类型的数据库级角色: 在数据库中预定义的固定数据库角色 可以创建的用户定义数据库角色

固定数据库角色在数据库级别定义,并存在于每个数据库中。 db_owner 数据库角色的成员可以管理固定数据库角色成员身份。 msdb 数据库中也有一些特殊用途的数据库角色。

可以将任何数据库帐户和其他 SQL Server 角色添加到数据库级角色中。

不要将用户定义的数据库角色添加为固定角色的成员。 这可以启用意外的特权升级。

可以使用 GRANT DENY REVOKE 语句自定义用户定义的数据库角色的权限。 有关详细信息,请参阅 权限(数据库引擎)。

有关所有权限的列表,请参阅 数据库引擎权限 海报。 无法向数据库角色授予服务器级权限。 无法将登录名和其他服务器级主体(如服务器角色)添加到数据库角色。 对于 SQL Server 中的服务器级安全性,请改用 服务器角色 。 无法通过 Azure SQL 数据库和 Azure Synapse Analytics 中的角色授予服务器级权限。

固定数据库角色

下表显示了固定数据库角色及其功能。 这些角色存在于所有数据库中。 除公共 数据库角色外 ,无法更改分配给固定数据库角色的权限。

固定数据库角色名称 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 固定数据库角色的成员无法从数据库中的用户表和视图读取任何数据。

无法更改分配给固定数据库角色的权限。 下图显示了分配给固定数据库角色的权限:

SQL 数据库和 Azure Synapse 的特殊角色

这些数据库角色仅存在于虚拟 master 数据库中。 其权限仅限于在其中 master 执行的操作。 只能向这些角色添加数据库用户 master 。 无法将登录名添加到这些角色,但可以根据登录名创建用户,然后将这些用户添加到角色。 还可以将这些角色中包含的数据库用户 master 添加到这些角色。 但是,添加到 dbmanager 角色中的 master 包含的数据库用户 不能用于创建新数据库。

dbmanager 可以创建和删除数据库。 创建数据库的 dbmanager 角色的成员将成为该数据库的所有者,该所有者允许用户以 dbo 用户身份连接到该数据库。 dbo 用户拥有数据库中的所有数据库权限。 dbmanager 角色的成员不一定有权访问他们不拥有的数据库。 db_exporter 仅适用于 Azure Synapse Analytics 专用 SQL 池(以前为 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 Analytics 中具有所有权限,而无需成为任何角色的成员。 有关详细信息,请参阅 SQL 数据库身份验证和授权:授予访问权限

某些数据库角色不适用于 Azure SQL 或 Azure Synapse:

  • db_backupoperator不适用于 Azure SQL 数据库(而不是 Azure SQL 托管实例)和 Azure Synapse Analytics 无服务器池,因为备份和还原 T-SQL 命令不可用。
  • db_datawriter db_denydatawriter 不适用于 Azure Synapse Analytics 无服务器,因为它只读取外部数据。
  • msdb 角色

    msdb 数据库包含下表中显示的特殊用途角色。

    msdb 角色名称 db_ssisadmin

    db_ssisoperator

    db_ssisltduser 这些数据库角色的成员可以管理和使用 SSIS。 从早期版本升级的 SQL Server 实例可能包含使用数据转换服务(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 代理作业以使用具有有限特权的 代理帐户,或仅将 sysadmin 成员添加到 db_ssisadmin dc_admin 角色。

    使用数据库级角色

    下表介绍了用于处理数据库级角色的命令、视图和函数。

    IS_MEMBER (Transact-SQL) 指示当前用户是指定 Microsoft Windows 组的成员还是 Microsoft SQL Server 数据库角色的成员。 CREATE ROLE (Transact-SQL) 在当前数据库中创建新的数据库角色。 ALTER ROLE (Transact-SQL) 更改数据库角色的名称或成员身份。 DROP ROLE (Transact-SQL) 从数据库中删除角色。 sp_addrole (Transact-SQL) 在当前数据库中创建新的数据库角色。 sp_droprole (Transact-SQL) 从当前数据库中删除数据库角色。 sp_addrolemember (Transact-SQL) 将数据库用户、数据库角色、Windows 登录名或 Windows 组添加到当前数据库中的数据库角色。 分析平台系统(PDW)和 Azure Synapse 以外的所有平台都应改用 ALTER ROLE sp_droprolemember (Transact-SQL) 从当前数据库中的 SQL Server 角色中删除安全帐户。 分析平台系统(PDW)和 Azure Synapse 以外的所有平台都应改用 ALTER ROLE GRANT 向角色添加权限。 拒绝对角色的权限。 REVOKE 删除以前授予或拒绝的权限。

    公共数据库角色

    每个数据库用户都属于 公共 数据库角色。 如果用户尚未授予或拒绝对安全对象的特定权限,则用户将继承对该 对象公开的权限。 无法从 公共 角色中删除数据库用户。

    本节中的示例演示如何使用数据库级角色。

    .A 将用户添加到数据库级角色

    以下示例将用户“Ben”添加到固定数据库级角色 db_datareader

    ALTER ROLE db_datareader
    	ADD MEMBER Ben;  
    

    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  
    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;  
    
  • 安全性目录视图 (Transact-SQL)
  • 安全存储过程 (Transact-SQL)
  • 安全函数 (Transact-SQL)
  • 保护 SQL Server
  • sp_helprotect (Transact-SQL)
  • Azure SQL 数据库中的服务器角色
  •