Sql-Server

如何允許 SQL-ID 通過另一個視圖訪問一個數據庫?

  • October 17, 2017

我在 MS-SQL Server 2012 中有 2 個數據庫。第一個數據庫“DatabaseA”由多個數據庫訪問,包括我的第二個數據庫“DatabaseB”。我在“DatabaseB”中有一個名為“vwDB_B”的視圖,它連接/過濾來自“DatabaseA”和“DatabaseB”的一些資訊(該視圖設置為在可以訪問“DatabaseA”和“DatabaseB”的 SQL-id 下執行’。兩個數據庫都在同一台伺服器上。DatabaseB 通過它們的完全限定名稱訪問 DatabaseA 中的對象。

現在,我們有一個名為“ExternalID”的外部使用者將使用的 SQL-id。此 SQL-id 應該能夠從“vwDB_B”檢索數據。我怎樣才能實現它?

如果我授予對“vwDB_B”視圖上的“ExternalID”的 SELECT 訪問權限,我會收到一條錯誤消息,指出該 ID 無權訪問“DatabaseA”。我不想在“DatabaseA”上授予對“ExternalID”的只讀訪問權限(或將其添加到只讀角色),因為此數據庫包含一些敏感資訊,我只希望此 ID 訪問我提供的資訊’vwDB_B’ 視圖。

您可以使用Ownership Chaining授予對視圖的訪問權限,而無需授予對基礎表的任何權限。

在這種情況下,您需要啟用Cross Database Ownership Chains,並授予使用者對目標數據庫的訪問權限,但不授予對任何表的 SELECT 訪問權限。

引用自:https://dba.stackexchange.com/questions/188686