web-dev-qa-db-ja.com

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

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

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

9
Wes

スキーマ(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];
9
Aaron Bertrand

これを試して :

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