服务器级别角色
适用于: SQL Server Azure SQL 托管实例 分析平台系统 (PDW)
SQL Server提供服务器级角色来帮助管理服务器上的权限。 这些角色是可组合其他主体的安全主体。 服务器级角色的权限作用域为服务器范围。 (“角色”类似于 Windows 操作系统中的“组”。)
SQL Server 2019 和早期版本提供了 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) 预览版))(该角色授予对所有数据库的“连接”权限)的成员,或在各个数据库中拥有用户帐户。 这也适用于 master
数据库。
请考虑以下示例:服务器级别角色 ##MS_ServerStateReader## 具有“查看服务器状态”权限。 此角色成员的登录名在数据库中具有用户帐户、master
以及 WideWorldImporters
。 此用户还将具有权限,即通过继承在这两个数据库中“查看数据库状态”。
可以将服务器级别主体(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 固定服务器角色的成员可以管理登录名及其属性。 他们可以 GRANT 、DENY 和 REVOKE 服务器级权限。 securityadmin 还可以 GRANT 、DENY 和 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 权限。 只有 sysadmin 才能对 Linux 上的 SQL Server 执行批量插入。 |
diskadmin | diskadmin 固定服务器角色用于管理磁盘文件。 |
dbcreator | dbcreator 固定服务器角色的成员可以创建、更改、删除和还原任何数据库。 |
公共 | 每个 SQL Server 登录名都属于 public 服务器角色。 如果未向某个服务器主体授予或拒绝对某个安全对象的特定权限,用户将继承向 public 角色授予的对该对象的权限。 只有在希望所有用户都能使用对象时,才在对象上分配 Public 权限。 你无法更改具有 Public 角色的成员身份。 注意:public 与其他角色的实现方式不同,可通过 public 固定服务器角色授予、拒绝或撤销权限。 |
重要
以下服务器角色提供的大多数权限都不适用于 Azure Synapse Analytics:processadmin、serveradmin、setupadmin 和 diskadmin。
请参阅 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## 固定服务器角色的成员可连接到任何数据库,而无需数据库中的用户帐户即可连接。 若要拒绝对特定数据库的“连接”权限,用户可在数据库中为此登录创建匹配的用户帐户,然后拒绝对数据库用户的“连接”权限。 此“拒绝”权限将推翻来自此角色的“授予连接”权限。 |
##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## 角色具有相同的权限。 此外,该角色还具有“变更服务器状态”权限,该权限允许访问多个管理操作,例如:DBCC FREEPROCCACHE 、DBCC FREESYSTEMCACHE ('ALL') 、DBCC SQLPERF() |
##MS_ServerStateReader## | ##MS_ServerStateReader## 固定服务器角色的成员可以读取“查看服务器状态”所涵盖的所有动态管理视图 (DMV) 和功能,分别拥有该角色的成员具有用户帐户的任何数据库上的“查看数据库状态”权限。 |
##MS_ServerPerformanceStateReader## | ##MS_ServerPerformanceStateReader## 固定服务器角色的成员可以读取“查看服务器性能状态”所涵盖的所有动态管理视图 (DMV) 和功能,并分别对此角色的成员具有用户帐户的任何数据库拥有“查看数据库性能状态”权限。 这是 ##MS_ServerStateReader## 服务器角色有权访问的内容的一部分,有助于遵守“最低特权原则”。 |
##MS_ServerSecurityStateReader## | ##MS_ServerSecurityStateReader## 固定服务器角色的成员可以读取“查看服务器安全状态”所涵盖的所有动态管理视图 (DMV) 和功能,并分别对角色的成员具有用户帐户的任何数据库拥有“查看数据库安全状态”权限。 这是 ##MS_ServerStateReader## 服务器角色有权访问的内容的一小部分,有助于遵守“最低特权原则”。 |
##MS_DefinitionReader## | ##MS_DefinitionReader## 固定服务器角色的成员可以读取“查看任何定义”覆盖的所有目录视图,并分别对此角色的成员具有用户帐户的任何数据库拥有“查看定义”权限。 |
##MS_PerformanceDefinitionReader## | ##MS_PerformanceDefinitionReader## 固定服务器角色的成员可以读取“查看任何性能定义”覆盖的所有目录视图,并分别对此角色的成员具有用户帐户的任何数据库拥有“查看性能定义”权限。 这是 ##MS_DefinitionReader## 服务器角色有权访问的内容的一部分。 |
##MS_SecurityDefinitionReader## | ##MS_SecurityDefinitionReader## 固定服务器角色的成员可以读取“查看任何安全定义”覆盖的所有目录视图,并分别对此角色的成员拥有用户帐户的任何数据库拥有“查看安全定义”权限。 这是 ####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 | 查看安全定义 |
SQL Server 2019 及更早版本的服务器角色的权限
下图显示了分配给旧版服务器角色(SQL Server 2019 及更早版本)的权限。
重要
CONTROL SERVER 权限与 sysadmin 固定服务器角色类似,但并不完全相同。 权限并不表示角色成员身份,并且角色成员身份不会授予权限。 (例如,CONTROL SERVER 不表示 sysadmin 固定服务器角色的成员身份。)但是,有时可在角色和相等的权限之间模拟。 大多数 DBCC 命令和许多系统过程要求 sysadmin 固定服务器角色的成员身份。
服务器级别权限
只能向用户定义的服务器角色中添加服务器级权限。 若要列出服务器级权限,请执行下面的语句。 服务器级权限如下:
SELECT * FROM sys.fn_builtin_permissions('SERVER') ORDER BY permission_name;
有关权限的详细信息,请参阅权限(数据库引擎)和 sys.fn_builtin_permissions (Transact-SQL)。
使用服务器级角色
下表介绍了可以用于服务器级角色的命令、视图和功能。
功能 | 类型 | 描述 |
---|---|---|
sp_helpsrvrole (Transact-SQL) | 元数据 | 返回服务器级角色的列表。 |
sp_helpsrvrolemember (Transact-SQL) | 元数据 | 返回有关服务器级角色成员的信息。 |
sp_srvrolepermission (Transact-SQL) | 元数据 | 显示服务器级角色的权限。 |
IS_SRVROLEMEMBER (Transact-SQL) | 元数据 | 指示 SQL Server 登录名是否为指定服务器级角色的成员。 |
sys.server_role_members (Transact-SQL) | 元数据 | 为每个服务器级角色的每个成员返回一行。 |
CREATE SERVER ROLE (Transact-SQL) | 命令 | 创建用户定义的服务器角色。 |
ALTER SERVER ROLE (Transact-SQL) | 命令 | 更改服务器角色的成员关系或更改用户定义的服务器角色的名称。 |
DROP SERVER ROLE (Transact-SQL) | 命令 | 删除用户定义的服务器角色。 |
sp_addsrvrolemember (Transact-SQL) | 命令 | 将登录名添加为某个服务器级角色的成员。 已弃用。 应改用 ALTER SERVER ROLE 。 |
sp_dropsrvrolemember (Transact-SQL) | 命令 | 从服务器级角色中删除 SQL Server 登录名或 Windows 用户或组。 已弃用。 应改用 ALTER SERVER ROLE 。 |
Azure Arc 启用了 SQL Server 专用角色
在安装适用于 SQL Server 的 Azure 扩展时,该安装将会:
创建一个服务器级别的角色:SQLArcExtensionServerRole
创建一个数据库级别的角色:SQLArcExtensionUserRole
将 NT AUTHORITY\SYSTEM* 帐户添加到每个角色
在每个数据库的数据库级别映射 NT AUTHORITY\SYSTEM*
为启用的功能授予最低权限
*或者,可以将 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 扩展,则会移除服务器级别和数据库级别的角色。
有关权限,请参阅权限。