2

我一直想知道为什么数据库角色列表(db_datareaderdb_datawriterdb_ddladmin等)从未包含db_storedprocedureexecutor. 其他是有道理的,但似乎能够将执行所有存储过程的能力授予特定用户(不授予它们db_owner,这是完成同一件事的唯一其他方法)将是一件方便的事情。

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

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

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

编辑:

似乎我不是唯一一个有这种期望的人——它已经使用了一些 T-SQL(似乎你可以授予一揽子 EXECUTE 权利,我不知道你可以这样做),这让我想知道为什么不标准!

4

2 回答 2

4

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

例如CREATE PROC storedprocschema.DoStuff ...

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

于 2010-11-21T19:24:26.537 回答
-1

因为如果你能执行所有的存储过程,你就可以执行sp_addrolemember,你可以做所有能做的事情database_owner

于 2010-11-21T19:24:16.147 回答