我一直想知道为什么数据库角色列表(db_datareader, db_datawriter, db_ddladmin, ,等)永远不会包括 db_storedprocedureexecutor. 。其他人很有意义,但似乎能够授予对特定用户执行所有存储的Procs的能力(而无需授予它们 db_owner, ,这是完成同一件事的唯一其他方法)将是一件方便的事情。

例如,说我想授予我所有的开发人员运行存储过程的权利,而不允许他们执行任何DDL-而无需明确授予每个存储过程的执行(然后在部署其他SP时记住添加新的SP) ,没有办法做到这一点(我知道SP可以包含DDL,因此可能仍可以间接允许使用这种方式使用DDL)。

如果我有一个应用程序服务帐户和许多与申请一起使用的存储过程,则必须明确授予每个SP(因为我不想授予我的应用程序服务帐户DBO),而我可以使用一个角色允许他们更新/删除所需的任何内容。

虽然最初看起来很明显,但我现在不确定为什么数据库服务器缺少这个角色 - 任何人都可以提供解释为什么这是一个可怕的想法(我认为它是一个可怕的想法,还是已经存在)?

编辑:

似乎我不是唯一有这种期望的人 - 而且 它与少数T-SQL一起工作 (看来您可以授予正确的毯子执行,我不知道您可以做),这让我想知道为什么它不是标准的!

有帮助吗?

解决方案

如果您使用架构,那么您只需要 GRANT EXECUTE ON SCHEMA::storedprocschema

例如 CREATE PROC storedprocschema.DoStuff ...

关于为什么,不知道...

其他提示

因为如果您可以执行所有存储过程,则可以执行 sp_addrolemember, ,您可以做所有的事情 database_owner 能够。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top