授予服务器的权限。
语法
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 SESECUREABLES 或 VIEW 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)