我试图找出用户是否是特定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,已修补)上完成的。
答案 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遵循此属性:
然后更改主要组,您将看到新的主要组从memberof属性列表中消失,旧的主要组出现在属性中。
结论,LDAP_MATCHING_RULE_IN_CHAIN不支持主要群组。
在任何情况下都要小心在PowerSell中设置范围 memberof
。
顺便说一句,对我来说,测试此类过滤器的最佳工具是LDIFDE.EXE。
-SearchScope