Python LDAP3搜索报invalid filter无效筛选器错误如何解决
问题原因
你调用conn.search()时传入的LDAP搜索过滤器存在语法错误,直接触发了过滤器无效的报错——你大概率是把SQL的查询书写习惯带到了LDAP过滤器编写里,两者语法规则差异很大,不能直接套用,具体错误点如下:
- 括号不配对:传入的过滤器字符串为
'(objectCategory=inetOrgPerson), samAccountName="jdoakes")',仅包含1个左括号,却有2个右括号,基础语法校验就无法通过。 - 多条件拼接规则错误:LDAP过滤器中如果要同时匹配多个条件,必须用逻辑与运算符
&把所有条件包裹在同一组括号内,不能像SQL一样直接用逗号分隔多个查询条件。 - 多余的双引号:LDAP匹配属性值时不需要给值加双引号,加了之后服务端会把双引号当成值的一部分参与匹配,就算语法修正后也查不到目标结果。
修正方案
将搜索参数替换为符合LDAP语法的过滤器即可,正确的调用代码如下:
# 同时匹配objectCategory为inetOrgPerson、samAccountName为jdoakes的条目 conn.search( 'DC=MyCorp,DC=corp', '(&(objectCategory=inetOrgPerson)(samAccountName=jdoakes))' )
排查小技巧
如果后续写过滤器时不确定语法是否正确,可以先写单条件过滤器测试连通性,比如先传(objectCategory=inetOrgPerson)确认单条件查询正常,再逐步叠加其他查询条件,能快速定位问题。
内容的提问来源于stack exchange,提问作者Simon Templar
相关产品推荐
相关产品推荐

