Azure SQLDB 中的 IS_MEMBER() 不適用於 AD 組?
我正在嘗試設置 RLS 並希望利用 AD 組。DB 是在 Azure 中創建的,我知道 AD 正在工作,因為我可以使用 AD 帳戶和 SSMS 進行連接
首先測試本地機器,按預期工作(img 1)
現在試試 Azure
IS_MEMBER() 在 Azure 中對於 AD 組似乎無法正常工作,但它認為它是域/組的有效 AD 域(請參閱前 2 行)
有任何想法嗎??我希望能夠擁有一個具有 ADGroups 的視圖,然後放置行級安全 RLS 來過濾不同組的視圖
乾杯
標記
這是很老的胎面,但我遇到了類似的問題,所以如果有人遇到它,希望這可能會有所幫助。
我在 IaaS 上的 SQL Server 上實現了 RLS,它基於 IS_MEMBER() 函式的 Active Directory 組檢查。(我與 AAD 同步,但這裡使用了本地 AD 的配置)。在我遷移到 PaaS(Azure SQL DB 單實例)之前,它執行良好。
第一件事是,在 IaaS 上,我曾經從本地 AD 域控制器引用 AD 組:
domain\groupname
CREATE LOGIN [domain\groupname] FROM WINDOWS
CREATE USER [domain\groupname] FOR LOGIN [domain\groupname]
select is_member('domain\groupname')
在 PaaS 中,我需要為組創建使用者並在沒有域的情況下引用它們,因為我必須切換到使用集成的 Azure Active Directory:
groupname
CREATE USER [groupname] FROM EXTERNAL PROVIDER
select is_member('groupname')
第二件事看起來像一個錯誤(目前與 MS 有公開票證)
雖然 IS_MEMBER 對 PaaS 中的測試使用者正常工作,但我在使用管理員帳戶時遇到了問題。以使用者 1 為例
$$ adminGroup $$無論我檢查的是哪個 AAD 組,在 DataDB IS_MEMBER 上始終返回 0。更奇怪的是,當更改為 Master db IS_MEMBER 時,任何 AAD 組都可以正常工作!
(題外話:在主數據庫使用者上還創建了以避免 SSMS 預設選項首先到達主數據庫的問題,並且如果不添加,非管理員使用者將收到連接錯誤(因此任何使用者都需要在 SSMS 連接選項目標數據庫中指定,或者被添加到主數據庫的連接權限))事實證明,有$$ adminGroup $$在 Azure SQL Server 上設置為 Azure Active Directory 管理員是這種奇怪行為的原因。我更改了我們的程式碼以使用$$ adminGroup2 $$對於 RLS,並從 AAD 中刪除了管理員(使用者)$$ adminGroup $$它被保存為 SQL Server Azure Active Directory Admin。僅通過此更改,IS_MEMEBER 就開始按預期工作!
我在這裡找到的其他解決方法是將 IS_MEMBER(‘db_owner’) 用於管理組(因為這些預設角色檢查工作正常,但這需要對安全配置進行額外更改,並且不會解決其他情況下的問題,然後是管理員,但是實際上看起來這是這裡唯一的問題。
等待聽到 MS 對這個錯誤的回應,因為我懷疑這會被設計實現……
感謝您通過支持通知我們。僅數據庫角色或 Windows 組支持 IS_MEMBER。目前不支持 Azure Active Directory 組,但我們會在未來考慮這一點。
我更新了文件以使這一點更清楚:https ://docs.microsoft.com/en-us/sql/t-sql/functions/is-member-transact-sql
問候
安德魯