web-dev-qa-db-ja.com

MS SQLの特定のデータベース内のすべてのテーブルへの選択アクセスの許可

同じサーバー/プロジェクト内に含まれている複数のデータベースを持つサーバーがあります。 MS SQL Server 2012を使用しています。

私はその役割の一部である3人のユーザーで設定された特別な役割を持っています。 1つの特定のデータベース内にあるすべてのテーブルのロールへの選択アクセスを許可したいと思います。

問題のデータベースは、過去12年間の月ごとのアーカイブテーブルを持つアーカイブデータベースです。最初にロールを作成したときに、次のコマンドを実行するだけでアクセスを許可しました。

GRANT SELECT ON [dbo].[myarchivetable] TO myspecialrole

行く

年と月を変更してすべてを1つのスクリプトとして実行する必要があるだけなので、これはうまくいきました。

私は今、彼らがアーカイブデータベースのすべてのテーブルへの選択アクセスを必要としていることを発見しています。私は上記の方法を実行できましたが、そのすべてを132回書き出さなければならないので、間違いを犯すのは非常に簡単です。

データベース内のすべてのテーブルにmyspecialroleを簡単に追加するにはどうすればよいですか?

それがすべて明確だったと思います。

事前の感謝、カーティス

7

すべてのテーブルがdboスキーマにある場合、これは機能するはずです。必要に応じて、単一のテーブルを拒否できます。

GRANT SELECT ON SCHEMA :: [dbo] TO myspecialrole
11
ndonohoe

次のように、sysobjectsシステムテーブルでSQLを生成して実行できます。

select 'GRANT EXEC ON dbo.' + name + ' TO myspecialrole GO' from mydb..sysobjects where type = 'U'
2
Burçin