跨数据库所有权链接失败:无法访问数据库

时间:2014-03-07 06:01:18

标签: sql-server sql-server-2008 security ownership

我有:

  • 单个Microsoft SQL Server 2008 R2
  • 包含一些表格的两个数据库:DB1DB2(两者都拥有相同的所有者)
  • DB1中的视图,DB1.dbo.View1SELECT * FROM DB2.dbo.Table1
  • DB1中的角色ViewRole被授予视图的SELECT许可(无其他权限)
  • Windows用户DOMAIN\user,服务器角色设置为public,属于DB1的ViewRole

当用户尝试从视图中选择SELECT时,我收到错误:

  

服务器主体“DOMAIN \ user”无法在当前安全上下文中访问数据库“DB2”

我已尝试(并希望成功)使用以下两者激活跨数据库所有权链接:

EXEC sp_configure 'Cross DB Ownership Chaining', '1';RECONFIGURE

EXEC sp_dboption DB1, 'db chaining', 'true'
EXEC sp_dboption DB2, 'db chaining', 'true'

要确认设置已完成,我运行:

SELECT name, owner_sid, is_db_chaining_on FROM sys.databases

结果是:

name  owner_sid           is_db_chaining_on
DB1   0x0105...DCB510000  1
DB2   0x0105...DCB510000  1

那么,为什么用户不能从视图中进行SELECT?如果视图仅从DB1中的表中进行选择,则不会出现错误。

任何人都有任何关于我可能错过或误解的建议吗?

1 个答案:

答案 0 :(得分:3)

Windows用户必须能够访问这两个数据库才能使用跨数据库所有权链接。

您还应该在服务器级别禁用该选项以确保安全性,并且仅启用数据库中的选项。

您可以阅读更多相关信息here