服务器级别角色

适用于:SQL ServerAzure SQL 托管实例分析平台系统 (PDW)

SQL Server提供服务器级角色来帮助管理服务器上的权限。 这些角色是可组合其他主体的安全主体。 服务器级角色的权限作用域为服务器范围。 (“角色”类似于 Windows 操作系统中的“组”。)

SQL Server 2019 (15.x) 和以前的版本提供了 9 个固定服务器角色。 无法更改授予固定服务器角色(public 角色除外)的权限。 从 SQL Server 2012 (11.x) 开始,你可以创建用户定义的服务器角色,并将服务器级权限添加到用户定义的服务器角色。 SQL Server 2022 (16.x) 附带了 10 个额外的服务器角色,这些角色专用于 最低特权原则 ,其前缀 ##MS_ 和后缀 ## 用于区分其他常规用户创建的主体和自定义服务器角色。 这些新角色包含应用于服务器范围的特权,但也可以继承到单个数据库(服务器角色除外 ##MS_LoginManager## )。

与本地 SQL Server 一样,服务器权限也是分层组织的。 这些服务器级角色拥有的权限可以传播到数据库权限。 若要使权限在数据库级别有效发挥作用,登录名需要是服务器级别角色 ##MS_DatabaseConnector## 的成员(从 SQL Server 2022(16.x)开始),该角色授予对所有数据库的CONNECT权限,或者在单个数据库中拥有用户帐户。 这也适用于 master 数据库。

请考虑以下示例:服务器级角色 ##MS_ServerStateReader## 保留权限 VIEW SERVER STATE。 作为此角色成员的登录名在masterWideWorldImporters数据库中具有用户帐户。 此用户通过继承在这两个数据库中也具有VIEW DATABASE STATE权限。

可以将服务器级别主体(SQL Server 登录名、Windows 帐户和 Windows 组)添加到服务器级别角色。 固定服务器角色的每个成员都可以将其他登录名添加到该同一角色。 用户定义的服务器角色的成员则无法将其他服务器主体添加到角色。

服务器级别的固定角色

注意

这些在 SQL Server 2022(16.x)之前引入的服务器级角色,在 Azure SQL 数据库或 Azure Synapse Analytics 中不可用。 有一些特殊的用于权限管理的 Azure SQL 数据库服务器角色,这些角色等效于 SQL Server 2022 (16.x) 中引入的服务器级角色。 有关 SQL 数据库的详细信息,请参阅控制和授予数据库访问权限

下表显示了服务器级的固定角色及其权限。

服务器级的固定角色 说明
sysadmin sysadmin 固定服务器角色的成员可以在服务器上执行任何活动。 重要提示:无法拒绝此角色的成员的权限。
serveradmin serveradmin 固定服务器角色的成员可以更改服务器范围的配置选项和关闭服务器。
securityadmin securityadmin 固定服务器角色的成员可以管理登录名及其属性。 他们可以 GRANTDENYREVOKE 服务器级权限。 securityadmin 还可以 GRANTDENY 数据库级权限(如果他们具有数据库的访问权限)。REVOKE 此外,securityadmin 还可以重置 SQL Server 登录名的密码。

重要提示:授予数据库引擎的访问权限和配置用户权限的能力使得安全管理员可以分配大多数服务器权限securityadmin 角色应视为与 sysadmin 角色等效。 或者,从 SQL Server 2022 (16.x) 开始,请考虑使用新的固定服务器角色 ##MS_LoginManager##
processadmin processadmin 固定服务器角色的成员可以终止在 SQL Server 实例中运行的进程
setupadmin setupadmin 固定服务器角色的成员可以使用 Transact-SQL 语句添加和删除链接服务器。 (使用 Management Studio 时需要 sysadmin 成员资格。)
bulkadmin bulkadmin 固定服务器角色的成员可以运行 语句BULK INSERT。 此角色的成员在某些情况下可能会提升其特权。 分配此角色并监视其成员执行的所有活动时,应用最低特权原则。

