LDAP过滤结果不一致

时间:2015-09-24 11:11:34

标签: powershell active-directory ldap-query

我试图找出用户是否是特定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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

首先小召回LDAP_MATCHING_RULE_IN_CHAIN

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

IB_DESIGNABLE
@interface ImageButton : UIControl
{
@private
    IBOutlet UIView *view 
    __weak IBOutlet UIImageView *imageView;
}
@property (strong, nonatomic) IBInspectable NSString *imageName;

此处属性(memberof:1.2.840.113556.1.4.1941:=cn=Group1,OU=groupsOU,DC=x) 是将在每个组对象的链中搜索的属性。使用'user& amp;中的属性编辑器计算机活动目录'MMC遵循此属性:

AD attribute Editor

然后更改主要组,您将看到新的主要组从memberof属性列表中消失,旧的主要组出现在属性中。

结论,LDAP_MATCHING_RULE_IN_CHAIN不支持主要群组。

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

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

-SearchScope