【问题标题】:Quick way to grant Exec permissions to DB role for many stored procs为许多存储过程授予数据库角色执行权限的快速方法
【发布时间】:2010-11-09 04:49:37
【问题描述】:

考虑数据库具有 SQL 数据库角色或应用程序角色的场景。任务是授予 n 个存储过程的执行权限。

使用 SQL Management Studio 时,有一个很好的屏幕可以帮助将权限应用于角色的对象。

以下是应用权限的步骤:

  • Securables 列表中选择您要授予/拒绝权限的对象。
  • 导航到下面的显式权限列表
  • 酌情选择“授予”或“拒绝”复选框。

n 个对象重复上述操作。在为 100 多个对象执行此操作时,播放一些音乐以保持娱乐!一定有更好的办法!这是一个大比例的点击活动。

问题

使用 SQL Server Management Studio 2005 是否有更快的方法来执行此任务?也许是另一个 GUI 工具(最好是免费的)?

对于创建 T-SQL 脚本以自动执行此任务有什么建议吗?即创建一个包含所有存储过程名称的表、循环并应用 exec 权限?

【问题讨论】:

  • 您是否考虑过将所有过程都放在一个架构中,然后在该架构上授予执行权限?
  • 这就是为什么 GUI 工具和依赖它们很糟糕的原因。

标签: sql-server sql-server-2005 tsql ssms


【解决方案1】:

最简单的方法是:

GRANT EXECUTE ON myproc TO x

其中 x =

  1. SQL 用户
  2. 角色
  3. AD 组/帐户

【讨论】:

    【解决方案2】:

    只需更新 dbo 架构并将此架构上的 EXECUTE 权限设置为所需的用户/角色。

    【讨论】:

      【解决方案3】:
      USE database_name;
      GRANT EXECUTE TO [security_account];
      

      别忘了括号:)

      【讨论】:

      • 如何在 SSMS Gui 中或通过 TSQL 验证这一点?
      【解决方案4】:

      应该这样做:

      CREATE PROC SProcs_GrantExecute( 
          @To AS NVARCHAR(255)
          , @NameLike AS NVARCHAR(MAX)
          , @SchemaLike as NVARCHAR(MAX) = N'dbo'
          ) AS
      /*
       Proc to Authorize a role for a whole bunch of SProcs at once
      */
      DECLARE @sql as NVARCHAR(MAX)
      SET @sql = ''
      
      SELECT @sql = @sql + '
       GRANT EXECUTE ON OBJECT::['+ROUTINE_SCHEMA+'].['+ROUTINE_NAME+'] TO '+@To+';'
      FROM INFORMATION_SCHEMA.ROUTINES
      WHERE ROUTINE_NAME LIKE @NameLike
       AND ROUTINE_SCHEMA LIKE @SchemaLike
      
      PRINT @sql
      EXEC(@sql)
      

      这是可注入的,因此仅供管理员使用。


      我只想补充一点,Remus 建议使用模式是首选方法,并且可行。

      【讨论】:

      • 太棒了!您刚刚为这位初级程序员节省了很多时间。谢谢!
      • 看起来有点矫枉过正!
      【解决方案5】:

      你可以这样做,但我不完全确定这有多安全。

      /* CREATE A NEW ROLE */
      CREATE ROLE db_executor
      
      /* GRANT EXECUTE TO THE ROLE */
      GRANT EXECUTE TO db_executor
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-07
        • 2011-07-03
        • 2011-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-16
        • 2010-09-09
        相关资源
        最近更新 更多