跨数据库访问SQL用户权限

时间:2015-10-29 16:47:50

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

从这个link开始,我注意到授予应用程序用户“执行”权限已经足够了。对存储过程的许可。

但是当过程从不同的数据库访问对象时,它将不起作用。

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

  1. 在实际访问其他数据库中的对象(可能是存储过程,表,视图等)之前使用execute as 'user'。 (即访问记录数据库之前的RecordsUser)
  2. 为每个数据库创建链接服务器,并在必需的过程中引用该服务器。
  3. 还有其他更好的方法吗?

2 个答案:

答案 0 :(得分:2)

您正陷入'执行为用户'的约束执行模型中。这种沙子拳击是设计的,有两种可能的解决方案:

  • 将数据库标记为值得信赖(不推荐)
  • 使用代码签名(推荐但很难)

了解更多:

答案 1 :(得分:0)

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

  1. 确保用户同时存在于Database1和Database2
  2. 确保用户对Database1和Database2 sprocs具有执行权限
  3. 您可以像这样授予执行权限:

    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];