适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
拒绝服务器的权限。
语法
DENY permission [ ,...n ]
TO <grantee_principal> [ ,...n ]
[ CASCADE ]
[ 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
指定可对服务器拒绝的权限。 有关权限的列表,请参阅本主题后面的“备注”部分。
CASCADE
指示拒绝授予指定主体该权限,同时,对该主体授予了该权限的所有其他主体,也拒绝授予该权限。 当校长有OPTION许可 GRANT 时,必须这样做。
server_principal <>
指定对其拒绝权限的主体。
正如 <grantor_principal>
指定执行此查询的主体要从哪个主体派生其拒绝该权限的权利。
使用 AS principal 子句指示:记录为权限的拒绝者的主体应为执行该语句的用户以外的主体。 例如,假设用户 Mary 是 principal_id 12,用户 Raul 是主体 15。 Mary 执行 DENY SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul; 现在sys.database_permissions表将指示拒绝语句的grantor_principal_id为 15 (Raul),即使该语句实际上是由用户 13 (Mary) 执行。
在此语句中使用 AS 并不意味着能够模拟其他用户。
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) 到 当前版本)。 |
控制服务器 |
| 更改资源 | 控制服务器 |
| 更改服务器状态 | 控制服务器 |
| 修改设置 | 控制服务器 |
| 变体痕迹 | 控制服务器 |
| 身份验证服务器 | 控制服务器 |
| 连接 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 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 架构中。
权限
要求具有 CONTROL SERVER 权限或者安全对象的所有权。 如果使用 AS 子句,则指定的主体必须拥有要对其拒绝权限的安全对象。
示例
A. 对 SQL Server 登录名和该登录名重新授予 CONNECT SQL 权限的主体拒绝该权限
以下示例对 SQL Server 登录名 CONNECT SQL 以及该登录名授予 Annika 权限的主体拒绝该权限。
USE master;
DENY CONNECT SQL TO Annika CASCADE;
GO
B. 使用 AS 选项拒绝CREATE ENDPOINT对 SQL Server 登录的权限
以下示例对用户 CREATE ENDPOINT 拒绝 ArifS 权限。 该示例使用 AS 选项指定 MandarP 作为执行主体从中派生执行权限的主体。
USE master;
DENY CREATE ENDPOINT TO ArifS AS MandarP;
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)