Linux 上的 SQL Server 不支持 bulkadmin 角色或 ADMINISTER BULK OPERATIONS 权限。

Microsoft Entra 身份验证的登录不支持在 Linux 或 Windows 上进行批量操作(BULK INSERT 语句)。 在此方案中,只有 sysadmin 角色的成员才能对 SQL Server 执行批量插入。
diskadmin diskadmin 固定服务器角色用于管理磁盘文件
dbcreator dbcreator 固定服务器角色的成员可以创建、更改、删除和还原任何数据库。
公共 每个 SQL Server 登录名都属于 public 服务器角色。 如果未向服务器主体授予或拒绝对某安全对象的特定权限,则用户将继承授予public角色在该对象上的权限。 仅当希望该对象可供所有用户使用时,才对任何对象分配 公共 权限。 不能更改 公共成员身份。

注意:public 的实现方式与其他角色不同,并且可以从 公共 固定服务器角色授予、拒绝或撤销权限。

重要

以下服务器角色提供的大多数权限不适用于 Azure Synapse Analytics - processadminserveradminsetupadmindiskadmin

请参阅 SQL Server 2022 中引入的固定服务器级角色。

下表显示了 SQL Server 2022(16.x)中引入的固定服务器级角色及其功能。

注意

这些服务器级权限不适用于 Azure SQL 托管实例或 Azure Synapse Analytics。 ##MS_PerformanceDefinitionReader####MS_ServerPerformanceStateReader##并且 ##MS_ServerSecurityStateReader## 是在 SQL Server 2022(16.x)中引入的,在 Azure SQL 数据库中不可用。

服务器级的固定角色 说明
##MS_DatabaseConnector## ##MS_DatabaseConnector## 固定服务器角色的成员可连接到任何数据库,而无需数据库中的用户帐户即可连接。

若要拒绝对特定数据库的 CONNECT 权限,用户可以在数据库中为此登录名创建匹配的用户帐户,然后 DENY 对数据库用户的 CONNECT 权限。 此 DENY 权限会覆盖来自此角色的 GRANT CONNECT 权限。
##MS_LoginManager## ##MS_LoginManager##固定服务器角色的成员可以创建、删除和修改登录名。 与旧的固定服务器角色“securityadmin”相反,此角色不允许成员持有 特权GRANT。 这是一个限制性较高的角色,有助于遵守“最低特权原则”
##MS_DatabaseManager## ##MS_DatabaseManager## 固定服务器角色的成员可创建和删除数据库。 创建数据库的 ##MS_DatabaseManager## 角色的成员成为相应数据库的所有者,这样可便于用户以 dbo 用户身份连接到相应数据库。 dbo 用户具有数据库中的所有数据库权限。 ##MS_DatabaseManager## 角色的成员不一定具有访问非他们所有的数据库的权限。 此服务器角色与 SQL Server 中的 dbcreator 角色具有相同的权限,但我们建议将此新角色用于以前的角色,因为此角色也存在于 Azure SQL 数据库中,因此有助于在不同的环境中使用相同的脚本。

