2012-07-13 138 views
5

因此,我有一個內部使用的網站,它追蹤員工的一堆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 
+2

只是爲了迂迴清晰,這是一個'動態管理視圖',而不是'系統表'。 – 2012-07-13 15:53:13

+0

更正了這一點。 – sylverfyre 2012-07-13 15:58:30

+0

當然,我認爲代碼或背景故事也不相關 - 問題可能是一個或兩個班輪,而不會失去任何意義。 – 2012-07-13 16:00:10

回答

11

您不能授予上的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帳戶憑據破解你的服務器,他們所能做的只是,看到服務器狀態,它們不能改變任何東西。

+0

聽起來是對的,試過了,但是我的管理員登錄名(具有'sysadmin'服務器角色 - 只需重新檢查 - 給出錯誤'授予者沒有GRANT權限。' – sylverfyre 2012-07-13 16:04:07

+1

@sylverfyre這會產生什麼結果:'SELECT permission_name FROM sys.fn_my_permissions (NULL,N'server');'(不要在評論中列出它們,但是有多少行,並且是像'ALTER ANY LOGIN'這樣的重要事項?) – 2012-07-13 16:06:39

+0

是的,沒有'ALTER ANY LOGIN' Odd ,因爲當我在管理工作室看到相應的菜單時,我有'ALTER ANY LOGIN'以及所有其他的'ALTER ANY CREDENTIAL'等。 – sylverfyre 2012-07-13 16:09:49