【问题标题】:Cross database access SQL user permission跨数据库访问 SQL 用户权限
【发布时间】:2016-01-29 22:38:32
【问题描述】:

从link 中,我注意到授予应用程序用户对存储过程的“执行”权限就足够了。

但是当程序从不同的数据库中访问对象时它不会起作用。

我们可以想到两种可能的解决方案,包括为每个数据库创建一个 SQL 登录名并分配最小权限集,以及

  1. 在实际访问其他数据库中的对象(可能是存储过程、表、视图等)之前使用execute as 'user'。 (即访问 Records 数据库之前的 RecordsUser)
  2. 为每个数据库创建一个链接服务器,并在所需过程中引用该链接服务器。

除了这些,还有其他更好的解决方案吗?

【问题讨论】:

    标签: sql-server stored-procedures permissions sql-server-2012


    【解决方案1】:

    您陷入了“以用户身份执行”的受限执行模型。这种沙盒是设计使然,有两种可能的解决方案:

    • 将数据库标记为可信(不推荐)
    • 使用代码签名(推荐但困难)

    阅读更多:

    【讨论】:

      【解决方案2】:

      仅当查询需要访问另一个服务器时才需要链接服务器,但是您不需要链接服务器来访问单独的数据库。

      1. 确保用户在 Database1 和 Database2 中都存在
      2. 确保用户对 Database1 和 Database2 存储过程都具有执行权限

      您可以像这样授予执行权限:

      USE [Database1]
      GRANT CONNECT TO [username];
      GRANT EXEC ON [schema].[sp_name] TO [username];
      
      USE [Database2]
      GRANT CONNECT TO [username];
      GRANT EXEC ON [schema].[sp_name] TO [username];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        • 1970-01-01
        • 1970-01-01
        • 2011-10-26
        • 2012-02-17
        • 1970-01-01
        相关资源
        最近更新 更多