首页 > 解决方案 > Ldap 过滤器“>=”不适用于 Active Directory 中的连字符

问题描述

我们在extensionattribute1用户中有以下 3 个值:

此 LDAP 过滤器仅获取在 extensionattribute1 中具有第三个值的用户,

extensionattribute1 >= *Noon*12

AD 执行词法搜索,它应该获取所有具有上述所有 3 个值的用户。

我们正在努力寻找这种 Active Directory 行为的原因。请帮忙。

标签: active-directoryldap

解决方案


*字符是通配符。因此,如果您想将其用作文字(作为*值中的实际字符),您应该对其进行转义:

extensionattribute1 >= \2ANoon\2A12

更多详细信息:https ://social.technet.microsoft.com/wiki/contents/articles/5392.active-directory-ldap-syntax-filters.aspx#Special_Characters

但是,我认为这不是您的问题。

在我能找到的任何文档中,关于“词典”对 AD 意味着什么的规则都没有明确说明。一般来说,它的意思是“字母顺序”。这对文本来说很好,但对符号意味着什么则完全不清楚。它绝对不会总是使用它们在Unicode 表中的位置。

我自己做了一些测试。它确实将句点 ( .) 排在逗号 ( ,) 之上,正如您从它们在 Unicode 表中的位置所期望的那样。但是在表格中的句号和逗号之间的连字符,AD 的排名似乎非常非常低。它总是比几乎所有东西都少。我可以搜索小于空格字符 ( <=\20) 并且将匹配连字符的值。

所以,简短的回答是你不能做你想做的事。使用>=不会给您希望的结果。

但是,您可以使用 OR 比较来查找所有这三个值,如果这些是您想要查找的唯一三个值:

(|(extensionattribute1=\2ANoon\2A12)(extensionattribute1=-1000)(extensionattribute1=-7))

推荐阅读