3

開発者が作業している環境でストアド プロシージャに VIEW DEFINITION アクセスを割り当て、以下のクエリを Result to Text として実行し、出力をコピーして Result to Grid として実行しようとしています。

select 'GRANT VIEW DEFINITION ON ' + quotename(specific_schema) 
+ '.' + quotename(specific_name)
+ ' TO ' + 'TestAcct'
  from INFORMATION_SCHEMA.routines
where routine_type = 'PROCEDURE'

私が抱えている問題は、複数のサーバー上のすべてのデータベースに対してこれを行う必要があることです。「sp_MSforeachdb」で実行しようとしましたが、クエリをセットアップすると、select ステートメントが気に入りません。出力をコピーして、個々の DB ではなくサーバーに対して実行できるように、すべての DB に対して上記のクエリをフォーマットする方法についてのアイデアはありますか?

4

2 に答える 2

1

テスト アカウントに定義を表示させたいだけなら、次のようにしてください。

grant view definition to [TestAccount]

こうすることで、データベース内に新しいオブジェクトを作成しても最新の状態が維持されます。私の意見では、よりうまく機能するよりシンプルなソリューションです。

于 2013-01-19T14:47:28.453 に答える
1
EXEC sp_MSforeachdb 
'SELECT ''GRANT VIEW DEFINITION ON '' + quotename(''?'') + ''.'' + quotename(specific_schema) 
+ ''.'' + quotename(specific_name)
+ '' TO '' + ''TestAcct'' AS ''?''
FROM ?.INFORMATION_SCHEMA.routines
WHERE routine_type = ''PROCEDURE'''
于 2013-01-19T09:14:29.753 に答える