在特定数据库中授予所有存储过程的执行权限

6
正如标题所示,我需要在数据库中的每个存储过程上授予执行权限。我们已经从测试环境切换到生产环境,对生产数据库的控制较少,所有导入的存储过程现在都没有任何权限。有趣的是,是否有任何方法可以确保从一开始就为所有导入的存储过程授予执行权限?
谢谢任何帮助。
3个回答

10

除了授予权限外,您还应该考虑架构。

因此,您的存储过程应该以 Procs 架构命名。

  • Procs.DoStuff
  • Procs.DoMoreStuff
  • Procs.WriteStuff

然后,您可以使用 GRANT EXECUTE ON SCHEMA::Procs TO RoleWhatever。所有在 Procs 中创建的存储过程都将继承 EXECUTE 权限。

RoleWhatever 可能是生产中的支持角色,但在其他环境中是开发人员角色。


7

生成语句,然后将其复制并粘贴到查询窗口中运行

select 'grant execute on ' + 
    QuoteName(specific_schema) + '.' +
    QuoteName(specific_name) + ' to someone'
from information_schema.routines
where routine_type='PROCEDURE'

你能解释一下“生成语句”的意思吗? - Phil
1
除非每次添加存储过程时,您需要再次授予权限。当以下解决方案https://dev59.com/rlTTa4cB1Zd3GeqPuaZA#5109747不可行或不适用于任何原因时,这是有用的。 - Disillusioned
这真的很笨拙。模式允许您在模式上授予权限,该模式中的所有新存储过程都继承权限。 - gbn

4

您需要在模式上授予执行权限,如果您有多个模式,则需要重复此操作

grant  execute on schema :: yourschema to username

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接