SQL Serverでは、特定のデータベースにユーザーがいて、データベースのシステム以外のすべてのビューへのアクセスのみを許可するように求められました。これは、ビューのタイプのセキュリティ保護可能な要素を編集し、それぞれに選択を許可することで実行できると思いますが、ビューはたくさんあります。これを達成するためのより効率的な方法はありますか?
SQL Serverでは、特定のデータベースにユーザーがいて、データベースのシステム以外のすべてのビューへのアクセスのみを許可するように求められました。これは、ビューのタイプのセキュリティ保護可能な要素を編集し、それぞれに選択を許可することで実行できると思いますが、ビューはたくさんあります。これを達成するためのより効率的な方法はありますか?
回答:
次のような構文はありません
GRANT SELECT ON ALL::Views TO SomeUser
GRANT SELECT
個々のオブジェクト、スキーマ、またはデータベース全体に対する権限を付与できますが、オブジェクトタイプでフィルタリングしてビューのみを含めることはできません。この種のアドホックタスクViewReader
の場合、と呼ばれる新しいロールを作成し、ユーザーをそのロールに追加してから、SSMSを実行します。
SELECT 'GRANT SELECT ON ' +
QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name) +
' TO ViewReader;'
FROM sys.views
WHERE is_ms_shipped = 0
GRANT
必要な権限で実行するスクリプトを生成します。
EXEC
が、私は一回限りの仕事に煩わされることはありません。
私の場合、私は別のアプローチをとりました。これは私がやったことです:
良い点は、新しいユーザーはテーブルにアクセスできず、テーブルを表示することさえできないということです。
お役に立てば幸いです。