我一直想知道为什么数据库角色列表(db_datareader
,db_datawriter
,db_ddladmin
等)从未包含db_storedprocedureexecutor
。其他有意义,但似乎能够授予执行所有存储过程到特定用户的能力(没有授予它们db_owner
,这是完成相同事情的唯一其他方法)将是一个方便的事情。
例如,假设我想让所有开发人员都有权运行存储过程,而不是让他们执行任何DDL - 而不是在每个存储过程上显式授予EXECUTE(然后记住在额外的SP时添加新的存储过程)部署),没有办法做到这一点(我知道SP可以包含DDL,因此他们可能仍然间接允许以这种方式访问DDL。)
如果我有一个应用程序服务帐户和许多与我的应用程序一起存储的存储过程,我必须明确地向每个SP授予权限(因为我不想授予我的应用程序服务帐户DBO),而我可以使用角色来允许他们更新/删除他们想要的任何内容。
虽然它最初看起来很明显,但我现在还不确定为什么数据库服务器中缺少这个角色 - 任何人都可以解释为什么这是一个糟糕的想法(因为我认为它是,或者它已经存在) ?
修改
似乎我不是唯一有这种期望的人 - 而且it's worked around with a handful of T-SQL(似乎你可以授予一条毯子EXECUTE权利,我不知道你能做到),这让我想知道它为什么会这样做不标准!
答案 0 :(得分:3)
如果您使用架构,则只需GRANT EXECUTE ON SCHEMA::storedprocschema
例如CREATE PROC storedprocschema.DoStuff ...
至于为什么,不知道......
答案 1 :(得分:-1)
因为如果您可以执行所有存储过程,则可以执行sp_addrolemember
,并且可以执行database_owner
可以执行的所有操作。