服务器级别角色
适用于:SQL Server
Azure SQL 托管实例
Analytics Platform System (PDW)
SQL Server 提供服务器级角色以帮助你管理服务器上的权限。 这些角色是可组合其他主体的安全主体。 服务器级角色的权限作用域为服务器范围。 (“角色”类似于 Windows 操作系统中的“组”。)
SQL Server 2019 及以前版本提供了 9 个固定服务器角色。 不能更改授予固定服务器角色的权限, (公共) 除外。 从 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 权限。 作为此角色成员的登录名在 数据库中有一个用户帐户, master
和 WideWorldImporters
。 然后,此用户还将通过继承在这两个数据库中拥有 VIEW DATABASE STATE 权限。
你可以将服务器级主体(SQL Server 登录名、Windows 帐户和 Windows 组)添加到服务器级角色。 固定服务器角色的每个成员都可以将其他登录名添加到该同一角色。 用户定义的服务器角色的成员无法将其他服务器主体添加到该角色。
服务器级别的固定角色
注意
SQL Server 2022 (16.x) 之前引入的服务器级角色在 Azure SQL Database 或 Azure Synapse Analytics 中不可用。 权限管理有特殊Azure SQL数据库服务器角色,这些角色等效于 SQL Server 2022 (16.x) 中引入的服务器级角色。 有关SQL 数据库的详细信息,请参阅控制和授予数据库访问权限。
下表显示了服务器级的固定角色及其权限。
服务器级的固定角色 | 说明 |
---|---|
sysadmin | sysadmin 固定服务器角色的成员可以在服务器上执行任何活动。 |
serveradmin | serveradmin 固定服务器角色的成员可以更改服务器范围的配置选项和关闭服务器。 |
securityadmin | securityadmin 固定服务器角色的成员可以管理登录名及其属性。 他们可以 GRANT 、DENY 和 REVOKE 服务器级权限。 他们还可以 GRANT 、DENY 和 REVOKE 数据库级权限(如果他们具有数据库的访问权限)。 此外,他们还可以重置 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 固定服务器角色的成员可以创建、更改、删除和还原任何数据库。 |
public | 每个 SQL Server 登录名都属于 public 服务器角色。 当服务器主体尚未被授予或拒绝对安全对象的特定权限时,用户将继承授予对该对象 的公共 权限。 只有在希望所有用户都能使用对象时,才在对象上分配 Public 权限。 不能在公共场合更改成员身份。 注意:public 与其他角色的实现方式不同,可通过 public 固定服务器角色授予、拒绝或撤销权限。 |
重要
以下服务器角色提供的大多数权限不适用于 Azure Synapse Analytics - processadmin、serveradmin、setupadmin 和 diskadmin。
SQL Server 2022 中引入的固定服务器级角色
下表显示了随 SQL Server 2022 (16.x) 引入的其他固定服务器级角色及其功能。
注意
这些服务器级权限不适用于 Azure SQL 托管实例 或 Azure Synapse Analytics。 SQL Server 2022 (16.x) 中引入了 ##MS_PerformanceDefinitionReader#、#MS_ServerPerformanceStateReader##和 ##MS_ServerSecurityStateReader##,在 Azure SQL Database 中不可用。
服务器级的固定角色 | 说明 |
---|---|
##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## 角色具有相同的权限。 此外,它还拥有 ALTER SERVER STATE 权限,该权限允许访问多个管理操作,例如: DBCC FREEPROCCACHE 、 DBCC FREESYSTEMCACHE ('ALL') 、 DBCC SQLPERF() |
##MS_ServerStateReader## | ##MS_ServerStateReader## 固定服务器角色的成员可以读取所有动态管理视图 (DMV) 和 VIEW SERVER STATE 涵盖的功能,并分别对此角色的成员拥有用户帐户的任何数据库具有 VIEW DATABASE STATE 权限。 |
##MS_ServerPerformanceStateReader## | ##MS_ServerPerformanceStateReader## 固定服务器角色的成员可以读取所有动态管理视图, (DMV) 和 VIEW SERVER PERFORMANCE STATE 所涵盖的功能,并分别对此角色的成员拥有用户帐户的任何数据库具有 VIEW DATABASE PERFORMANCE STATE 权限。 这是 ##MS_ServerStateReader## 服务器角色有权访问的内容的子集,有助于遵守 最低特权原则。 |
##MS_ServerSecurityStateReader## | ##MS_ServerSecurityStateReader## 固定服务器角色的成员可以读取所有动态管理视图 (DMV) 和 VIEW SERVER SECURITY STATE 所涵盖的功能,并分别对此角色的成员拥有用户帐户的任何数据库具有 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## 固定服务器角色的成员可以读取“查看任何安全定义”覆盖的所有目录视图,并分别对此角色的成员拥有用户帐户的任何数据库拥有“查看安全定义”权限。 这是 ##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 DATABASE STATE 查看数据库性能状态 查看数据库安全状态 |
##MS_ServerStateReader## | VIEW SERVER STATE 查看服务器性能状态 查看服务器安全状态 |
VIEW DATABASE STATE 查看数据库性能状态 查看数据库安全状态 |
##MS_ServerPerformanceStateReader## | 查看服务器性能状态 | 查看数据库性能状态 |
##MS_ServerSecurityStateReader## | 查看服务器安全状态 | 查看数据库安全状态 |
##MS_DefinitionReader## | VIEW ANY DATABASE VIEW ANY DEFINITION 查看任何性能定义 查看任何安全定义 |
VIEW DEFINITION 查看性能定义 查看安全定义 |
##MS_PerformanceDefinitionReader## | 查看任何性能定义 | 查看性能定义 |
##MS_SecurityDefinitionReader## | 查看任何安全定义 | 查看安全定义 |
SQL Server 2019 及更早版本的服务器角色权限
下图显示了分配给旧版服务器角色的权限 (SQL Server 2019 和早期版本) 。
重要
CONTROL SERVER 权限与 sysadmin 固定服务器角色类似,但并不完全相同。 权限并不表示角色成员身份,并且角色成员身份不会授予权限。 (例如 ,CONTROL SERVER 并不意味着 sysadmin 固定服务器 role.) 但是,有时可以在角色和等效权限之间模拟。 大多数 DBCC 命令和许多系统过程要求 sysadmin 固定服务器角色的成员身份。
服务器级别权限
只能向用户定义的服务器角色中添加服务器级权限。 若要列出服务器级权限,请执行下面的语句。 服务器级权限如下:
SELECT * FROM sys.fn_builtin_permissions('SERVER') ORDER BY permission_name;
有关权限的详细信息,请参阅 数据库引擎) (权限 和 sys.fn_builtin_permissions (Transact-SQL) 。
使用服务器级角色
下表介绍了可以用于服务器级角色的命令、视图和功能。
Feature | 类型 | 说明 |
---|---|---|
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) | Command | 创建用户定义的服务器角色。 |
ALTER SERVER ROLE (Transact-SQL) | Command | 更改服务器角色的成员关系或更改用户定义的服务器角色的名称。 |
DROP SERVER ROLE (Transact-SQL) | Command | 删除用户定义的服务器角色。 |
sp_addsrvrolemember (Transact-SQL) | Command | 将登录名添加为某个服务器级角色的成员。 已弃用。 应改用 ALTER SERVER ROLE 。 |
sp_dropsrvrolemember (Transact-SQL) | Command | 从服务器级角色中删除 SQL Server 登录名或 Windows 用户或组。 已弃用。 应改用 ALTER SERVER ROLE 。 |