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

car*_*reo 16 sql-server

我有一个数据库 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
Run Code Online (Sandbox Code Playgroud)

涉及的表是主表;我如何允许玛丽阅读它们?我已经尝试以 dbo 身份执行以下操作:

GRANT ALL on sys.dm_tran_locks TO marie
GRANT ALL on sys.sysprocesses TO marie
Run Code Online (Sandbox Code Playgroud)

尽管如此,当 marie 尝试执行上面的查询时,错误是:

Msg 297, Level 16, State 1, Line 1
The user does not have permission to perform this action.
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Mik*_*Fal 28

系统视图需要稍微提升的状态才能查看,因为它们是实例范围的。你会想要GRANT VIEW SERVER STATE

GRANT VIEW SERVER STATE TO marie;
Run Code Online (Sandbox Code Playgroud)