SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

securityadmin ロール以外のメンバーで ERRORLOG を参照する

leave a comment

SQL Server のエラーや稼働状況のログは ERRORLOG に記録されます。
通常、ERRORLOG は SSMS から開くことが多いかと思いますが、この場合 [securityadmin] のロールのメンバーである必要があります。
image

SSMS から securityadmin 以外のロールのメンバーで ERRORLOG を確認するための方法をまとめてみたいと思います。

SSMS から ERRORLOG を開く場合、[sp_enumerrorlogs] というストアドプロシージャが実行されています。
このストアドプロシージャの内容を確認してみます。

sp_helptext 'sp_enumerrorlogs'

 

image

SSMS から表示しようとした場合は、サーバーロールが securityadmin のメンバーであることがハードコードされています。

SSMS から ERRORLOG を表示しようとした場合は、2 つのステップで処理が行われています。

最初に [sys.xp_enumerrorlogs] を実行して、ERRORLOG の一覧を取得します。

sys.xp_enumerrorlogs

image

次に、[sys.xp_readerrorlog] を実行して、先ほどのエラーログの一覧のどのログを取得するかを設定します。

# 引数を省略した場合は最新 (0) が表示されます。

sys.xp_readerrorlog

image

この二つの拡張ストアドプロシージャの実行権限があれば、SSMS の GUI ベースではなくクエリベースであれば、securityadmin ロールのメンバー以外でも ERRORLOG を表示することが可能となります。

user という master データベースにマッピングをしたログインのユーザーに権限を付与する場合は以下のようになります。

# public に付与をすれば全ユーザーが使用可能になるはずです。

use [master]
GO
GRANT EXECUTE ON [sys].[xp_enumerrorlogs] TO [user]
GRANT EXECUTE ON [sys].[xp_readerrorlog] TO [user]
GO

こうすることで securityadmin ロールのメンバー以外でも ERRORLOG が表示できるようになります。

EXEC [sys].[xp_enumerrorlogs]
EXEC [sys].[xp_readerrorlog]

image

ユーザーに強い権限を与えたくはないが、サーバーの状態を確認させたいときなどは ERRORLOG の参照権限を付与するとよいかと思います。

Share

Written by Masayuki.Ozawa

3月 16th, 2014 at 11:45 pm

Posted in SQL Server

Tagged with

Leave a Reply