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

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

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

Transact-SQL 语法约定

语法

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

参数

[ sys. ]

sys仅当引用目录视图和动态管理视图时,才需要限定符。

system_object

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

principal

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

注解

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

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

注意

拒绝对系统对象的权限会导致依赖于它们的应用程序失败。 如果更改目录视图的默认权限,SQL Server Management Studio 使用目录视图,可能无法按预期工作。

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

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

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

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

SELECT *
FROM master.sys.database_permissions AS dp
     INNER 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_cmdshell

DENY EXECUTE ON sys.xp_cmdshell TO PUBLIC;
GO