访问sys.dm_db_index_usage_stats的权限

时间:2012-07-13 15:49:12

标签: sql sql-server-2008

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

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

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

非常感谢使用Management Studio或使用GRANT SQL语句的建议。

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

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

1 个答案:

答案 0 :(得分:12)

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

GRANT SELECT ON sys.dm_db_index_usage_stats TO peon;

结果:

  

Msg 4629,Level 16,State 10,Line 1
  仅当当前数据库是主数据库时,才能授予服务器作用域目录视图或系统存储过程或扩展存储过程的权限。

BOL page you referenced告诉您需要授予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];

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