2012-07-13 24 views
5

Bu yüzden, çalışanlar için bir grup istatistikleri izleyen dahili kullanım için bir web sitem var. Bunlardan biri, herhangi bir raporun eksik olup olmadığı. Raporları olmayan öğelerin listesi her iki günde bir güncellendiğinden ve bu raporlarda 3 günlük bir süre geçmediğinden, Tarih (releaseDt) öğesinin öğeyi bir raporun eksik olarak kaydedildiği ile karşılaştırıyorum veritabanının son güncellendiği zaman (@lastupdate). Bu şekilde, raporlar veritabanı güncellenmediyse ancak rapor tamamlanmışsa, web sitesi bir raporu kaçırmak için birilerini dışarı atmaz.sys.dm_db_index_usage_stats iznine erişim izni

SQL kodu, yönetici düzeyi özel durumlarıyla iyi çalışır, ancak açık nedenlerle ASP.NET hesabının sunucu yönetici düzeyine sahip olmasına izin vermem.

ASP.NET C# kodunun oturum açmak için kullandığı bir SQL hesabı oluşturdum ve her şeyin izinleri iyi. (Sadece kullandığı belirli veritabanları için okuma erişimini okuyun.) Bu özel dinamik yönetim görünümünü okumak için erişime sahip olabilmek için erişime ne verileceğini anlayamıyorum.

Ya Management Studio'yu kullanarak veya GRANT SQL deyimini kullanarak önerilerinize minnettar olurum. Bu sunucusu kapsamlı DMV'leri için politika tarafından engellenir,

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

Sadece pedantik açıklık için, bu bir 'sistem tablosu' değil,' dinamik yönetim görünümü'dür. –

+0

Düzeltildi. – sylverfyre

+0

Elbette, kodun ya da arka planın da geçerli olduğunu sanmıyorum - soru bir anlam kaybetmeden bir ya da iki astarlı olabilir. –

cevap

11

Sen DMV'leri üzerinde SELECT veremez:

Bu

söz konusu görünümdeki bilgilerle ilgili gibi görünüyor

GRANT SELECT ON sys.dm_db_index_usage_stats TO peon; 

Sonuçlar içinde:

Msg 4629, Düzey 16, Durum 10, Satır 1
Sunucu kapsamlı katalog görünümleri veya sistem saklı yordamları veya genişletilmiş saklı yordamları izinleri yalnızca geçerli veritabanı ana olduğunda kullanılabilir.

BOL page you referenced, VIEW SERVER STATE numaralı telefonu vermeniz gerektiğini bildirir. Bunu, ana girişten şu uygulamayla uygularsınız:

Veritabanı başına bunu yapmanın bir yolu yoktur. Birisi sizin sunucuya ASP.NET hesap kimlik bilgileriyle nasıl hacklenebileceğini anlayabildiyse bile, tüm yapabilecekleriniz sunucu durumuna sahip olduklarından, hiçbir şeyi değiştiremezler.

+0

Sesler, bunu denedi, ama benim yönetici giriş ('sysadmin' sunucu rolü var - sadece doublechecked - hata veriyor" Grantor GRANT iznine sahip değil. " – sylverfyre

+1

@sylverfyre bu verim ne veriyor:' SELECT allow_name FROM sys.fn_my_permissions (NULL, N'server '); '(Bir yorumda onları listeleme, ama kaç satır var, ve" HERHANGİ BİR GÜNLÜK "eksik gibi önemli şeyler nelerdir?) –

+0

Evet, hayır" ALTER HERHANGİ BİR GİRİŞ " Çünkü yönetim stüdyosunda ilgili menüye baktığımda, 'ALTER HERHANGİ BİR GİRİŞİM' yanı sıra 'ALTER HERHANGİ BİR ÇAĞRI' gibi tüm diğerleri var. – sylverfyre

İlgili konular