SQL Server 2012に、1つのスキーマですべてのストアドプロシージャの実行を許可する方法はありますか?追加情報については、これらのストアドプロシージャは選択のみを実行しています。
そのようなことを試してください。新しいロールを作成し、スキーマに実行権限を付与します。
CREATE ROLE db_executor
GRANT EXECUTE ON SCHEMA::schema_name TO db_executor
exec sp_addrolemember 'db_executor', 'Username'
schema_name
をスキーマに置き換え、'Username'
をユーザーに置き換えます。
より洗練されたソリューションであるため、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つのスキーマ内のすべてのストアドプロシージャに実行権限を付与するには、@ szymonによるクエリで十分です。
以下のクエリは、選択したユーザーにプロシージャの実行権限を付与します。ユーザーがすでに存在する場合。
GRANT EXECUTE ON OBJECT :: [schema]。[procedurename] TO [user] AS [schema]; GO