SQL Server 2012中是否有办法在一个模式中授予执行所有存储过程的权限? 有关其他信息,这些存储过程只进行选择。
答案 0 :(得分:18)
尝试类似的东西。它创建一个新角色并授予模式执行权限。
CREATE ROLE db_executor
GRANT EXECUTE ON SCHEMA::schema_name TO db_executor
exec sp_addrolemember 'db_executor', 'Username'
将schema_name
替换为您的架构,将'Username'
替换为您的用户。
答案 1 :(得分:1)
为了授予一个模式中所有存储过程的执行权限,查询依次为 @szymon就足够了。
以下查询将向所选用户授予该过程的执行权限。 只要用户已经存在。
GRANT EXECUTE ON OBJECT :: [schema]。[procedurename] TO [user] AS [架构]; GO
答案 2 :(得分:1)
我建议你做Szymon提出的建议,因为它是更优雅的解决方案,但你想避免创建角色,你可以像这样执行查询,将结果复制到单独的查询编辑器中并立即执行。
这将为特定架构中的所有存储过程生成GRANT EXECUTE语句
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