访问sys.dm_db_index_usage_stats的权限

syl*_*yre 6 sql sql-server-2008

所以我有一个内部使用的网站,它跟踪员工的一堆统计数据.其中之一是他们是否缺少任何报告.由于没有报告的项目列表每隔几天才会更新,并且这些报告有3天的宽限期,我将该项目记录为缺少报告的日期(releaseDt)与上次更新数据库(@lastupdate).这样,如果报告数据库尚未更新但报告已完成,则该网站不会因错过报告而让某人失意.

SQL代码可以正常使用管理员级别的权限,但出于显而易见的原因,我不会让ASP.NET帐户具有服务器管理员级别.

我已经设置了一个ASP.NET C#代码用于登录的SQL帐户,其他所有权限都很好.(仅对其使用的特定数据库进行读访问.)我无法弄清楚要授予其访问权限,以便有权访问此特定的动态管理视图.

非常感谢使用Management Studio或使用GRANTSQL语句的建议.

这似乎包含有关视图的相关信息:

sys.dm_db_index_usage_stats(Transact-SQL)

DECLARE @lastupdate datetime
     SELECT @lastupdate = last_user_update from sys.dm_db_index_usage_stats
     WHERE OBJECT_ID = OBJECT_ID('MissingReport')

SELECT 
    COALESCE(Creator, 'Total') AS 'Creator',
    COUNT(*) AS Number, 
    '$' + CONVERT(varchar(32), SUM(Cost), 1) AS 'Cost' 
    FROM MissingReport 
    WHERE NOT( 
        [bunch of conditions that make something exempt from needing a report]
        OR
        (
            DATEDIFF(day,ReleaseDt,@lastupdate) <= 3
        )
    )
    GROUP BY Creator WITH ROLLUP
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 12

您无法授予SELECTDMV,因为服务器范围的DMV的策略阻止了这一点:

GRANT SELECT ON sys.dm_db_index_usage_stats TO peon;
Run Code Online (Sandbox Code Playgroud)

结果是:

消息4629,级别16,状态10,行1
服务器作用域目录视图或系统存储过程或扩展存储过程的权限只有在当前数据库是主数据库时才能授予.

您引用BOL页面告诉您需要授予VIEW SERVER STATE.您可以将此应用于来自master的登录:

USE master;
GO
GRANT VIEW SERVER STATE TO peon;
-- if it's a Windows login then:
GRANT VIEW SERVER STATE TO [Domain\peon];
Run Code Online (Sandbox Code Playgroud)

但是每个数据库都没有办法做到这一点.并不是说您应该关心所有这些,因为即使有人能够弄清楚如何使用ASP.NET帐户凭据侵入您的服务器,他们所能做的就是查看服务器状态,他们无法改变任何内容.