次のコマンドは、ユーザー "MyUser"にデータベース内のすべてのストアドプロシージャを実行する権限を効果的に与えますか?
GRANT EXECUTE TO [MyDomain\MyUser]
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]
SQL Server 2005では、すでに説明したように、データベースの原則に データベースの実行権限を付与する の機能が導入されました。
GRANT EXECUTE TO [MyDomain\MyUser]
これにより、データベーススコープでパーミッションが付与されます。これには、すべてのスキーマ内のすべてのストアドプロシージャが暗黙的に含まれます。つまり、ストアドプロシージャごとに明示的に権限を付与する必要はありません。
さらに細かくしたい場合は、 スキーマ実行権限の付与 で制限することもできます。
GRANT EXECUTE ON SCHEMA ::dbo TO [MyDomain\MyUser]
上記の回答に加えて、追加したいと思います。
代わりにこれをroleに付与してから、そのロールをユーザーに割り当てることができます。次のようにしてロールmyAppRights
を作成したとします。
CREATE ROLE [myAppRights]
それからあなたは経由で実行権を与えることができます
GRANT EXECUTE TO [myAppRights]
その役割に。
または、やりたい場合はスキーマレベルで
GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights]
この例では、ロールmyAppRights
がスキーマdbo
のすべての要素に対する実行権限を持ちます。
このようにすれば、一度実行するだけで、後で変更する必要がある場合に、関連するすべてのアプリケーション権限をユーザーに簡単に割り当てたり取り消したりできます。特に複雑なアクセスプロファイルを作成する場合に便利です。
注:スキーマにロールを付与すると、後で作成する要素にも影響があります。これは、目的の設計によっては有益な場合もあれば、そうでない場合もあります。