SQL Server 2012で読み取り専用サーバーロールを作成する方法


15

新しいサーバーの役割を作成するときに「データベースの表示」アクセス許可を付与していますが、このアクセス許可はユーザーがシステムデータベースを表示することのみを許可することに気付きました。

読み取り専用で、任意のデータベースを読み取ることができるサーバーロールを作成しようとしています。

ユーザーデータベースを読み取るユーザー定義サーバーロールを作成する方法はありますか?または、ユーザーごとのユーザーマッピングを通じてこれを行う必要がありますか?

回答:


16

それはので、それはコメントのために長すぎる、というだけの理由で答えとしてこれを投稿しますかなりすぐに他のユーザーに関連します。

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ここでは関係ありません。


今後のサーバーに関するこの拡張回答に感謝します。この操作/チェックがサーバーレベルであること。DB互換性レベルに関するコメントはありますか。DB CLが2012の場合、2014機能は引き続き機能しますか?
SnapJag

@SnapJag互換性レベルはセキュリティ機能とは関係ありません。主にT-SQLの解析方法とオプティマイザーがクエリプランを生成する方法に関するものです。
アーロンバートランド

@AaronBertrandサーバーレベルのロールに設定して、データベースの更新も許可する権限があるかどうか知っていますか?(sysadmin固定ロールは確かにできますが、ユーザー定義のサーバーロールに対してそれを行うことはできますか?)
MaxiWheat

@MaxiWheatいいえ、それを行う簡単な方法は考えられません。ごめんなさい。
アーロンバートランド

FWIWこれはAzure SQL Databaseでは機能しません。[NameOfUserOrGroup]へのデータベースの接続を許可するこのバージョンのSQL Serverでは、セキュリティ保護可能なクラス 'server'はサポートされていません。
ジェームズ

8

サーバーレベルの「データベースの読み取り」権限はなく、サーバーレベルのロールにデータベースレベルの権限を付与することはできません

そのため、ユーザーを個別にデータベースにマップする必要があります。Active Directoryを使用している場合、Windowsグループを作成し、そのグループにSQL Serverへのログインを与え、そのグループのすべてのデータベースにdb_datareaderを適用できます(ただし、各データベースにユーザーを作成する必要があります)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.