web-dev-qa-db-ja.com

多くのストアドプロシージャのDBロールにExec権限を付与する簡単な方法

データベースにSQLデータベースロールまたはアプリケーションロールがあるシナリオを考えます。タスクは、nストアドプロシージャに実行権限を付与することです。

SQL Management Studioを使用する場合、ロールのオブジェクトに権限を適用するのに役立つ素敵な画面があります。

SQL Management Studio

アクセス許可を適用する手順は次のとおりです。

  • Sesecuresのリストで許可を許可/拒否するオブジェクトを選択します。
  • 以下のExplicit Permissionsのリストに移動します。
  • 必要に応じて[許可]または[拒否]チェックボックスをオンにします。

nオブジェクトについて上記を繰り返します。 100以上のオブジェクトに対してこれを行う間、楽しませ続けるために、いくつかの音楽を起動してください!もっと良い方法があるはずです!それは主要な割合のクリックフェストです。

質問

SQL Server Management Studio 2005を使用してこのタスクを実行するより速い方法はありますか?おそらく別のGUIツール(できれば無料)?

このタスクを自動的に実行するT-SQLスクリプトを作成するための提案はありますか?つまり、すべてのストアドプロシージャ名のテーブルを作成し、ループし、exec権限を適用しますか?

22
p.campbell

これはそれを行う必要があります:

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の提案が好ましいアプローチであり、それが実行可能であることを付け加えます。

11
RBarryYoung
USE database_name;
GRANT EXECUTE TO [security_account];

大括弧を忘れないでください:)

32
user1090467

これを行うことはできますが、これがどれほど安全かはわかりません。

/* CREATE A NEW ROLE */
CREATE ROLE db_executor

/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor
16
Jack Marchetti

最も簡単な方法は次のとおりです。

GRANT EXECUTE ON myproc TO x

ここで、x =

  1. SQLユーザー
  2. 役割
  3. ADグループ/アカウント
4
Rabbit

Dboスキーマを更新し、このスキーマに対するEXECUTE権限を目的のユーザー/ロールに追加するだけで設定できます。

2
ZooZ