Azure SQLDB 中的 IS_MEMBER() 不适用于 AD 组?

Mar*_*est 6 row-level-security active-directory azure

我正在尝试设置 RLS 并希望利用 AD 组。DB 是在 Azure 中创建的,我知道 AD 正在工作,因为我可以使用 AD 帐户和 SSMS 进行连接

首先测试本地机器,按预期工作(img 1)

在此处输入图片说明

现在试试 Azure

在此处输入图片说明

IS_MEMBER() 在 Azure for AD Groups 中似乎没有按预期工作,但它将其识别为域/组的有效 AD 域(请参阅前 2 行)

有任何想法吗??我希望能够拥有一个具有 ADGroups 的视图,然后将 Row Level Security RLS 用于过滤不同组的视图

干杯

标记

小智 1

这是相当古老的做法,但我面临着类似的问题,所以如果有人遇到它,希望这可能有所帮助。
我在 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 中的测试用户可以正常工作,但我在管理帐户方面遇到了问题。以 DataDB IS_MEMBER 上的 [adminGroup] 中的 user1 为例,无论我检查哪个 AAD 组,总是返回 0。更奇怪的是,当更改为 Master db IS_MEMBER 时,对于任何 AAD 组都可以正常工作!
(题外话:在主数据库用户上,还创建了避免 SSMS 默认选项首先到达主数据库的问题,并且如果不添加,非管理员用户将收到连接错误(因此用户需要在 SSMS 连接选项中指定目标数据库,或添加主数据库的连接权限))

事实证明,将 [adminGroup] 设置为 Azure SQL Server 上的 Azure Active Directory 管理员是造成这种奇怪行为的原因。我更改了代码以使用 [adminGroup2] 进行 RLS,并从 [adminGroup] 中删除了 AAD 中的管理员(用户),后者保留为 SQL Server Azure Active Directory 管理员。通过这一更改,IS_MEMEBER 开始按预期工作!

我在这里找到的其他解决方法是对管理员组使用 IS_MEMBER('db_owner') (因为这些默认角色检查工作正常,但这需要对安全配置进行额外的更改,并且不会解决管理员之后的其他情况的问题,但是实际上看起来这是这里唯一的问题。

等待微软关于这个错误的回应,因为我怀疑这是否会通过设计实现......