データベースにSQLデータベースロールまたはアプリケーションロールがあるシナリオを考えます。タスクは、nストアドプロシージャに実行権限を付与することです。
SQL Management Studioを使用する場合、ロールのオブジェクトに権限を適用するのに役立つ素敵な画面があります。
アクセス許可を適用する手順は次のとおりです。
nオブジェクトについて上記を繰り返します。 100以上のオブジェクトに対してこれを行う間、楽しませ続けるために、いくつかの音楽を起動してください!もっと良い方法があるはずです!それは主要な割合のクリックフェストです。
質問:
SQL Server Management Studio 2005を使用してこのタスクを実行するより速い方法はありますか?おそらく別のGUIツール(できれば無料)?
このタスクを自動的に実行するT-SQLスクリプトを作成するための提案はありますか?つまり、すべてのストアドプロシージャ名のテーブルを作成し、ループし、exec権限を適用しますか?
これはそれを行う必要があります:
CREATE PROC SProcs_GrantExecute(
@To AS NVARCHAR(255)
, @NameLike AS NVARCHAR(MAX)
, @SchemaLike as NVARCHAR(MAX) = N'dbo'
) AS
/*
Proc to Authorize a role for a whole bunch of SProcs at once
*/
DECLARE @sql as NVARCHAR(MAX)
SET @sql = ''
SELECT @sql = @sql + '
GRANT EXECUTE ON OBJECT::['+ROUTINE_SCHEMA+'].['+ROUTINE_NAME+'] TO '+@To+';'
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME LIKE @NameLike
AND ROUTINE_SCHEMA LIKE @SchemaLike
PRINT @sql
EXEC(@sql)
これは一体として注射可能ですので、管理目的でのみ使用してください。
スキーマを使用するというRemusの提案が好ましいアプローチであり、それが実行可能であることを付け加えます。
USE database_name;
GRANT EXECUTE TO [security_account];
大括弧を忘れないでください:)
これを行うことはできますが、これがどれほど安全かはわかりません。
/* CREATE A NEW ROLE */
CREATE ROLE db_executor
/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor
最も簡単な方法は次のとおりです。
GRANT EXECUTE ON myproc TO x
ここで、x =
Dboスキーマを更新し、このスキーマに対するEXECUTE権限を目的のユーザー/ロールに追加するだけで設定できます。