回答:
それはので、それはコメントのために長すぎる、というだけの理由で答えとしてこれを投稿しますかなりすぐに他のユーザーに関連します。
SQL Server 2014には、まさにこのタイプのシナリオを支援する新しいサーバーレベルのアクセス許可がいくつか追加されています。これらは、監査を念頭に置いて設計されていますが、このタイプの要件も同様に当てはまるようです。次の2つのアクセス許可をサーバーレベルのログインに追加するだけです。
CONNECT ANY DATABASE
SELECT ALL USER SECURABLES
前者のように、ログインは任意のデータベースに接続できます。これの良い点は、将来作成されるデータベースに対してもこれを許可することです(明示的な拒否を設定しない場合、特定のユーザーデータベースをこのアクセス許可を持つログインから保護することができます)。後者は、ログインがアクセス権を持つデータベースで読み取り操作を実行できるようにします-そのためSELECT
、テーブル、ビュー、UDFなどからアクセスできますが、UPDATE
操作を実行することはできません(この権限がストアドプロシージャはDMLを実行します)。これらの機能は、ログインをサーバー全体に広く開いた読み取りアクセスを許可する場合、またはCONNECT
特定のデータベースに従来の権限を付与することでよりきめ細かくする場合にSELECT ALL USER SECURABLES
適切に機能します。ログインが明示的にアクセスできるデータベースに対してのみ機能します。
2014セキュリティの変更は、ここに記載されています -だけでなく、部分的に。データベースレベルの権限を忘れていましたが、ALTER ANY DATABASE EVENT SESSION
ここでは関係ありません。
サーバーレベルの「データベースの読み取り」権限はなく、サーバーレベルのロールにデータベースレベルの権限を付与することはできません
そのため、ユーザーを個別にデータベースにマップする必要があります。Active Directoryを使用している場合、Windowsグループを作成し、そのグループにSQL Serverへのログインを与え、そのグループのすべてのデータベースにdb_datareaderを適用できます(ただし、各データベースにユーザーを作成する必要があります)。