[英]Why all index objects not found in sys.dm_db_index_usage_stats
[英]Permission to access sys.dm_db_index_usage_stats
所以我有一個內部使用的網站,它跟蹤員工的一堆統計數據。 其中之一是他們是否遺漏了任何報告。 由於沒有報告的項目列表每隔幾天才會更新,並且這些報告有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
您無法在DMV上授予SELECT
,因為服務器范圍的DMV的策略阻止了這一點:
GRANT SELECT ON sys.dm_db_index_usage_stats TO peon;
結果是:
Msg 4629,Level 16,State 10,Line 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];
但是每個數據庫都沒有辦法做到這一點。 並不是說您應該關心所有這些,因為即使有人能夠弄清楚如何使用ASP.NET帳戶憑據侵入您的服務器,他們只能看到服務器狀態,他們無法改變任何東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.