同じサーバー/プロジェクト内に含まれている複数のデータベースを持つサーバーがあります。 MS SQL Server 2012を使用しています。
私はその役割の一部である3人のユーザーで設定された特別な役割を持っています。 1つの特定のデータベース内にあるすべてのテーブルのロールへの選択アクセスを許可したいと思います。
問題のデータベースは、過去12年間の月ごとのアーカイブテーブルを持つアーカイブデータベースです。最初にロールを作成したときに、次のコマンドを実行するだけでアクセスを許可しました。
GRANT SELECT ON [dbo].[myarchivetable] TO myspecialrole
行く
年と月を変更してすべてを1つのスクリプトとして実行する必要があるだけなので、これはうまくいきました。
私は今、彼らがアーカイブデータベースのすべてのテーブルへの選択アクセスを必要としていることを発見しています。私は上記の方法を実行できましたが、そのすべてを132回書き出さなければならないので、間違いを犯すのは非常に簡単です。
データベース内のすべてのテーブルにmyspecialroleを簡単に追加するにはどうすればよいですか?
それがすべて明確だったと思います。
事前の感謝、カーティス
すべてのテーブルがdboスキーマにある場合、これは機能するはずです。必要に応じて、単一のテーブルを拒否できます。
GRANT SELECT ON SCHEMA :: [dbo] TO myspecialrole
次のように、sysobjectsシステムテーブルでSQLを生成して実行できます。
select 'GRANT EXEC ON dbo.' + name + ' TO myspecialrole GO' from mydb..sysobjects where type = 'U'