此角色的成员在某些情况下可能会提升其特权。 分配此角色并监视其成员执行的所有活动时,应用最低特权原则。
##MS_ServerStateManager## ##MS_ServerStateManager## 固定服务器角色的成员与 ##MS_ServerStateReader## 角色具有相同的权限。 此外,它还保留ALTER SERVER STATE权限,该权限允许访问多个管理作,例如: DBCC FREEPROCCACHEDBCC FREESYSTEMCACHE ('ALL')DBCC SQLPERF()
##MS_ServerStateReader## ##MS_ServerStateReader##固定服务器角色的成员可以读取由VIEW SERVER STATE涵盖的所有动态管理视图(DMV)和函数,并在该角色成员拥有用户账户的任何数据库上拥有VIEW DATABASE STATE权限。
##MS_ServerPerformanceStateReader## ##MS_ServerPerformanceStateReader##固定服务器角色的成员可以读取VIEW SERVER PERFORMANCE STATE所涵盖的所有动态管理视图(DMV)和函数,并对其在此角色中拥有用户帐户的任何数据库分别具有VIEW DATABASE PERFORMANCE STATE权限。 服务器角色可以访问的权限的 ##MS_ServerStateReader## 子集,这有助于遵守 最低特权原则
##MS_ServerSecurityStateReader## ##MS_ServerSecurityStateReader##固定服务器角色的成员可以读取所涵盖VIEW SERVER SECURITY STATE的所有动态管理视图(DMV)和功能,并分别具有VIEW DATABASE SECURITY STATE对此角色成员具有用户帐户的任何数据库的权限。 服务器角色有权访问的 ##MS_ServerStateReader## 一小部分,这有助于遵守 最低特权原则
##MS_DefinitionReader## ##MS_DefinitionReader## 固定服务器角色的成员可以读取 VIEW ANY DEFINITION 所涵盖的所有目录视图,分别在该角色的成员具有用户帐户的任何数据库上具有 VIEW DEFINITION 权限。
##MS_PerformanceDefinitionReader## ##MS_PerformanceDefinitionReader## 固定服务器角色的成员可以读取 VIEW ANY PERFORMANCE DEFINITION 所涵盖的所有目录视图,分别在该角色的成员具有用户帐户的任何数据库上具有 VIEW PERFORMANCE DEFINITION 权限。 服务器角色有权访问的 ##MS_DefinitionReader## 子集。
##MS_SecurityDefinitionReader## ##MS_SecurityDefinitionReader## 固定服务器角色的成员可以读取 VIEW ANY SECURITY DEFINITION 所涵盖的所有目录视图,分别在该角色的成员具有用户帐户的任何数据库上具有 VIEW SECURITY DEFINITION 权限。 服务器角色有权访问的 ##MS_DefinitionReader## 一小部分,这有助于遵守 最低特权原则

固定服务器角色的权限

每个固定服务器角色都被分配了特定的权限。

SQL Server 2022 中新固定服务器角色的权限

下表显示了分配给服务器级角色的权限。 它还显示继承的数据库级权限,前提是用户可以连接到单个数据库。

服务器级的固定角色 服务器级别权限 数据库级别权限
##MS_DatabaseConnector## - CONNECT ANY DATABASE - CONNECT
##MS_LoginManager## - CREATE LOGIN
- ALTER ANY LOGIN
空值
##MS_DatabaseManager## - CREATE ANY DATABASE
- ALTER ANY DATABASE
- ALTER
##MS_ServerStateManager## - ALTER SERVER STATE
- VIEW SERVER STATE
- VIEW SERVER PERFORMANCE STATE
- VIEW SERVER SECURITY STATE
- VIEW DATABASE STATE
- VIEW DATABASE PERFORMANCE STATE
- VIEW DATABASE SECURITY STATE
##MS_ServerStateReader## - VIEW SERVER STATE
- VIEW SERVER PERFORMANCE STATE
- VIEW SERVER SECURITY STATE
- VIEW DATABASE STATE
- VIEW DATABASE PERFORMANCE STATE
- VIEW DATABASE SECURITY STATE
##MS_ServerPerformanceStateReader## - VIEW SERVER PERFORMANCE STATE - VIEW DATABASE PERFORMANCE STATE
##MS_ServerSecurityStateReader## - VIEW SERVER SECURITY STATE - VIEW DATABASE SECURITY STATE
##MS_DefinitionReader## - VIEW ANY DATABASE
- VIEW ANY DEFINITION
- VIEW ANY PERFORMANCE DEFINITION
- VIEW ANY SECURITY DEFINITION
- VIEW DEFINITION
- VIEW PERFORMANCE DEFINITION
- VIEW SECURITY DEFINITION
##MS_PerformanceDefinitionReader## - VIEW ANY PERFORMANCE DEFINITION - VIEW PERFORMANCE DEFINITION
##MS_SecurityDefinitionReader## - VIEW ANY SECURITY DEFINITION - VIEW SECURITY DEFINITION

