代码之家  ›  专栏  ›  技术社区  ›  SqlRyan

为什么没有内置的“存储过程执行器”数据库角色?

  •  2
  • SqlRyan  · 技术社区  · 14 年前

    我一直想知道为什么数据库角色列表( db_datareader , db_datawriter , db_ddladmin 等)从未包括 db_storedprocedureexecutor . 其他程序是有意义的,但似乎可以授予特定用户执行所有存储过程的能力(而不授予它们 db_owner 这是完成同样事情的唯一另一种方法)是一件方便的事情。

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

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

    虽然最初看起来很明显,但我现在不确定为什么数据库服务器中缺少这个角色——有人能解释一下为什么这是一个糟糕的想法吗(正如我假设的那样,或者它已经存在了)?

    编辑:

    似乎我不是唯一有这种期望的人-而且 it's worked around with a handful of T-SQL (看来你可以授予一项全面的执行权,但我不知道你能做到),这让我想知道为什么它不标准!

    2 回复  |  直到 14 年前
        1
  •  3
  •   gbn    14 年前

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

    CREATE PROC storedprocschema.DoStuff ...

    至于为什么,不知道…

        2
  •  -1
  •   Andomar    14 年前

    因为如果可以执行所有存储过程,则可以执行 sp_addrolemember 你可以做一切 database_owner 罐头。

    推荐文章