权限访问sys.dm_db_index_usage_stats
因此,我有一个内部使用的网站,它追踪员工的一堆stats。其中之一是他们是否错过任何报告。由于没有报告的项目列表每两天才会更新一次,并且这些报告有3天的宽限期,所以我将项目记录为缺少报告的日期(releaseDt)与上次数据库更新(@lastupdate)。这样,如果报告数据库没有更新,但报告已完成,则该网站不会因为缺少报告而惹恼某人。权限访问sys.dm_db_index_usage_stats
的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
您不能授予上的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
。你会从主应用此登录:
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帐户凭据破解你的服务器,他们所能做的只是,看到服务器状态,它们不能改变任何东西。
听起来是对的,试过了,但是我的管理员登录名(具有'sysadmin'服务器角色 - 只需重新检查 - 给出错误'授予者没有GRANT权限。' – sylverfyre 2012-07-13 16:04:07
@sylverfyre这会产生什么结果:'SELECT permission_name FROM sys.fn_my_permissions (NULL,N'server');'(不要在评论中列出它们,但是有多少行,并且是像'ALTER ANY LOGIN'这样的重要事项?) – 2012-07-13 16:06:39
是的,没有'ALTER ANY LOGIN' Odd ,因为当我在管理工作室看到相应的菜单时,我有'ALTER ANY LOGIN'以及所有其他的'ALTER ANY CREDENTIAL'等。 – sylverfyre 2012-07-13 16:09:49
只是为了迂回清晰,这是一个'动态管理视图',而不是'系统表'。 – 2012-07-13 15:53:13
更正了这一点。 – sylverfyre 2012-07-13 15:58:30
当然,我认为代码或背景故事也不相关 - 问题可能是一个或两个班轮,而不会失去任何意义。 – 2012-07-13 16:00:10