すべてのテーブルへの読み取りアクセスを許可するデータベースロールを作成します。一部への書き込みアクセス


9

1000以上のテーブルを持つデータベースがあります。すべてのテーブルの読み取り専用と、2つの特定のテーブルへの書き込みアクセスを許可するロールを作成する必要があります。

私はデータベースロールをいじくり回していましたが、テーブルを追加しようとするたびに、すべて1000を手動で選択する必要がありました...これを行うより良い方法はありますか?


それは実際には最も簡単な方法かもしれません...スクリプトを作成する方法はありますか?これらのデータベースの1つを更新するたびに一連のスクリプトを保持する必要があります。すべての設定をすぐに戻すことができます。
ウェス

回答:


9

スキーマ(などdbo)に対する権限を付与すると、そのスキーマ内のすべてのオブジェクトにカスケードされます。個々の例外については、それらを明示的にリストするだけです。

GRANT SELECT ON SCHEMA::dbo TO [role];
GO

GRANT INSERT, UPDATE --, DELETE
  ON dbo.table_they_can_write_to TO [role];

DENY SELECT ON dbo.table_they_cannot_read TO [role];

3
簡単です。このようなコミュニティがあればうれしいです。
ウェス

1

これを試して :

EXEC sp_MSForEachTable 'GRANT INSERT, UPDATE ON ? to [ROLE]'

3
参考までに、これにより、すべてのテーブルへの書き込みアクセス権は付与されますが、読み取りアクセス権は付与されず、スキーマも完全に無視されます。またsp_MSForEachTable、文書化もサポートもされておらず、と同じスキップの問題が発生するsp_MSForEachDB可能性があります
アーロンバートランド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.