【问题标题】:LDAP filter for blank (empty) attribute空白(空)属性的 LDAP 过滤器
【发布时间】:2013-01-21 15:10:34
【问题描述】:

我已经搜索过这个主题,但我发现的只是返回某些属性不存在的条目的过滤器,例如:

(!(manager=*))

但是,我想查找存在该属性但具有空值(即空/空白字符串)的条目。我可以使用 LDAP 过滤器执行此操作吗?如果可以,如何操作?

编辑:

只是为了确认一下,上面的过滤器会找到没有属性的条目,但不会找到属性为空(空字符串)的条目。

这取决于 LDAP 实现还是什么?

【问题讨论】:

    标签: ldap


    【解决方案1】:

    从 LDAP 中,没有确定空字符串的查询方法。

    最佳做法是将您的数据输入清理到 LDAP,因为 LDAP 中的空值或 null 值根本没有值。

    要确定这一点,您需要使用值 (manager=*) 查询所有值,然后使用代码确定“空格”或空值。

    正如 Terry 所说,在 DN 语法的属性中存储空值或 null 值是错误的。

    某些 LDAP 服务器实现不允许输入不存在 DN 条目的 DN。

    也许,如果您的 DN 一致,您可以使用以下内容:

    (&(!(manager=cn*))(manager=*))
    

    这应该返回经理的任何值,如果经理有一个值,它不是以“cn”开头的。

    但是,一些 LDAP 实现不允许对 DN 语法属性进行子字符串搜索。

    -吉姆

    【讨论】:

    • 不知何故,每个人似乎都在架构和此类问题上偏离了方向;我的问题是是否有办法过滤这样的条目,而你最接近回答这个问题的方式是告诉我我必须在我的客户端代码中过滤掉这样的条目,这就是我害怕,但我认为这是正确的。接受,谢谢。
    • 没有偏题:模式在确定可以使用哪些类型的过滤器方面发挥作用。断言取决于属性的类型、它的语法以及它的排序和匹配规则。这就是断言的工作原理。
    【解决方案2】:

    使用\00搜索空值

    例如:

    ldapsearch -D cn=admin -w pass -s sub -b ou=users,dc=acme 'manager=\00' uid manager
    

    确保您是否在命令行上使用空值并在其周围使用引号,以防止操作系统外壳向 LDAP 发送空字符。例如,这不起作用:

     ldapsearch -D cn=admin -w pass -s sub -b ou=users,dc=acme manager=\00 uid manager
    

    有很多网站引用了这个以及其他特殊字符。示例:

    【讨论】:

    • 这似乎在 Powershell 中不起作用,带有 RSAT 活动目录模块。此功能可能是您正在使用的ldapsearch 实现的一个意外。
    【解决方案3】:

    这篇文章http://technet.microsoft.com/en-us/library/ee198810.aspx 引导我找到了解决方案。唯一的变化是感叹号的位置。

    (!manager=*)
    

    它似乎按预期工作。

    【讨论】:

    • ldap_search_ext:错误的搜索过滤器 (-7)
    • 最近的编辑与作者的意图相冲突,导致帖子只是重申了 OP 已有的内容。但是,我已恢复的原始答案是无效的语法,并且链接的文章是不正确的,除非显然是 MS Active Directory,已知它与 LDAP RFC 相当不兼容..
    【解决方案4】:

    LDAP 中的这些情况在语义上没有区别。

    【讨论】:

    • 你会这么想,但我不能使用上面的过滤器来选择这样的实体! (即属性存在但空白的地方)。
    • 只是为了确认一下,它允许我找到没有属性的条目,但不能找到属性为空的条目(空字符串)。
    • @mydoghasworms 你完全错过了我的观点。您正在做一个没有区别的区别。
    【解决方案5】:

    我需要进行查询以获取所有具有 managedBy 值集(非空)的组,这给出了一些不错的结果:

    (!(!managedBy=*))
    

    【讨论】:

    • 这是相反的答案。
    • 这也是无效的语法。
    【解决方案6】:

    属性的架构定义确定属性是否必须具有值。如果给定示例中的manager 属性是RFC4524 中定义的属性,OID 为0.9.2342.19200300.100.1.10,则该属性具有DN 语法。 DN 语法是一系列相关的可分辨名称,不能为空。示例中给出的过滤器用于使 LDAP 目录服务器在搜索结果中仅将不具有 manager 属性的条目返回给 LDAP 客户端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-08
      • 2019-09-08
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-29
      • 2010-09-20
      相关资源
      最近更新 更多