DENY 服务器权限 (Transact-SQL)
拒绝服务器的权限。
适用范围:SQL Server(SQL Server 2008 到当前版本)。 |
语法
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
指示要拒绝的权限也会被此主体授予该权限的其他主体拒绝。TO <server_principal>
指定对其拒绝权限的主体。AS <grantor_principal>
指定执行此查询的主体要从哪个主体派生其拒绝该权限的权利。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 目录视图中查看有关服务器角色成员身份的信息。
服务器是权限层次结构的最高级别。 下表列出了可拒绝的对服务器最为具体的限定权限。
服务器权限 |
服务器权限隐含的权限 |
---|---|
ADMINISTER BULK OPERATIONS |
CONTROL SERVER |
ALTER ANY AVAILABILITY GROUP 适用范围:SQL Server(SQL Server 2012 到当前版本)。 |
CONTROL SERVER |
ALTER ANY CONNECTION |
CONTROL SERVER |
ALTER ANY CREDENTIAL |
CONTROL SERVER |
ALTER ANY DATABASE |
CONTROL SERVER |
ALTER ANY ENDPOINT |
CONTROL SERVER |
ALTER ANY EVENT NOTIFICATION |
CONTROL SERVER |
ALTER ANY EVENT SESSION |
CONTROL SERVER |
ALTER ANY LINKED SERVER |
CONTROL SERVER |
ALTER ANY LOGIN |
CONTROL SERVER |
ALTER ANY SERVER AUDIT |
CONTROL SERVER |
ALTER ANY SERVER ROLE 适用范围:SQL Server(SQL Server 2012 到当前版本)。 |
CONTROL SERVER |
ALTER RESOURCES |
CONTROL SERVER |
ALTER SERVER STATE |
CONTROL SERVER |
ALTER SETTINGS |
CONTROL SERVER |
ALTER TRACE |
CONTROL SERVER |
AUTHENTICATE SERVER |
CONTROL SERVER |
CONNECT ANY DATABASE 适用范围:SQL Server(SQL Server 2014 到当前版本)。 |
CONTROL SERVER |
CONNECT SQL |
CONTROL SERVER |
CONTROL SERVER |
CONTROL SERVER |
CREATE ANY DATABASE |
ALTER ANY DATABASE |
CREATE AVAILABILITY GROUP 适用范围:SQL Server(SQL Server 2012 到当前版本)。 |
ALTER ANY AVAILABILITY GROUP |
CREATE DDL EVENT NOTIFICATION |
ALTER ANY EVENT NOTIFICATION |
CREATE ENDPOINT |
ALTER ANY ENDPOINT |
CREATE SERVER ROLE 适用范围:SQL Server(SQL Server 2012 到当前版本)。 |
ALTER ANY SERVER ROLE |
CREATE TRACE EVENT NOTIFICATION |
ALTER ANY EVENT NOTIFICATION |
EXTERNAL ACCESS ASSEMBLY |
CONTROL SERVER |
IMPERSONATE ANY LOGIN 适用范围:SQL Server(SQL Server 2014 到当前版本)。 |
CONTROL SERVER |
SELECT ALL USER SECURABLES 适用范围:SQL Server(SQL Server 2014 到当前版本)。 |
CONTROL SERVER |
SHUTDOWN |
CONTROL SERVER |
UNSAFE ASSEMBLY |
CONTROL SERVER |
VIEW ANY DATABASE |
VIEW ANY DEFINITION |
VIEW ANY DEFINITION |
CONTROL SERVER |
VIEW SERVER STATE |
ALTER SERVER STATE |
备注
SQL Server 2014 中添加了以下三个服务器权限。
CONNECT ANY DATABASE 权限
将 CONNECT ANY DATABASE 授予某个登录名,该登录名必须连接到当前存在的所有数据库和将来可能创建的任何新数据库。 不要在任何数据库中授予超过连接的任何权限。 与 SELECT ALL USER SECURABLES 或 VIEW SERVER STATE 结合使用,可以允许审核进程查看所有数据或 SQL Server 实例上的所有数据库状态。IMPERSONATE ANY LOGIN 权限
授予后,当连接到数据库时,允许中间层进程模拟连接到它的客户端帐户。 被拒绝时,高特权的登录名可以阻止模拟其他登录名。 例如,具有 CONTROL SERVER 权限的登录名可以阻止模拟其他登录名。SELECT ALL USER SECURABLES 权限
授予后,作者等登录名可以查看用户可连接到的所有数据库中的数据。 被拒绝时,阻止访问对象,除非这些对象处于 sys 架构中。
权限
要求具有 CONTROL SERVER 权限或者安全对象的所有权。 如果使用 AS 子句,则指定的主体必须拥有要对其拒绝权限的安全对象。
示例
A.对 SQL Server 登录名和该登录名重新授予 CONNECT SQL 权限的主体拒绝该权限
以下示例对 SQL Server 登录名 Annika 以及该登录名授予 CONNECT SQL 权限的主体拒绝该权限。
USE master;
DENY CONNECT SQL TO Annika CASCADE;
GO
B.使用 AS 选项对 SQL Server 登录名拒绝 CREATE ENDPOINT 权限
以下示例对用户 ArifS 拒绝 CREATE ENDPOINT 权限。 该示例使用 AS 选项指定 MandarP 作为执行主体从中派生执行权限的主体。
USE master;
DENY CREATE ENDPOINT TO ArifS AS MandarP;
GO
请参阅
参考
sys.fn_builtin_permissions (Transact-SQL)
sys.fn_my_permissions (Transact-SQL)
HAS_PERMS_BY_NAME (Transact-SQL)