SQL Server 2019 及更早版本的服务器角色的权限

下图显示了分配给旧服务器角色(SQL Server 2019(15.x)和早期版本的权限。

显示固定服务器角色权限的关系图。

权限 CONTROL SERVER 与 sysadmin 固定服务器角色相似,但与 sysadmin 固定服务器角色不同。 具有权限的 CONTROL SERVER 主体可以拒绝特定权限。 从安全角度来看,请将具有 CONTROL SERVER 的主体视为与 sysadmin 成员相同,因为可以通过多种方法将权限从 CONTROL SERVER 提升到完全 sysadmin。 多个 DBCC 命令和许多系统过程需要 sysadmin 固定服务器角色的成员身份。

服务器级别权限

只能向用户定义的服务器角色中添加服务器级权限。 若要列出服务器级权限,请执行下面的语句。 服务器级权限如下:

SELECT *
FROM sys.fn_builtin_permissions('SERVER')
ORDER BY permission_name;

有关权限的详细信息,请参阅 权限(数据库引擎)sys.fn_builtin_permissions

使用服务器级角色

下表介绍了可以用于服务器级角色的命令、视图和功能。

功能 类型 说明
sp_helpsrvrole 元数据 返回服务器级角色的列表。
sp_helpsrvrolemember 元数据 返回有关服务器级角色成员的信息。
sp_srvrolepermission 元数据 显示服务器级角色的权限。
IS_SRVROLEMEMBER 元数据 指示 SQL Server 登录名是否为指定服务器级角色的成员。
sys.server_role_members 元数据 为每个服务器级角色的每个成员返回一行。
创建服务器角色 命令 创建用户定义的服务器角色。
更改服务器角色 命令 更改服务器角色的成员关系或更改用户定义的服务器角色的名称。
DROP SERVER ROLE (删除服务器角色) 命令 删除用户定义的服务器角色。
sp_addsrvrolemember 命令 将登录名添加为某个服务器级角色的成员。 已弃用。 应改用 ALTER SERVER ROLE
sp_dropsrvrolemember 命令 从服务器级角色中删除 SQL Server 登录名或 Windows 用户或组。 已弃用。 应改用 ALTER SERVER ROLE

Azure Arc 启用了 SQL Server 专用角色

在安装适用于 SQL Server 的 Azure 扩展时,该安装将会:

  1. 创建一个服务器级别的角色:SQLArcExtensionServerRole

  2. 创建一个数据库级别的角色:SQLArcExtensionUserRole

  3. 将 NT AUTHORITY\SYSTEM* 帐户添加到每个角色

  4. 在每个数据库的数据库级别映射 NT AUTHORITY\SYSTEM*

  5. 为启用的功能授予最低权限

    *或者,可以将 Azure Arc 启用的 SQL Server 配置为以最低特权模式运行(提供预览版)。 有关详细信息,请参阅使用最低特权操作 Azure Arc 启用的 SQL Server(预览版)

此外,当特定功能不再需要这些角色时,适用于 SQL Server 的 Azure 扩展将会撤销其权限。

SqlServerExtensionPermissionProvider 是 Windows 任务。 当检测到以下情况时,它会授予或撤销 SQL Server 中的特权:

  • 主机上安装了新的 SQL Server 实例
  • SQL Server 实例已从主机上卸载
  • 启用或禁用了实例级功能,或者更新了设置
  • 扩展服务已重启

注意

在 2024 年 7 月发布之前,SqlServerExtensionPermissionProvider 是一项计划任务。 每小时运行一次。

有关详细信息,请查看为适用于 SQL Server 的 Azure Extension 配置 Windows 服务帐户和权限

如果卸载适用于 SQL Server 的 Azure 扩展,则会移除服务器级别和数据库级别的角色。

有关权限,请参阅权限