Stored procedures 存储过程访问同一服务器上的多个数据库失败

Stored procedures 存储过程访问同一服务器上的多个数据库失败,stored-procedures,sql-server-2008-r2,cross-database,Stored Procedures,Sql Server 2008 R2,Cross Database,我正在尝试从已被授予所述存储过程执行权限的有限权限登录运行存储过程。存储过程访问同一服务器上的两个数据库。在执行存储过程时,我收到一个错误,该错误表示: 服务器主体“LimitedUser”无法在当前安全上下文下访问数据库“Database2” 一些背景: 我最近的任务是将两个不同的数据库服务器迁移到一个数据库中。我已经备份并导出了必要的数据库,并将它们恢复到新服务器中。较旧的数据库是MS sql server 2000(用于数据库2)和MS sql server 2005(用于数据库1-上述存

我正在尝试从已被授予所述存储过程执行权限的有限权限登录运行存储过程。存储过程访问同一服务器上的两个数据库。在执行存储过程时,我收到一个错误,该错误表示:

服务器主体“LimitedUser”无法在当前安全上下文下访问数据库“Database2”

一些背景: 我最近的任务是将两个不同的数据库服务器迁移到一个数据库中。我已经备份并导出了必要的数据库,并将它们恢复到新服务器中。较旧的数据库是MS sql server 2000(用于数据库2)和MS sql server 2005(用于数据库1-上述存储过程所在的位置)

我发现一些线索似乎表明,由于我导入了数据库,所有者不同,这会导致问题。因此,我在这两个数据库上运行了“exec sp_changedbowner'sa'”,以确保它们拥有相同的所有者。在从LimitedUser运行存储过程时,我仍然遇到相同的错误。各种论坛站点上的许多其他示例都处理位于不同服务器上的数据库……并且必须使用开放查询命令。我认为这是没有必要的

当我以拥有更多管理权限的用户的身份运行它时,存储的进程运行得很好。所以我的问题是,我应该设置什么权限来允许LimitedUser执行此操作


谢谢

LimitedUser需要Database2上的权限要执行存储过程在该数据库中执行的任何操作,所有权链接将仅在同一数据库中工作(除非启用服务器选项跨数据库所有权链接,我不建议使用此选项,因为它会将数据库容器分解为安全边界)

例如,您有db1和db2,在db1中有一个存储的过程,它执行db2.dbo.table1中的select*

为此,您需要LimitedUser具备:

  • 在db1数据库中为过程执行权限
  • 在db2中选择表1上的权限

添加用于将存储过程执行到第二个数据库,以及添加存储过程在第二个数据库上使用的单独权限。然而,原始数据库服务器似乎没有使用这种方法。我还研究了服务器和数据库级别上禁用的跨数据库所有权链接。因此,我不确定当执行用户仅对存储proc所在的数据库拥有exec权限时,存储proc如何能够访问2个数据库。我试图使这个新的数据库服务器能够像旧的一样工作。