【发布时间】:2013-09-24 05:03:55
【问题描述】:
SQL Server 2012 中是否有一种方法可以授予在一个架构中执行所有存储过程? 有关更多信息,这些存储过程只是进行选择。
【问题讨论】:
标签: sql sql-server sql-server-2012
SQL Server 2012 中是否有一种方法可以授予在一个架构中执行所有存储过程? 有关更多信息,这些存储过程只是进行选择。
【问题讨论】:
标签: sql sql-server sql-server-2012
尝试类似的方法。它创建一个新角色并向架构授予执行权限。
CREATE ROLE db_executor
GRANT EXECUTE ON SCHEMA::schema_name TO db_executor
exec sp_addrolemember 'db_executor', 'Username'
将schema_name 替换为您的架构,将'Username' 替换为您的用户。
【讨论】:
为了授予一个模式中所有存储过程的执行权限,查询由 @szymon 就够了。
以下查询将授予所选用户对该过程的执行权限。 前提是用户已经存在。
授予执行 ON OBJECT::[schema].[procedurename] TO [user] AS [模式]; 去吧
【讨论】:
我建议你按照 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
【讨论】: