DENY 系统对象权限 (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

拒绝对系统对象(例如,存储过程、扩展存储过程、函数以及视图)的权限。

Transact-SQL 语法约定

语法

DENY { SELECT | EXECUTE } ON [ sys.]system_object TO principal   

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

[ sys.]
只有在引用目录视图和动态管理视图时才需要 sys 限定符

system_object
指定要对其拒绝权限的对象。

principal
指定要从中撤消权限的主体。

注解

可使用该语句拒绝对 SQL Server 安装的特定存储过程、扩展存储过程、表值函数、标量函数、视图、目录视图、兼容性视图、INFORMATION_SCHEMA 视图、动态管理视图以及系统表的权限。 每个系统对象都作为唯一的一条记录存在于资源数据库 (mssqlsystemresource) 中。 该资源数据库为只读。 指向对象的链接作为各数据库的 sys 架构中的一条记录显示

默认名称解析将解析资源数据库的非限定过程名称。 因此,只有在指定目录视图和动态管理视图时,才需要 sys 限定符。

注意

拒绝对系统对象的权限会导致依赖这些权限的应用程序失败。 SQL Server Management Studio 使用目录视图,并且在更改了对目录视图的默认权限之后可能无法发挥预期的作用。

不支持拒绝对触发器以及对系统对象列的权限。

在 SQL Server 升级期间,对系统对象的权限将予以保留。

sys.system_objects 目录视图中可以查看系统对象。 在 master 数据库中的 sys.database_permissions 目录视图中可以查看对系统对象的权限。

下面的查询将返回有关系统对象的权限的信息:

SELECT * FROM master.sys.database_permissions AS dp   
    JOIN sys.system_objects AS so  
    ON dp.major_id = so.object_id  
    WHERE dp.class = 1 AND so.parent_object_id = 0 ;  
GO  

权限

需要 CONTROL SERVER 权限。

示例

下面的示例向 EXECUTE 拒绝了对 xp_cmdshellpublic 权限。

DENY EXECUTE ON sys.xp_cmdshell TO public;  
GO  

另请参阅

Transact-SQL 语法约定
sys.database_permissions (Transact-SQL)
GRANT 系统对象权限 (Transact-SQL)
REVOKE 系统对象权限 (Transact-SQL)