我已经搜索过这个主题,但我发现的只是过滤器,它们返回不存在某个属性的条目,例如:
(!(manager=*))
但是,我想查找存在属性但具有空值(即空/空白字符串)的条目。我可以使用 LDAP 过滤器执行此操作吗?如果可以,如何操作?
编辑:
只是为了确认一下,上面的过滤器会找到没有属性的条目,但不会找到属性为空的条目(空字符串)。
这取决于 LDAP 实现还是什么?
我已经搜索过这个主题,但我发现的只是过滤器,它们返回不存在某个属性的条目,例如:
(!(manager=*))
但是,我想查找存在属性但具有空值(即空/空白字符串)的条目。我可以使用 LDAP 过滤器执行此操作吗?如果可以,如何操作?
编辑:
只是为了确认一下,上面的过滤器会找到没有属性的条目,但不会找到属性为空的条目(空字符串)。
这取决于 LDAP 实现还是什么?
在 LDAP 中,没有用于确定空字符串的查询方法。
最佳实践是清理您对 LDAP 的数据输入,因为 LDAP 中的空值或 null 值根本没有值。
要确定这一点,您需要使用值 (manager=*) 查询所有内容,然后使用代码确定“空格”或空值。
正如特里所说,在 DN 语法的属性中存储空值或空值是错误的。
某些 LDAP 服务器实现不允许输入不存在 DN 条目的 DN。
也许,如果您的 DN 一致,您可以使用以下内容:
(&(!(manager=cn*))(manager=*))
这应该返回经理的任何值,其中经理有一个值并且它不是以“cn”开头的。
但是,某些 LDAP 实现不允许对 DN 语法属性进行子字符串搜索。
-吉姆
使用搜索空值\00
例如:
ldapsearch -D cn=admin -w pass -s sub -b ou=users,dc=acme 'manager=\00' uid manager
确保您是否在命令行上使用空值在其周围使用引号,以防止 OS shell 向 LDAP 发送空字符。例如,这不起作用:
ldapsearch -D cn=admin -w pass -s sub -b ou=users,dc=acme manager=\00 uid manager
有很多网站引用了这个,以及其他特殊字符。例子:
这篇文章http://technet.microsoft.com/en-us/library/ee198810.aspx引导我找到了解决方案。唯一的变化是感叹号的位置。
(!manager=*)
它似乎按预期工作。
从语义上讲,LDAP 中的这些情况之间没有区别。
我需要进行查询以获取所有具有 managedBy 值集(非空)的组,这给出了一些不错的结果:
(!(!managedBy=*))
属性的模式定义确定属性是否必须具有值。如果manager
给定示例中的属性是在RFC4524中使用 OID定义的属性0.9.2342.19200300.100.1.10
,则该属性具有 DN 语法。DN 语法是相对专有名称的序列,不能为空。示例中给出的过滤器用于使 LDAP 目录服务器在搜索结果中仅返回不具有manager
LDAP 客户端属性的条目。