2009-05-29 82 views
4

有没有一种方法可以使用类似于SQL中的“IN”语句的语法来查询LDAP?我的意思是提供一个值列表,而不是一次又一次地重复字段名称。要与列表进行比较的LDAP查询语法

让我解释一下:)

我有类似的查询:

(|(name=joe)(name=bill)(name=mark)(name=john)(name=rob)) 

有没有办法来缩小这个查询得到的东西是这样的:

(name=joe,bill,mark,john,rob) 

感谢

回答

7

不幸的是没有。 ldapsearch过滤器必须符合RFC2254标准。

但是你可以写你自己的包装(例如shell脚本调用ldapsearch的),这将改写你的列表类似的语法正确成语法RFC2254 :)

1

而且,我猜你想要的查询中使用|而不是&。

+0

谢谢,我只是在我原来的问题:) – MaxP 2012-03-19 14:12:58

1

不,但您希望的结果可以通过多种方式实现。一种是以某种方式将条目分组在一起。假设“乔”,“账单”,“标记”和其他人有共同之处是合理的。使用groupOfUniqueNames对象类,目录管理员可以将“joe”,“bill”,“mark”和其他组放在一个组中,以便可以检索它们。

或者,如果“joe”,“bill”,“mark”和其他属性具有共同的属性,则可以在组内容由过滤器确定的情况下使用动态组。例如,如果“joe”,“bill”,“mark”和其他人向同一经理报告,并且经理的条目是name=matthew,ou=managers,dc=example,dc=com,“joe”,“bill”,“mark”,并且其他人可能有属性managersDn的值为name=matthew,ou=managers,dc=example,dc=com。目录管理员可以使用过滤器managerDn=name=matthew,ou=managers,dc=example,dc=com创建动态组。动态组的优势在于,每次组是搜索的一部分时都会进行更新,因此无需手动更新。

或者,某些专业品质的目录服务器支持使用虚拟属性,这些虚拟属性会导致基于某种其他条件为条目生成属性。

可以这么说,假设您搜索的条目以某种方式相关,请使用目录服务器分组机制将它们组合在一起。如果它们不相关,那么过滤器必须与您列出的一样,除了|而不是&