我一直想知道为什么数据库角色列表(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权,这我不知道,你可以这样做),这只是让我想知道为什么它不是标准!
我也是!我们基本上创建了自己的'db_executor'角色,模仿'db_datareader'来解决这个问题。但是:为什么不在SQL Server基础包中?不知道....一样:为什么有一个'sys.procedures'目录视图,但没有'sys.functions'一个......让你走的东西:嗯........ – 2010-11-21 19:34:52