【问题标题】:Ldap filter ">=" not working for hyphens in Active DirectoryLdap 过滤器“>=”不适用于 Active Directory 中的连字符
【发布时间】:2019-05-03 11:01:56
【问题描述】:

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

  • -1000
  • -7
  • *中午*12

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

extensionattribute1 >= *Noon*12

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

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

【问题讨论】:

    标签: active-directory ldap


    【解决方案1】:

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

    extensionattribute1 >= \2ANoon\2A12
    

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

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

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

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

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

    但是,如果您只想找到这三个值,您可以使用 OR 比较来查找所有这三个值:

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

    【讨论】:

    • 在对过滤器进行建议的更改后,AD 仍然返回具有第三个值的用户。
    • 我做了一些测试。我已经用我找到的结果更新了我的答案。
    猜你喜欢
    • 2018-11-17
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多