2014-03-07 72 views
0

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

  • 一个单一的Microsoft SQL Server 2008 R2
  • 两个数据库有一些表:DB1DB2(两者使用相同的所有者)
  • 在DB1,DB1.dbo.View1的视图,即SELECT * FROM DB2.dbo.Table1
  • 作用,ViewRole,在DB1授予SELECT许可证到视图(没有其他权限)
  • 个Windows用户,DOMAIN\user,与服务器角色设置为public,谁属于DB1的ViewRole

当用户试图从视图中进行选择,我得到的错误:

The server principal "DOMAIN\user" is not able to access the database "DB2" under the current security context

我曾尝试(希望成功)同时使用,以激活跨数据库所有权链接:

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中的表中进行选择,则不会出现错误。

任何人有任何建议可能会错过或误解?

回答

2

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

您还应该禁用服务器级别上的安全选项,并且只启用数据库中的选项。

你可以阅读更多关于它在这里 www.mssqltips.com/sqlservertip/1782/understanding-cross-database-ownership-chaining-in-sql-server/

+0

感谢JodyT!这就是它。一旦我将用户添加到DB2,它就像一个魅力一样。我还将删除服务器级别选项;我只是将其添加到完全确定它是活跃的。 – ANisus