有没有办法用SQL语法中的“IN”语句查询LDAP?我的意思是提供一个值列表,而不是一次又一次地重复字段名称。
让我解释一下:))
我的查询类似于:
(|(name=joe)(name=bill)(name=mark)(name=john)(name=rob))
有没有办法缩小此查询以获得如下内容:
(name=joe,bill,mark,john,rob)
由于
答案 0 :(得分:7)
不幸的是没有。 ldapsearch过滤器必须符合RFC2254标准。
但是您总是可以编写自己的包装器(例如调用ldapsearch的shell脚本),它会将类似列表的语法重写为正确的RFC2254语法:)
答案 1 :(得分:1)
另外,我猜你想让那个查询使用|而不是&。
答案 2 :(得分: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
创建动态组。动态组的优点是每次组成为搜索的一部分时都会更新,不需要手动更新。
或者,一些专业质量的目录服务器支持使用虚拟属性,这会导致根据某些其他条件为条目生成属性。
可以这么说,假设您搜索的条目以某种方式相关,请使用目录服务器分组机制将它们组合在一起。如果它们不相关,那么过滤器必须与您列出的一样,但|
而不是&
除外。