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

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

主题链接图标 Transact-SQL 语法约定

语法

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

参数

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

  • system_object
    指定要对其授予权限的对象。

  • principal
    指定要向其授予权限的主体。

注释

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

授予执行或选择对象的权限不一定会提供使用该对象所需的所有权限。 多数对象执行的操作都需要其他权限。 例如,被授予对 sp_addlinkedserver 的 EXECUTE 权限的用户无法创建链接服务器,除非该用户也是 sysadmin 固定服务器角色的成员。

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

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

在 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 权限。

示例

A.授予对视图的 SELECT 权限

以下示例授予 SQL Server 登录名 Sylvester1 权限,以选择列出 SQL Server 登录名的视图。 然后,本例授予查看不属于该用户的 SQL Server 登录名的元数据所需的其他权限。

USE AdventureWorks2012;
GRANT SELECT ON sys.sql_logins TO Sylvester1;
GRANT VIEW SERVER STATE to Sylvester1;
GO

B.授予对扩展存储过程的 EXECUTE 权限

以下示例向 Sylvester1 授予了对 xp_readmail 的 EXECUTE 权限。

GRANT EXECUTE ON xp_readmail TO Sylvester1;
GO

请参阅

参考

sys.system_objects (Transact-SQL)

sys.database_permissions (Transact-SQL)

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

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