LDAP搜索有一些内置规则,其中一个是LDAP_MATCHING_RULE_IN_CHAIN.
来自MSDN:
1.2.840.113556.1.4.1941 LDAP_MATCHING_RULE_IN_CHAIN此规则仅限于适用于DN的过滤器.这是一个特殊的"扩展"匹配运算符,它将对象中的祖先链一直遍历到根,直到找到匹配为止.
他们继续说明它是如何用于递归搜索,而不是来回服务器:
LDAP_MATCHING_RULE_IN_CHAIN是匹配规则OID,旨在提供查找对象祖先的方法....以前,应用程序执行传递组扩展以计算组成员资格,这会占用过多的网络带宽; 应用程序需要进行多次往返以确定一个对象是否"链中"如果链接遍历到最后.
他们还说它有两个明显的用例:
话虽这么说,很多 人 都 发现,在实践中,使用LDAP_MATCHING_RULE_IN_CHAIN慢得多(在本例中,约10倍),比简单地做递归"成员的"搜索,以上报价称LDAP_MATCHING_RULE_IN_CHAIN目的是要取代.
那么,为什么这种LDAP_MATCHING_RULE_IN_CHAIN方法会变慢? 我们错过了什么吗?我们没有覆盖边缘情况吗?世界上有没有任何理由使用它LDAP_MATCHING_RULE_IN_CHAIN,为什么,如果它不必要地缓慢,是不是它被修复了?
我正在尝试获取某个用户所属的所有组。
我在 ldap 中有以下结构:
o=myOrganization
ou=unit1
cn=admin
cn=guess
Run Code Online (Sandbox Code Playgroud)
和
ou=users
cn=ann
cn=bob
cn=carla
Run Code Online (Sandbox Code Playgroud)
myOrganization 是组织的一个实例unit1 是 OrganizationUnit 的一个实例admin并且guess都是 GroupOfNames 并且每个人都是成员ann, bob, 和carla是 Person 的实例目前,我在 python 上使用 ldap 模块,这就是我所拥有的:
import ldap
l = ldap.initialize("ldap://my_host")
l.simple_bind_s("[my_dn]", "[my_pass]")
ldap_result = l.search("[BASE_DN]", ldap.SCOPE_SUBTREE, "(&(objectClass=Person)(cn=ann))", None)
res_type, data = l.result(ldap_result, 0)
print(data)
Run Code Online (Sandbox Code Playgroud)
我能够得到用户ann;但是,我如何才能让组Ann所属?
我试过,来自这个页面的以下内容:
search_filter='(|(&(objectClass=*)(member=cn=ann)))'
results = l.search_s([BASE_DN], ldap.SCOPE_SUBTREE, search_filter, ['cn',])
Run Code Online (Sandbox Code Playgroud)
但是我得到了一个空列表。我还尝试了各种查询组合,但它们都返回空。
PS:我在 linux 机器上使用 OpenLDAP
我正在使用的AD设置具有存储为(多个)安全组成员的用户.
我使用的软件读取用户的memberof属性来计算访问权限.
在AD Explorer中,我可以看到用户的memberof属性显示他们所属的直接安全组说"课程 - 英语".它没有显示父母团体,嵌套说"所有学生".
是否有理由确保所有嵌套组都显示在memberof属性中?