web-dev-qa-db-ja.com

すべてのストアドプロシージャにGRANT EXECUTE

次のコマンドは、ユーザー "MyUser"にデータベース内のすべてのストアドプロシージャを実行する権限を効果的に与えますか?

GRANT EXECUTE TO [MyDomain\MyUser]
126
ChadD

SQL Server 2008以降

/* CREATE A NEW ROLE */
CREATE ROLE db_executor

/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor

単なるユーザー(ロールではない)の場合:

USE [DBName]
GO
GRANT EXECUTE TO [user]
202
Antony Scott

SQL Server 2005では、すでに説明したように、データベースの原則に データベースの実行権限を付与する の機能が導入されました。

GRANT EXECUTE TO [MyDomain\MyUser]

これにより、データベーススコープでパーミッションが付与されます。これには、すべてのスキーマ内のすべてのストアドプロシージャが暗黙的に含まれます。つまり、ストアドプロシージャごとに明示的に権限を付与する必要はありません。

さらに細かくしたい場合は、 スキーマ実行権限の付与 で制限することもできます。

GRANT EXECUTE ON SCHEMA ::dbo TO [MyDomain\MyUser]
66
Robin Minto

上記の回答に加えて、追加したいと思います。


代わりにこれをroleに付与してから、そのロールをユーザーに割り当てることができます。次のようにしてロールmyAppRightsを作成したとします。

CREATE ROLE [myAppRights] 

それからあなたは経由で実行権を与えることができます

GRANT EXECUTE TO [myAppRights] 

その役割に。


または、やりたい場合はスキーマレベルで

GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights]

この例では、ロールmyAppRightsがスキーマdboのすべての要素に対する実行権限を持ちます。

このようにすれば、一度実行するだけで、後で変更する必要がある場合に、関連するすべてのアプリケーション権限をユーザーに簡単に割り当てたり取り消したりできます。特に複雑なアクセスプロファイルを作成する場合に便利です。

注:スキーマにロールを付与すると、後で作成する要素にも影響があります。これは、目的の設計によっては有益な場合もあれば、そうでない場合もあります。

12
Matt