因此,我有一个供内部使用的网站,用于跟踪员工的大量统计数据。其中之一是他们是否遗漏了任何报告。由于还没有报告的项目列表每隔几天更新一次,并且这些报告有 3 天的宽限期,因此我将项目记录为缺少报告的日期 (releaseDt) 与上次更新数据库的时间 (@lastupdate)。这样,如果报告数据库尚未更新但报告已完成,网站就不会因错过报告而责备某人。
SQL 代码在管理员级别权限下工作得很好,但由于显而易见的原因,我不让 ASP.NET 帐户具有服务器管理员级别。
我已经设置了 ASP.NET C# 代码用来登录的 SQL 帐户,其他一切的权限都很好。 (仅对其使用的特定数据库具有读取访问权限。)我无法弄清楚要授予其访问权限才能读取此特定的动态管理视图。
希望使用 Management Studio 或使用GRANT
SQL 语句。
这似乎有有关相关视图的相关信息:
sys.dm_db_index_usage_stats (Transact-SQL) http://msdn.microsoft.com/en-us/library/ms188755.aspx
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
你不能授予SELECT
在 DMV 上,因为服务器范围的 DMV 策略阻止了这种情况:
GRANT SELECT ON sys.dm_db_index_usage_stats TO peon;
结果是:
消息 4629,16 级,状态 10,第 1 行
仅当当前数据库为主数据库时,才能授予对服务器范围目录视图、系统存储过程或扩展存储过程的权限。
The 您引用的 BOL 页面 http://msdn.microsoft.com/en-us/library/ms188755.aspx告诉你你需要授予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 帐户凭据侵入您的服务器,他们所能做的就是see服务器状态,他们无法改变任何东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)