2010-11-21 63 views
2

我一直想知道为什么数据库角色列表(db_datareader,db_datawriter,​​等)从未包含db_storedprocedureexecutor。其他人是有道理的,但它似乎能够授予执行所有存储特效到一个特定用户(不授予他们,这是唯一的其他方式来完成相同的事情)的能力将是一个方便的事情。例如,假设我想让我的所有开发人员都有权运行存储过程,但不让他们执行任何DDL - 如果没有在每个存储过程中明确授予EXECUTE(然后记住在添加新的存储过程时添加新的DDL) SP部署),没有办法做到这一点(我知道SP可以包含DDL,因此它们仍然可以通过这种方式间接地被允许访问DDL)。为什么没有内置的“存储过程执行器”数据库角色?

如果我有一个应用程序服务帐户和一些与我的应用程序一起存储的过程,我必须明确授予每个SP的权限(因为我不想授予我的应用程序服务帐户DBO),而我可以使用角色来允许他们更新/删除他们想要的任何内容。虽然最初看起来很明显,但我现在不确定为什么数据库服务器中缺少这个角色 - 有没有人可以解释为什么这是一个可怕的想法(正如我假设的那样,或者它已经存在)?

编辑:

看来我不是唯一一个有这种期望 - 和it's worked around with a handful of T-SQL(似乎可以授予毯子EXECUTE权,这我不知道,你可以这样做),这只是让我想知道为什么它不是标准!

+2

我也是!我们基本上创建了自己的'db_executor'角色,模仿'db_datareader'来解决这个问题。但是:为什么不在SQL Server基础包中?不知道....一样:为什么有一个'sys.procedures'目录视图,但没有'sys.functions'一个......让你走的东西:嗯........ – 2010-11-21 19:34:52

回答

3

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

CREATE PROC storedprocschema.DoStuff ...

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

+1

我们目前只使用DBO,所以此步骤并不适用,因为我可以执行“GRANT EXECUTE T​​O User”补助金在dbo中执行。然而,我明白你在说什么 - 使用你的方法,我们可以隔离我们希望应用程序用户有权访问的SP,然后在整个模式上进行GRANT EXECUTE。有趣的想法! – SqlRyan 2010-11-22 05:39:24

+1

@rwmnau:我们已经为每个客户端完成了它:WebGui,Desktop,ThisSystem,ThatSystem等数据表。内部procs在助手等等等我也不得不问 - [this](http://stackoverflow.com/questions/2212044/sql-server-how-to-permission-schemas)了解它... – gbn 2010-11-22 07:13:59

-1

因为如果您可以执行所有存储过程,则可以执行sp_addrolemember,并且您可以完成database_owner可以执行的所有操作。

+0

对不起,不对。您需要[db_securityadmin](http://msdn.microsoft.com/en-us/library/ms188685%28SQL.90%29.aspx)运行[sp_addrolemember](http://msdn.microsoft.com/ en-us/library/ms187750%28SQL.90%29.aspx)请参阅“权限”部分 – gbn 2010-11-21 19:26:03

相关问题