权限访问sys.dm_db_index_usage_stats(Permission to acce

2019-07-30 10:12发布

所以,我对于内部使用一个网站,跟踪员工一堆统计的。 其中之一是他们是否缺少任何报告。 由于没有报告,但只有得到每隔几天更新,并且对这些报道3天的宽限期的项目清单,我比较,该项目被记录为失踪的报告日期(releaseDt)最后一次数据库更新(@lastupdate)。 这样一来,如果报告数据库没有更新,但该报告完成后,该网站是不是ratting有人出来失踪的报告。

在SQL代码工作正常使用管理员级别的privledges,但显而易见的原因,我不会让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

Answer 1:

您不能授予SELECT上的DMV,因为这是由政策阻止了服务器范围的DMV:

GRANT SELECT ON sys.dm_db_index_usage_stats TO peon;

结果是:

消息4629,级别16,状态10,第1行
在服务器作用域目录视图或系统存储过程或扩展存储过程可以将权限授予仅在当前数据库是主人。

在你引用的BOL页面告诉你,你需要授予VIEW SERVER STATE 。 你会将此从主登录:

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帐户凭据你的服务器,所有他们能做的就是服务器的状态,他们不能改变任何东西。



文章来源: Permission to access sys.dm_db_index_usage_stats