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})) '