【问题标题】:How to grant execute permissions to the stored procedures in a specific schema?如何授予特定架构中存储过程的执行权限?
【发布时间】:2013-09-24 05:03:55
【问题描述】:

SQL Server 2012 中是否有一种方法可以授予在一个架构中执行所有存储过程? 有关更多信息,这些存储过程只是进行选择。

【问题讨论】:

    标签: sql sql-server sql-server-2012


    【解决方案1】:

    尝试类似的方法。它创建一个新角色并向架构授予执行权限。

    CREATE ROLE db_executor
    GRANT EXECUTE ON SCHEMA::schema_name TO db_executor
    exec sp_addrolemember 'db_executor', 'Username'
    

    schema_name 替换为您的架构,将'Username' 替换为您的用户。

    【讨论】:

    • 是否可以向已存在的 SQL SERVER 角色(如 db_datareader)授予 SCHEMA 权限?
    • @FatihYarbaşı 这应该是可能的,但我不确定内置角色。我建议不要扩展内置角色,最好创建自己的自定义角色。
    【解决方案2】:

    为了授予一个模式中所有存储过程的执行权限,查询由 @szymon 就够了。

    以下查询将授予所选用户对该过程的执行权限。 前提是用户已经存在。

    授予执行 ON OBJECT::[schema].[procedurename] TO [user] AS [模式]; 去吧

    【讨论】:

      【解决方案3】:

      我建议你按照 Szymon 的建议去做,因为它是更优雅的解决方案,但如果你想避免创建角色,你可以像这样执行查询,将结果复制到单独的查询编辑器中并一次执行所有操作。

      这将为您在特定架构中拥有的所有存储过程生成 GRANT EXECUTE 语句

      DECLARE @SchemaName varchar(20)
      DECLARE @UserName varchar(20)
      
      SET @SchemaName = 'dbo'
      SET @UserName = 'user_name'
      
      select 'GRANT EXECUTE ON OBJECT::' + @SchemaName + '.' + P.name  + ' to ' + @UserName
      from sys.procedures P
      inner join sys.schemas S on P.schema_id = S.schema_id
      where S.name = @SchemaName
      

      【讨论】:

      • 但是如果要创建新的存储过程呢?我认为您还需要为新创建的存储过程授予 exec 权限?
      猜你喜欢
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 2020-03-16
      • 1970-01-01
      • 2011-03-24
      • 2012-02-03
      相关资源
      最近更新 更多