0

我正在尝试从已被授予执行该存储过程的权限的有限权限登录中运行存储过程。存储过程访问存在于同一台服务器上的 2 个数据库。当我执行存储过程时,我收到一条错误消息:

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

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

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

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

谢谢!

4

1 回答 1

0

LimitedUser 需要 Database2 上的权限才能执行存储过程在该数据库中执行的任何操作,所有权链接只能在同一个数据库中工作(除非您启用服务器选项 Cross Database Ownership Chaining,我不建议这样做,因为它会破坏数据库容器作为安全边界)。

因此,例如,您有 db1 和 db2,在 db1 中有一个存储的 proc 执行 select * from db2.dbo.table1

为此,您需要 LimitedUser 拥有:

  • 在 db1 数据库中执行该过程的权限
  • 在 db2 中选择 table1 的权限
于 2013-11-01T09:37:23.853 回答