7

だから私は、従業員の一連の統計を追跡する社内用のウェブサイトを持っています。これらの 1 つは、レポートが欠落しているかどうかです。まだレポートがないアイテムのリストは数日ごとにしか更新されず、これらのレポートには 3 日間の猶予期間があるため、アイテムがレポートの欠落として記録された日付 (releaseDt) をデータベースが最後に更新された時刻 (@lastupdate)。このようにして、レポート データベースが更新されていなくても、レポートが完成している場合、Web サイトはレポートを見逃したとして誰かを非難することはありません。

SQL コードは管理者レベルの権限で問題なく動作しますが、明らかな理由から、ASP.NET アカウントにサーバー管理者レベルを許可していません。

ASP.NET C# コードがログインに使用する SQL アカウントを設定しました。その他すべての権限は問題ありません。(使用する特定のデータベースに対する読み取りアクセスのみ。) この特定の動的管理ビューを読み取るためのアクセス権を得るために、何にアクセス権を付与すればよいかわかりません。

Management Studio またはGRANTSQL ステートメントを使用した提案をいただければ幸いです。

これには、問題のビューに関する関連情報があるようです:

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
4

1 に答える 1

13

SELECTこれは、サーバー スコープの DMV のポリシーによって禁止されているため、DMV に付与することはできません。

GRANT SELECT ON sys.dm_db_index_usage_stats TO peon;

結果:

メッセージ 4629、レベル 16、状態 10、行 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 アカウントの資格情報を使用してサーバーにハッキングする方法を見つけたとしても、サーバーの状態を確認することしかできず、何も変更できないため、それほど心配する必要はありません。

于 2012-07-13T15:58:12.897 に答える