web-dev-qa-db-ja.com

特定のスキーマのストアドプロシージャに実行権限を付与するにはどうすればよいですか?

SQL Server 2012に、1つのスキーマですべてのストアドプロシージャの実行を許可する方法はありますか?追加情報については、これらのストアドプロシージャは選択のみを実行しています。

10
Andi

そのようなことを試してください。新しいロールを作成し、スキーマに実行権限を付与します。

CREATE ROLE db_executor
GRANT EXECUTE ON SCHEMA::schema_name TO db_executor
exec sp_addrolemember 'db_executor', 'Username'

schema_nameをスキーマに置き換え、'Username'をユーザーに置き換えます。

18
Szymon

より洗練されたソリューションであるため、Szymonが提案したことを実行することをお勧めしますが、このようなクエリを実行し、結果を別のクエリエディタにコピーして、一度に実行できるロールの作成は避けたいと考えています。

これにより、特定のスキーマにあるすべてのストアドプロシージャに対してGRANTEXECUTEステートメントが生成されます。

DECLARE @SchemaName varchar(20)
DECLARE @UserName varchar(20)

SET @SchemaName = 'dbo'
SET @UserName = 'user_name'

select 'GRANT EXECUTE ON OBJECT::' + @SchemaName + '.' + P.name  + ' to ' + @UserName
from sys.procedures P
inner join sys.schemas S on P.schema_id = S.schema_id
where S.name = @SchemaName
1
Kenneth Hampton

1つのスキーマ内のすべてのストアドプロシージャに実行権限を付与するには、@ szymonによるクエリで十分です。

以下のクエリは、選択したユーザーにプロシージャの実行権限を付与します。ユーザーがすでに存在する場合。

GRANT EXECUTE ON OBJECT :: [schema]。[procedurename] TO [user] AS [schema]; GO