2010-10-28 20 views
5

我有相同的SQL Server上的兩個數據庫:如何配置一個存儲過程在另一個數據庫中訪問表

數據庫A

  • 表1
  • 表2
  • 存儲過程X

數據庫B

  • 表3
  • 表4
  • 存儲過程Ÿ
  • 存儲過程ž

我想給數據庫用戶1訪問,而只能通過對存儲過程的執行權限。

  • SPROC X不表1 & 2之間加入,並且用戶1可以執行。
  • sproc y在表格之間進行連接3 & 4,並且user1可以執行。
  • sproc z在表格間執行連接1 & 4,並且user1無法執行,除非我將SELECT權限授予 表1.爲什麼?

我不希望授予select權限,因爲這打破的安全模型

回答

3

「只有通過存儲過程訪問數據庫」您可能需要啓用cross database ownership chaining兩個數據庫。

要查看它是否啓用:

select name, is_db_chaining_on 
    from sys.databases 

要啓用該設置:

EXEC sp_dboption 'DatabaseA', 'db_chaining', 'true'; 
GO 

EXEC sp_dboption 'DatabaseB', 'db_chaining', 'true'; 
GO 
+0

它沒有啓用...我啓用了數據庫我sprocs試圖訪問,它似乎工作。謝謝! – 2010-10-28 15:43:55

+0

因爲我遇到了一些最近的數據庫,需要檢查一些額外的項目。1)使兩個數據庫的數據庫所有者相同2)確保在兩個數據庫中都存在相同的用戶/組 – 2015-12-11 14:47:35

1

我正是這個問題,但在我的情況的解決方案是更新兩個數據庫有相同所有者。

如果數據庫屬於同一個所有者,則不需要顯式打開所有權鏈接(因爲所有者是一個相同的)。

就大條本進入:[http://www.sommarskog.se/grantperm.html][1]

可以使用更新的sp_changedbowner會將數據庫的所有權或「ALTER授權」的聲明更新的版本。

+0

這只是發生在我們創建的一些最近的數據庫中 - 我們忘記將所有者更改爲SA,並且將數據庫中的db_chaining選項其他例子沒有工作。只要我們將所有者更改爲SA,它就可以工作。請注意,我們仍然需要將db_chaining設置爲true – 2015-12-11 14:26:00

相關問題