GRANT 系统对象权限 (Transact-SQL)
适用于: SQL Server Azure SQL 托管实例
授予对系统对象(例如,系统存储过程、扩展存储过程、函数以及视图)的权限。
语法
GRANT { SELECT | EXECUTE } ON [ sys. ] system_object TO principal
[ ; ]
参数
[ sys. ]
仅当引用目录视图和动态管理视图时,才需要 sys 限定符。
system_object
指定要对其授予权限的对象。
principal
指定要向其授予权限的主体。
注解
此语句可用于授予对某些存储过程、扩展存储过程、表值函数、标量函数、视图、目录视图、兼容性视图、 INFORMATION_SCHEMA
视图、动态管理视图和 SQL Server 安装的系统表的权限。 上述每个系统对象都作为服务器的资源数据库 (mssqlsystemresource) 中的唯一记录而存在。 该资源数据库为只读。 指向对象的链接作为各数据库的 sys 架构中的一条记录显示。 可以授予、拒绝和撤消执行或选择系统对象的权限。
授予执行或选择对象的权限不一定传达使用该对象所需的所有权限。 大多数对象执行需要额外权限的操作。 例如,授予权限的用户EXECUTE
无法创建链接服务器,除非该用户也是 sysadmin 固定服务器角色的成员。sp_addlinkedserver
默认名称解析将解析资源数据库的非限定过程名称。 因此,仅当指定目录视图和动态管理视图时,才需要 sys 限定符。
不支持授予对触发器和系统对象的列的权限。
在升级 SQL Server 期间保留对系统对象的权限。
你必须在 master
数据库中授予权限,并且你向其授予权限的主体必须是数据库中的用户 master
。 也就是说,如果它们是服务器级权限,则不能将其授予服务器主体,而只能授予数据库主体。
在 sys.system_objects 目录视图中可以查看系统对象。 在 master
数据库中的 sys.database_permissions 目录视图中可以查看对系统对象的权限。
下面的查询将返回有关系统对象的权限的信息:
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 权限。
示例
A. 授予对视图的 SELECT 权限
以下示例授予 SQL Server 登录名 Sylvester1
权限,以选择列出 SQL Server 登录名的视图。 然后,该示例授予查看用户不拥有的 SQL Server 登录名上的元数据所需的额外权限。
USE master;
GO
GRANT SELECT ON sys.sql_logins TO Sylvester1;
GRANT VIEW SERVER STATE to Sylvester1;
GO
B. 授予对扩展存储过程的 EXECUTE 权限
以下示例向 EXECUTE
授予了对 xp_readmail
的 Sylvester1
权限。
USE master;
GO
GRANT EXECUTE ON xp_readmail TO Sylvester1;
GO