DENY 对象权限 (Transact-SQL)
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Microsoft Fabric SQL 数据库
拒绝对安全对象的 OBJECT 类成员授予的权限。 OBJECT 类的成员包括:表、视图、表值函数、存储过程、扩展存储过程、标量函数、聚合函数、服务队列以及同义词。
语法
DENY <permission> [ ,...n ] ON
[ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
TO <database_principal> [ ,...n ]
[ CASCADE ]
[ AS <database_principal> ]
<permission> ::=
ALL [ PRIVILEGES ] | permission [ ( column [ ,...n ] ) ]
<database_principal> ::=
Database_user
| Database_role
| Application_role
| Database_user_mapped_to_Windows_User
| Database_user_mapped_to_Windows_Group
| Database_user_mapped_to_certificate
| Database_user_mapped_to_asymmetric_key
| Database_user_with_no_login
参数
permission
指定可对架构包含的对象拒绝的权限。 有关权限的列表,请参阅本主题后面的“备注”部分。
ALL
拒绝 ALL 不会拒绝所有可能的权限。 拒绝 ALL 等同于拒绝适用于指定对象的所有 ANSI-92 权限。 对于不同权限,ALL 的含义有所不同:
- 标量值函数权限:EXECUTE、REFERENCES。
- 表值函数权限:DELETE、INSERT、REFERENCES、SELECT、UPDATE。
- 存储过程权限:EXECUTE。
- 表权限:DELETE、INSERT、REFERENCES、SELECT、UPDATE。
- 视图权限:DELETE、INSERT、REFERENCES、SELECT、UPDATE。
PRIVILEGES
包含此参数以符合 ANSI-92 标准。 请不要更改 ALL 的行为。
column
指定表、视图或表值函数中要对其拒绝权限的列的名称。 需要使用括号 ( ) 。 仅可以拒绝对列的 SELECT、REFERENCES 和 UPDATE 权限。 可以在权限子句中或在安全对象名之后指定 column。
注意
表级 DENY 并不优先于列级 GRANT。 保留了权限层次结构中的这种不一致性以保持向后兼容。 在 SQL Server 中,如果服务器配置为与启用了符合通用准则的服务器配置一起运行,则此行为会有所不同。 但是,这通常只能谨慎使用,不能用作一般做法。
ON [ OBJECT :: ] [ schema_name ] . object_name
指定要对其拒绝权限的对象。 如果指定了 schema_name,则 OBJECT 短语是可选的。 如果使用了 OBJECT 短语,则需要使用作用域限定符 ( :: )。 如果未指定 schema_name,则使用默认架构。 如果指定了 schema_name,则需要使用架构作用域限定符 (.)。
TO <database_principal>
指定要对其拒绝权限的主体。
CASCADE
指示要拒绝的权限也会被对此主体授予该权限的其他主体拒绝。
AS <database_principal>
指定一个主体,执行该查询的主体从该主体获得拒绝授予该权限的权利。
Database_user
指定数据库用户。
Database_role
指定数据库角色。
Application_role
指定应用程序角色。
Database_user_mapped_to_Windows_User
指定映射到 Windows 用户的数据库用户。
Database_user_mapped_to_Windows_Group
指定映射到 Windows 组的数据库用户。
Database_user_mapped_to_certificate
指定映射到证书的数据库用户。
Database_user_mapped_to_asymmetric_key
指定映射到非对称密钥的数据库用户。
Database_user_with_no_login
指定无相应服务器级主体的数据库用户。
备注
可以在各种目录视图中查看对象的有关信息。 有关详细信息,请参阅对象目录视图 (Transact-SQL)。
对象是一个架构级的安全对象,包含于权限层次结构中作为其父级的架构中。 下表列出了可拒绝的对对象最为具体的限定权限,以及隐含这些权限的更为通用的权限。
对象权限 | 对象权限隐含的权限 | 架构权限隐含的权限 |
---|---|---|
ALTER | CONTROL | ALTER |
CONTROL | CONTROL | CONTROL |
DELETE | CONTROL | DELETE |
EXECUTE | CONTROL | EXECUTE |
INSERT | CONTROL | INSERT |
RECEIVE | CONTROL | CONTROL |
REFERENCES | CONTROL | REFERENCES |
SELECT | RECEIVE | SELECT |
TAKE OWNERSHIP | CONTROL | CONTROL |
UPDATE | CONTROL | UPDATE |
VIEW CHANGE TRACKING | CONTROL | VIEW CHANGE TRACKING |
VIEW DEFINITION | CONTROL | VIEW DEFINITION |
权限
需要对对象的 CONTROL 权限。
如果使用 AS 子句,则指定的主体必须拥有要对其拒绝权限的对象。
示例
以下示例使用 AdventureWorks 数据库。
A. 拒绝对表的 SELECT 权限
以下示例拒绝用户 RosaQdM
对表 Person.Address
的 SELECT
权限。
DENY SELECT ON OBJECT::Person.Address TO RosaQdM;
GO
B. 拒绝对存储过程的 EXECUTE 权限
以下示例拒绝名为 EXECUTE
的应用程序角色对存储过程 HumanResources.uspUpdateEmployeeHireInfo
的 Recruiting11
权限。
DENY EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeHireInfo
TO Recruiting11;
GO
C. 使用 CASCADE 拒绝对视图的 REFERENCES 权限
以下示例使用 REFERENCES
,拒绝用户 BusinessEntityID
对视图 HumanResources.vEmployee
中列 Wanida
的 CASCADE
权限。
DENY REFERENCES (BusinessEntityID) ON OBJECT::HumanResources.vEmployee
TO Wanida CASCADE;
GO
另请参阅
GRANT 对象权限 (Transact-SQL)
REVOKE 对象权限 (Transact-SQL)
对象目录视图 (Transact-SQL)
权限(数据库引擎)
主体(数据库引擎)
安全对象
sys.fn_builtin_permissions (Transact-SQL)
HAS_PERMS_BY_NAME (Transact-SQL)
sys.fn_my_permissions (Transact-SQL)