GRANT 服务器权限(Transact-SQL)

适用于:SQL ServerAzure SQL 托管实例

授予服务器的权限。

Transact-SQL 语法约定

语法

  
GRANT permission [ ,...n ]   
    TO <grantee_principal> [ ,...n ] [ WITH GRANT OPTION ]  
    [ AS <grantor_principal> ]  
  
<grantee_principal> ::= SQL_Server_login   
    | SQL_Server_login_mapped_to_Windows_login  
    | SQL_Server_login_mapped_to_Windows_group  
    | SQL_Server_login_mapped_to_certificate  
    | SQL_Server_login_mapped_to_asymmetric_key  
    | server_role  
  
<grantor_principal> ::= SQL_Server_login   
    | SQL_Server_login_mapped_to_Windows_login  
    | SQL_Server_login_mapped_to_Windows_group  
    | SQL_Server_login_mapped_to_certificate  
    | SQL_Server_login_mapped_to_asymmetric_key  
    | server_role  

参数

permission
指定可对服务器授予的权限。 有关权限的列表,请参阅本主题后面的“备注”部分。

TO <grantee_principal> 指定要向其授予权限的主体。

AS <grantor_principal> 指定一个主体,执行此查询的主体从该主体获得授予权限的权利。

附 GRANT 选项
指示该主体还可以向其他主体授予所指定的权限。

SQL_Server_login
指定 SQL Server 登录名。

SQL_Server_login_mapped_to_Windows_login
指定映射到 Windows 登录名的 SQL Server 登录名。

SQL_Server_login_mapped_to_Windows_group
指定映射到 Windows 组的 SQL Server 登录名。

SQL_Server_login_mapped_to_certificate
指定映射到证书的 SQL Server 登录名。

SQL_Server_login_mapped_to_asymmetric_key
指定映射到非对称密钥的 SQL Server 登录名。

server_role
指定用户定义的服务器角色。

备注

只有在当前数据库为 master 时,才可授予其服务器作用域内的权限。

可以在 sys.server_permissions 目录视图中查看有关服务器权限的信息;在 sys.server_principals 目录视图中查看有关服务器主体的信息。 以及在 sys.server_role_members 目录视图中查看有关服务器角色成员身份的信息。

服务器是权限层次结构的最高级别。 下表列出了可授予的对服务器最为具体的限定权限。

服务器权限 服务器权限隐含的权限
管理批量操作 控制服务器
更改任意 AVAILABILITY GROUP

适用范围: SQL Server (SQL Server 2012 (11.x) 到 当前版本)。
控制服务器
更改任何连接 控制服务器
更改任意 CREDENTIAL 控制服务器
更改任意 DATABASE 控制服务器
更改任意 ENDPOINT 控制服务器
更改任意 EVENT NOTIFICATION 控制服务器
更改任意 EVENT SESSION 控制服务器
更改任何链接服务器 控制服务器
更改任意 LOGIN 控制服务器
更改任意 SERVER AUDIT 控制服务器
更改任意 SERVER ROLE

适用范围: SQL Server (SQL Server 2012 (11.x) 到 当前版本)。
控制服务器
更改资源 控制服务器
更改服务器状态 控制服务器
修改设置 控制服务器
ALTER 追踪 控制服务器
身份验证服务器 控制服务器
连接 ANY DATABASE

适用范围: SQL Server (SQL Server 2014 (12.x) 到 当前版本)。
控制服务器
连接 SQL 控制服务器
控制服务器 控制服务器
创造任何一个 DATABASE 更改任意 DATABASE
CREATE AVAILABILITY GROUP

适用范围: SQL Server (SQL Server 2012 (11.x) 到 当前版本)。
更改任意 AVAILABILITY GROUP
创建DDL EVENT NOTIFICATION 更改任意 EVENT NOTIFICATION
CREATE ENDPOINT 更改任意 ENDPOINT
CREATE LOGIN

适用于:SQL Server 2022 (16.x) 及更高版本。
更改任意 LOGIN
CREATE SERVER ROLE

适用范围: SQL Server (SQL Server 2012 (11.x) 到 当前版本)。
更改任意 SERVER ROLE
创建追踪 EVENT NOTIFICATION 更改任意 EVENT NOTIFICATION
外部访问 ASSEMBLY 控制服务器
模拟 ANY LOGIN

适用范围: SQL Server (SQL Server 2014 (12.x) 到 当前版本)。
控制服务器
选择所有 USER 安全对象

适用范围: SQL Server (SQL Server 2014 (12.x) 到 当前版本)。
控制服务器
SHUTDOWN 控制服务器
安全 ASSEMBLY 控制服务器
VIEW 任何 DATABASE VIEW 任何定义
VIEW 任何定义 控制服务器
VIEW 服务器状态 更改服务器状态

SQL Server 2014 (12.x) 中添加了以下三个服务器权限。

连接任意 DATABASE 许可
授予 CONNECT ANY DATABASE 登录权限,该登录必须连接所有现有数据库及未来可能新建的数据库。 不要在任何数据库中授予超过连接的任何权限。 结合 SELECT ALL USER SESECUREABLESVIEW SERVER STATE,允许审计过程查看 SQL Server 实例上的所有数据或数据库状态。

冒充任何 LOGIN 许可
授予后,当连接到数据库时,允许中间层进程模拟连接到它的客户端帐户。 被拒绝时,高特权的登录名可以阻止模拟其他登录名。 例如,可通过模拟其他登录名来阻止具有 CONTROL SERVER 权限的登录名。

全部选择 USER 可担保物 许可
授予该权限后,登录名可查看所有架构级对象(如表、视图和表值函数)中的数据,这些对象驻留了用户可写的架构(除 sys 和 INFORMATION_SCHEMA 之外的所有架构),可用于创建用户对象。 此权限在用户可连接到的所有数据库中都有效。 拒绝后,该权限会阻止对所有对象的访问,除非其位于 sys 或 INFORMATION_SCHEMA 架构中。 这也会影响所涵盖对象的元数据可见性,另请参阅:元数据可见性配置

权限

授权者(或使用 AS 选项指定的主体)必须具有 OPTION 的权限本身 GRANT ,或者具有更高的权限,这意味着要授予的权限。 sysadmin 固定服务器角色成员可以授予任何权限。

示例

A. 为登录名授予权限

以下示例将 CONTROL SERVER 权限授予 SQL Server 登录名 TerryEminhizer

USE master;  
GRANT CONTROL SERVER TO TerryEminhizer;  
GO  

B. 授予有权限 GRANT 的许可

以下示例为 SQL Server 登录名 ALTER ANY EVENT NOTIFICATION 授予 JanethEsteves 权限以及为其他登录名授予该权限的权限。

USE master;  
GRANT ALTER ANY EVENT NOTIFICATION TO JanethEsteves WITH GRANT OPTION;  
GO  

C. 为服务器角色授予权限

以下示例创建名为 ITDevelopers 的服务器角色。 它向 ALTER ANY DATABASE 服务器角色授予 ITDevelopers 权限。

USE master;  
CREATE SERVER ROLE ITDevelopers ;  
GRANT ALTER ANY DATABASE TO ITDevelopers ;  
GO  

另请参阅

GRANT (Transact-SQL)
DENY (Transact-SQL)
DENY 服务器权限(Transact-SQL)
REVOKE 服务器权限(Transact-SQL)
权限层次结构(数据库引擎)
主体(数据库引擎)
权限(数据库引擎)
sys.fn_builtin_permissions(Transact-SQL)
sys.fn_my_permissions(Transact-SQL)
HAS_PERMS_BY_NAME(Transact-SQL)