Sql-Server

SQL Server 2016 中的使用者安全繼承

  • November 17, 2017

我想在 SQL Server 2016 中建構一堆新數據庫(幾十個)。但是,我希望所有使用者都訪問一個數據庫(現在稱為 SECURITY),並對那個數據庫應用安全性,其中每個使用者將被授予對其部門的單個模式的訪問權限。SQL Server 2016 是否允許繼承安全性,因此您不必在每個數據庫中建構這些使用者,並在每個數據庫中應用相同的安全性?其中一些模式將只有視圖,其中讀取其他數據庫中的模式和表的定義。

DEV_SECURITY 中的一些模式將允許對視圖、表和儲存過程進行讀/寫和刪除/創建,用於 SECURITY 以及另一個數據庫。

這是否需要我建構這些使用者以及他們在所有數據庫中的安全性,還是我可以通過在 SECURITY 中建構它們來簡化它們?

SQL Server 2016 是否允許繼承安全性,因此您不必在每個數據庫中建構這些使用者,並在每個數據庫中應用相同的安全性?其中一些模式將只有視圖,其中讀取其他數據庫中的模式和表的定義。

您要問的是Ownership Chains

在一個簡單的情況下,當我們在一個數據庫中時,當您授予視圖權限並且該視圖由擁有所有基礎表的同一主體擁有時,您什麼都不做:使用者將在沒有任何權限的情況下訪問視圖底層表。

在您的情況下,有不止一個數據庫,我們正在談論 跨數據庫所有權連結

您應該閱讀上面文章中的這一段,以了解在您啟用 crossdb 所有權鏈的情況下的潛在威脅。

您可以在此處閱讀更多資訊:在 SQL Server 中啟用跨數據庫訪問

簡而言之,要使其工作,除了要求擁有相同的所有者之外,您還應該將兩個數據庫都啟用到 db chainig: ALTER DATABASE ... SET DB_CHAINING ON

在這種情況下,您仍然可以僅授予視圖權限,而不授予其他數據庫表的權限,但您仍然應該將使用者映射到所有感興趣的數據庫中。否則,當您離開數據庫時,當您通過視圖所有權鏈從其他數據庫訪問表時,您應該授予所有基礎表的權限。

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