授予从系统表中选择的权限


14

我有一个数据库Microsoft SQL Server 2008 r2。定义了一个名为marie的用户,该用户可以访问主数据库上的表。这很好。现在,我希望marie能够执行以下查询:

SELECT resource_type,spid,login_time,status,hostname,program_name,nt_domain,nt_username,loginame
  FROM sys.dm_tran_locks dl
  JOIN sys.sysprocesses sp on dl.request_session_id = sp.spid

涉及的表是主表;如何授予玛丽向他们阅读的权限?我已经尝试过以dbo执行以下命令:

GRANT ALL on sys.dm_tran_locks TO marie
GRANT ALL on sys.sysprocesses TO marie

不过,当玛丽尝试执行上述查询时,错误是:

Msg 297, Level 16, State 1, Line 1
The user does not have permission to perform this action.

我究竟做错了什么?


另外,您应该使用sys.dm_exec_requestssys.dm_exec_sessionssysprocesses是向后兼容的视图,并且有时会从产品中删除。
亚伦·伯特兰

Answers:


25

系统视图需要实例化,因此需要稍微提升的状态才能查看。您需要这样做GRANT VIEW SERVER STATE

GRANT VIEW SERVER STATE TO marie;


@a_horse_with_no_name谢谢,一直在寻找那个。:)链接添加到答案。
Mike Fal

Azure SQL数据库不支持此功能-如何在此处实现等效功能?
2016年

1
尝试GRANT VIEW DATABASE STATE
Mike Fal

sys确实可以仅通过单个数据库的选择权限从中选择某些表,例如sys.indexes
约翰·
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.