2012-02-17 4 views

答えて

156

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] 
+16

+1プラス:将来のストアドプロシージャにEXECUTE権限を与えます。あなたのデータベースにはまだありませんが、後で作成されます。 –

+1

私はあなたの 'user'が角括弧の中になければならないかもしれないことに注目する価値があると思います。これは私のユースケースでは、少なくとも部分的には私のユーザがドメインを持っている(つまり、その中に\文字を持っていた)からだ。 編集:固定エスケープスラッシュ文字 – PrinceTyke

+1

なぜユーザーをdb_ddladminロールに割り当てるのでしょうか? "db_ddladmin固定データベースロールのメンバーは、データベース内の任意のデータ定義言語(DDL)コマンドを実行できます。 - [こちら](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/database-level-roles)を参照してください。 –

60

SQL Server 2005では、データベースの原則にgrant database execute permissionsする機能が導入されましたあなたが説明したように:

これは、すべてのスキーマのすべてのストアドプロシージャを暗黙的に含むデータベーススコープでアクセス許可を与えます。つまり、ストアドプロシージャごとに明示的にアクセス許可を与える必要はありません。

また、あなたはより粒状にしたい場合はgranting schema execute permissionsによって制限することができます:あなたはこれを許可する場合があります

:上記の回答に加えて

GRANT EXECUTE ON SCHEMA ::dbo TO [MyDomain\MyUser] 
+4

これを特定のスキーマ、sysのパーミッションを避ける – RemarkLima

8

、私は追加したいです代わりにロールを入力し、ユーザーにロールを割り当てます。

CREATE ROLE [myAppRights] 
GRANT EXECUTE TO [myAppRights] 

です。

スキーマ・レベルでそれををしたい場合:

GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights] 

も(この例では、役割myAppRightsはスキーマその後dboのすべての要素の実行権限を持つことになります)動作します。

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

関連する問題