SQL Server のエラーや稼働状況のログは ERRORLOG に記録されます。
通常、ERRORLOG は SSMS から開くことが多いかと思いますが、この場合 [securityadmin] のロールのメンバーである必要があります。
SSMS から securityadmin 以外のロールのメンバーで ERRORLOG を確認するための方法をまとめてみたいと思います。
SSMS から ERRORLOG を開く場合、[sp_enumerrorlogs] というストアドプロシージャが実行されています。
このストアドプロシージャの内容を確認してみます。
sp_helptext 'sp_enumerrorlogs'
SSMS から表示しようとした場合は、サーバーロールが securityadmin のメンバーであることがハードコードされています。
SSMS から ERRORLOG を表示しようとした場合は、2 つのステップで処理が行われています。
最初に [sys.xp_enumerrorlogs] を実行して、ERRORLOG の一覧を取得します。
sys.xp_enumerrorlogs
次に、[sys.xp_readerrorlog] を実行して、先ほどのエラーログの一覧のどのログを取得するかを設定します。
# 引数を省略した場合は最新 (0) が表示されます。
sys.xp_readerrorlog
この二つの拡張ストアドプロシージャの実行権限があれば、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]
ユーザーに強い権限を与えたくはないが、サーバーの状態を確認させたいときなどは ERRORLOG の参照権限を付与するとよいかと思います。