Sql 如何向特定架构中的存储过程授予执行权限?

Sql 如何向特定架构中的存储过程授予执行权限?,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,在SQL Server 2012中是否有一种方法可以在一个架构中授权执行所有存储过程? 有关其他信息,这些存储过程只是进行了选择。请尝试类似的操作。它创建一个新角色并向架构授予执行权限 CREATE ROLE db_executor GRANT EXECUTE ON SCHEMA::schema_name TO db_executor exec sp_addrolemember 'db_executor', 'Username' 用您的模式替换schema\u name,用您的用户替换'Use

在SQL Server 2012中是否有一种方法可以在一个架构中授权执行所有存储过程?
有关其他信息,这些存储过程只是进行了选择。

请尝试类似的操作。它创建一个新角色并向架构授予执行权限

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

用您的模式替换
schema\u name
,用您的用户替换
'Username'

要为一个模式中的所有存储过程授予执行权限,可通过 @szymon够了

下面的查询将向所选用户授予过程的执行权限。 假设用户已经存在

准予执行 在对象上::[schema].[procedurename]为[user] AS[schema]; 去


我建议您按照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

但是如果要创建新的存储过程呢?我认为您还需要为新创建的存储过程授予exec权限?是否可以向已经存在的SQL SERVER角色(如db_datareader)授予架构权限?@FatihYarbaş305应该可以,但我不确定内置角色。我建议不要扩展内置角色,最好创建自己的自定义角色。