2014-03-07 79 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