LDAP 中简单的嵌套查询

LDAP 中简单的嵌套查询

最近使用python ldap3查询一个用户是否属于一个嵌套组时,发现ldap3自带的方法没有查询嵌套的方法。查询资料发现微软的搜索筛选器语法支持嵌套查询,支持链式查询到根一级。

参考资料:

搜索筛选器语法 - Win32 apps | Microsoft Learn

Get recursive group members · Issue #327 · cannatag/ldap3 · GitHub

active directory - ldap nested group membership - Stack Overflow

匹配规则 OID 来自 Ntldap.h 的字符串标识符 说明
1.2.840.113556.1.4.803 LDAP_MATCHING_RULE_BIT_AND 仅当属性中的所有位与值匹配时,才会找到匹配项。 此规则等效于按位 AND 运算符。
1.2.840.113556.1.4.804 LDAP_MATCHING_RULE_BIT_OR 如果属性中的任何位与值匹配,则找到匹配项。 此规则等效于按位 OR 运算符。
1.2.840.113556.1.4.1941 LDAP_MATCHING_RULE_IN_CHAIN 此规则仅限于应用于 DN 的筛选器。 这是一个特殊的“扩展”匹配运算符,它一直将对象中的祖先链一直引导到根目录,直到找到匹配项。

嵌套查询主要使用OID:1.2.840.113556.1.4.1941

samAccountName:用户samAccountName,groupdn:组的完整dn路径

search_filter='(&(objectCategory=person)(sAMAccountName={samAccountName})(objectCategory=user)(memberof:1.2.840.113556.1.4.1941:={groupdn})) '

以上就是查询group中是否有用户,返回结果需要自己分析返回对象判断是否存在用户,同样如果想要查询组中是否用用户

samAccountName:组的samAccountName,userDN:用户的完整dn路径

search_filter='(&(objectCategory=person)(sAMAccountName={samAccountName})(objectCategory=user)(memberof:1.2.840.113556.1.4.1941:={userDN})) '
posted @ 2023-03-01 15:39  Dark华  阅读(118)  评论(0编辑  收藏  举报