動的管理ビュー(DMV)やSQLServerProfilerが閲覧できると、有益な情報が沢山取得できて非常に強力な反面、sysadminロールを安易に割り当てるのは危険すぎますよね、、、
read権限しかなく、write権限は持たないまま(=update/insertなど不可能なまま)、DMVのSELECTやProfilerの使用ができるような権限の付与方法が知りたい!!!と思って調査しました。
付与する権限と付与方法について
・目的は、SQLServerProfiler と 動的管理管理ビューを閲覧できる状態にすること。ただし、テーブルやストアドのALTER,INSERT,UPDATE,DROPなどはできない状態を保ちたい
・権限にはサーバーレベルのものと、データーベースレベルのものがある。今回付与したい権限は全てサーバーレベル。
・権限割り当てについては、「ロールに権限付与→ロールを各ログインに割り当て」という手順が望ましいが、
SQLServer2008までは、ユーザが作れるロールはデータベースロールのみ。サーバーロールは任意で作成したり、既存のロールを変更することができない。
※ユーザ定義サーバーロールが作れるのは2012以降 https://technet.microsoft.com/ja-jp/magazine/hh641407.aspx
そのため、今回の環境(SQLServer 2008以前)については、サーバーレベルの権限は、各ログインに対して個別に直接割り当てる必要がある。
各ログイン(=ユーザー)に対して権限を付与するSQL
-- SQLServer Profilerが閲覧できる権限を付与する
USE [master]
GO
GRANT ALTER trace TO [ログイン名(例. emotu)]
GO
-- 動的管理ビューを閲覧できる権限を付与する
USE [master]
GO
GRANT VIEW SERVER STATE TO [ログイン名(例. emotu)]
GO
-- 上記2権限を付与することにより、利用状況モニターから「プロセスの削除」ができるようになってしまうので、その権限だけ奪う
USE [master]
GO
REVOKE ALTER ANY CONNECTION TO [ログイン名(例. emotu)]
GO
以上でwrite権限は付与しないまま、DMVのSELECTやProfilerの利用ができるようになります。最高っ!!
※ただし、VIEW SEVER STATE権限もかなり強力な機能なので、付与するときは慎重に、、、
※その他、何かしらの更新/削除が行えてしまう可能性も0ではないので、付与は慎重に行ってください。