【问题标题】:Inconsistent LDAP filter results不一致的 LDAP 过滤器结果
【发布时间】:2015-09-24 11:11:33
【问题描述】:

我正在尝试确定用户是否是特定 AD 组的间接成员。这是通过 Delphi XE5 程序完成的,但为了清楚起见,我已经在 PowerShell 中编写(并测试了)我的示例。

不幸的是,我从 LDAP 查询中收到完全不一致的结果:同一查询有时会正常工作,有时会返回用户不是给定组的成员。

这是我正在尝试的(powershell)示例:

get-aduser -LDAPFilter "(memberof:1.2.840.113556.1.4.1941:=CN=egaa_app,OU=Applications,OU=access,OU=groups,OU=xxx,DC=xxx,DC=xxx,DC=xxx)" -SearchBase "CN=usr-sgr,OU=expert1,OU=experts,OU=remoteusers,OU=users,OU=exogit,OU=xxx,DC=xxx,DC=xxx,DC=xxx"

如果用户usr-sgr是AD组的直接或间接成员egaa_app,OU=Applications,OU=access,OU=groups,OU=xxx,DC=xxx,DC=xxx,DC=xxx,则上述命令应返回用户egaa_app,OU=Applications,OU=access,OU=groups,OU=xxx,DC=xxx,DC=xxx,DC=xxx

然而,当我运行一次时,我得到一个空结果。如果我在 AD MMC 中打开用户并以某种方式对其进行更新(在我的情况下,我更改了用户的“主组”,然后将其改回),相同的查询会成功返回用户对象。

我还尝试使用“反向”查询(检查给定组是否间接包含用户)并且我目睹了相同的行为。

所有这些都是在同一个登录会话中的成员服务器(Windows 2008 R2,已修补)上完成的。

【问题讨论】:

    标签: powershell active-directory ldap-query


    【解决方案1】:

    我想我可以给你解释一下。

    首先回忆一下LDAP_MATCHING_RULE_IN_CHAIN

    LDAP_MATCHING_RULE_IN_CHAIN 是一个匹配规则 OID,旨在提供一种查找对象祖先的方法。这种查询的一个示例是设计用于检查用户“user1”是否是组“group1”的成员。您可以将 base 设置为用户 DN (cn=user1, cn=users, dc=x) 并将范围设置为 base,然后使用以下查询。

    (memberof:1.2.840.113556.1.4.1941:=cn=Group1,OU=groupsOU,DC=x)
    

    这里属性memberof 是要在每个组对象中链式搜索的属性。使用“用户和计算机活动目录”MMC 中的属性编辑器来跟踪此属性:

    然后更改primary group,你会看到新的primary group从memberof属性列表中消失,而旧的primary group出现在attribute中。

    结论,LDAP_MATCHING_RULE_IN_CHAIN 不支持主组。

    在任何情况下都要小心在 PowerSell 中设置范围-SearchScope

    顺便说一句,对我来说,测试这种过滤器的最佳工具是LDIFDE.EXE

    ldifde -f c:\temp\test.ldif -d "CN=Jean-Paul Blanc,OU=Interne,OU=Silogix,DC=silogix,DC=local" -r "(memberof:1.2.840.113556.1.4.1941:=CN=bidon,OU=Interne,OU=Silogix,DC=silogix,DC=local)" -p base
    

    【讨论】:

    • 就是这样!非常感谢。但是,我想知道以编程方式检查用户是否属于给定组的正确方法是什么。
    • 您已经掌握了全局,您只需添加主体组。我给了一些线索here
    猜你喜欢
    • 2021-01-26
    • 2018-03-13
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    相关资源
    最近更新 更多