我正在尝试从已授予所述存储过程的执行权限的有限权限登录中运行存储过程。存储过程访问存在于同一服务器上的2个数据库。当我执行存储过程时,我收到一条错误,指出:
服务器主体“LimitedUser”无法访问当前安全上下文下的数据库“Database2”。
一些背景: 我最近的任务是将2个不同的数据库服务器迁移到单个数据库中。我已备份并导出必要的数据库并将其还原到新服务器中。较旧的数据库是MS sql server 2000(用于数据库2)和MS sql server 2005(用于数据库1 - 上述存储过程所在的位置)
我发现一些线索似乎表明,因为我导入了数据库,所有者是不同的,这会导致问题。所以我在2个数据库上运行“exec sp_changedbowner'sa'”以确保它们拥有相同的所有者。从LimitedUser运行存储过程时,我仍然遇到同样的错误。各种论坛网站上的许多其他示例处理不同服务器上的数据库......并且必须利用开放查询命令。我不相信这是必要的。
当我以具有更多管理员权限的用户身份运行时,存储的proc运行正常。所以我的问题是,我应该设置哪些权限以允许来自LimitedUser的此操作?
谢谢!
答案 0 :(得分:0)
LimitedUser需要Database2上的权限才能执行存储过程在该数据库中执行的操作,所有权链接只能在同一个数据库中工作(除非您启用服务器选项跨数据库所有权链接,我不推荐它,因为它中断将数据库容器作为安全边界。)
所以,例如,你有db1和db2,在db1中有一个存储过程从db2.dbo.table1执行select *
为此,您需要LimitedUser: