我试图从已授予该存储过程执行权限的有限权限登录中运行存储过程。存储过程访问同一服务器上存在的2个数据库。当我执行存储过程时,我收到一个错误,该错误声明:
服务器主体"LimitedUser“无法在当前安全上下文下访问数据库"Database2”。
一些背景:我最近的任务是将我们的两个不同的数据库服务器迁移到一个数据库中。我已经备份并导出了必要的数据库,并将它们还原到新服务器中。较旧的数据库是MS sql server 2000 (用于数据库2)和MS sql server 2005 (用于数据库1-上述存储的proc位于其中)。
我发现了一些线索,似乎表明,由于我导入了数据库,所有者是不同的,这将导致一个问题。因此,我在这两个数据库上运行了"exec sp_changedbowner‘sa“,以确保它们拥有相同的所有者。在从LimitedUser运行存储的proc时,我仍然得到了相同的错误。在各种论坛站点上的许多其他示例都处理不同servers...and上的数据库,这些数据库必须使用开放的查询命令。我不认为这是必要的。
当我作为一个拥有更多管理权限的用户运行它时,存储的proc运行得很好。所以我的问题是,我应该设置哪些权限来允许来自LimitedUser的这个操作?
谢谢!
发布于 2013-11-01 01:37:23
LimitedUser需要Database2的权限才能执行存储过程在该数据库中所做的任何操作,所有权链接只能在同一个数据库中工作(除非您启用了服务器选项交叉数据库所有权链,我不建议这样做,因为它将数据库容器分解为一个安全边界)。
例如,您有db1和db2,db1中有一个存储的proc,它执行select * from db2.dbo.table1
为此,您需要LimitedUser拥有:
https://stackoverflow.com/questions/19715636
复制相似问题