2013-10-31 80 views
0

我試圖從已被授予所述存儲過程的執行權限的有限權限登錄中運行存儲過程。存儲過程訪問存在於同一臺服務器上的2個數據庫。當我執行存儲過程時,我收到一個錯誤,指出:存儲Proc訪問同一臺服務器上的多個數據庫FAILS

服務器主體「LimitedUser」無法訪問當前安全上下文下的數據庫「Database2」。

一些背景: 我最近的任務是將我們的2個不同的數據庫服務器遷移到一個數據庫中。我備份並導出了必要的數據庫並將其恢復到新的服務器中。較舊的數據庫是MS sql server 2000(用於數據庫2)和MS sql server 2005(用於數據庫1 - 前述存儲的proc所在的地方)

我發現了一些似乎表明由於導入數據庫,業主是不同的,這會導致一個問題。所以我在2個數據庫上運行了「exec sp_changedbowner'sa'」,以確保它們擁有相同的所有者。從LimitedUser運行存儲過程時,我仍然遇到同樣的錯誤。各種論壇網站上的很多其他示例涉及位於不同服務器上的數據庫......並且不得不利用開放式查詢命令。我不認爲這是必要的。

當我以擁有更多管理權限的用戶身份運行它時,存儲的proc運行得很好。所以我的問題是,我應該設置什麼權限才能允許LimitedUser執行此操作?

謝謝!

回答

0

LimitedUser需要Database2上的權限才能執行存儲過程在該數據庫中執行的任何操作,所有權鏈接只能在同一數據庫中工作(除非啓用服務器選項跨數據庫所有權鏈接,我不建議將其作爲它將數據庫容器分解爲安全邊界)。

因此,舉例來說,你有DB1和DB2,存在DB1執行選擇一個存儲過程* FROM db2.dbo.table1

爲此,您需要LimitedUser有:

  • 執行在DB1數據庫權限的程序
  • 對錶1的選擇權限在DB2
+0

執行存儲過程到第二數據庫添加中使用的以及添加separa存儲proc正在使用的第二個數據庫作品的權限。 但是,似乎原始數據庫服務器沒有使用該方法。我也看到交叉數據庫所有權鏈接在服務器和數據庫級別被禁用。所以我不確定存儲過程如何在訪問2個數據庫時執行用戶只對存儲過程的數據庫擁有exec權限。我試圖啓用這個新的數據庫服務器像他們的舊服務器一樣工作。 – DontStealMyFish

相關問題