【问题标题】:Cross Database Ownership Chaining fails: not able to access the database跨数据库所有权链接失败:无法访问数据库
【发布时间】:2014-03-07 06:01:18
【问题描述】:

我有:

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

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

服务器主体“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

那么,为什么用户不能从视图中选择?如果视图只从 DB1 中的表中选择,则不会出错。

有人对我可能遗漏或误解的内容有任何建议吗?

【问题讨论】:

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


    【解决方案1】:

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

    出于安全考虑,您还应该在服务器级别禁用该选项,并且只在数据库中启用该选项。

    您可以阅读更多关于它的信息here

    【讨论】:

    • 谢谢乔迪!就是这样。一旦我将用户添加到 DB2,它就像一个魅力。我还将删除服务器级别选项;我只是添加它以完全确定它处于活动状态。
    猜你喜欢
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 2011-12-07
    相关资源
    最近更新 更多