Sql-Server

Azure SQL 託管實例上的 Azure AD 組的行級安全性

  • December 3, 2021

我有一個 Azure SQL 託管實例,我需要在該實例上對某些表實施行級安全性以過濾某些使用者查詢的數據。

我的所有使用者都使用 Azure Active Directory 身份驗證進行身份驗證,並且他們可以根據我的 SQL 實例上配置的特定 AAD 組的成員身份訪問數據庫。(即在 SQL 中,我沒有為登錄或數據庫訪問或選擇權限配置任何單個使用者,只有 AAD 組)。

我正在嘗試找到一種使用相同模型實現行級安全性的方法。所以我想通過引用我需要過濾掉表中行的特定 AAD 組來實現它。

例如

使用者Bob屬於 AAD 組DepartmentA

在我的 SQL 託管實例上啟用了DepartmentA組以登錄並被授予SELECT對數據庫 DatabaseA 中所有表的權限

我想通過編寫一個策略來過濾TableA中具有行級安全性的行,該策略讓我的DepartmentA組中的所有使用者只能看到與其部門相關的記錄(假設部門名稱寫在表列上)。

有什麼方法可以實現嗎?

我發現了類似的功能IS_MEMBER()IS_ROLEMEMBER()但它們似乎只適用於普通的 Windows 域,而不適用於 Azure AD。

謝謝

一個使用者可以是可以訪問您的數據庫的多個安全組的成員。因此,USER_NAME() 系列函式都不會返回角色安全主體。

您可以通過查詢sys.user_token或為特定角色執行IS_ROLEMEMBER來查找使用者的所有活動組成員身份。

IS_ROLEMEMBER() 但它們似乎只適用於普通的 Windows 域,而不適用於 Azure AD。

只要您已將該安全組添加為使用者,IS_ROLEMEMBER() 就適用於 AAD 安全組。例如

create user DepartmentA from external provider

或者,對於 MI

create login DepartmentA from external provider

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