Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LDAP搜索多个完整的DNs?_Ldap_Ldap Query - Fatal编程技术网

LDAP搜索多个完整的DNs?

LDAP搜索多个完整的DNs?,ldap,ldap-query,Ldap,Ldap Query,假设我有一个由N个DNs(可分辨名称)组成的数组,例如: 它们不相关,我无法减少/简化搜索。我有N个完整的DNs,需要N个记录 我是否可以编写一个LDAP搜索,返回N条记录,每个DN一条?假设在一次搜索中,客户端和服务器的性能都会更好。如果是SQL,它将是: SELECT * FROM dc=capmon,dc=lan WHERE dn IN ( "cn=foo,dc=capmon,dc=lan", "cn=bar,dc=capmon,dc=lan", "cn=Fre

假设我有一个由N个DNs(可分辨名称)组成的数组,例如:

它们不相关,我无法减少/简化搜索。我有N个完整的DNs,需要N个记录

我是否可以编写一个LDAP搜索,返回N条记录,每个DN一条?假设在一次搜索中,客户端和服务器的性能都会更好。如果是SQL,它将是:

SELECT * 
FROM dc=capmon,dc=lan 
WHERE dn IN (
    "cn=foo,dc=capmon,dc=lan",
    "cn=bar,dc=capmon,dc=lan",
    "cn=Fred Flintstone,ou=CapMon,dc=capmon,dc=lan",
    "cn=Clark Kent,ou=yada,ou=whatnot,dc=capmon,dc=lan"
)
而不是在
循环中对
进行单独的LDAP搜索(我知道怎么做)

我尝试使用MS Active Directory。在这里,所有字段(似乎)都有一个
discrimitedName
属性,还有一个类似这样的搜索过滤器(为了可读性,我添加了一些新行):

(|
(区分名称=cn=P策略,dc=capmon,dc=lan)
(DifferentizedName=cn=Users,dc=capmon,dc=lan)
)
但这不起作用:

(|
  (dn=cn=ppolicy,dc=capmon,dc=lan)
  (dn=cn=Users,dc=capmon,dc=lan)
  <more ORed terms>
)
(|
(dn=cn=P政策,dc=capmon,dc=lan)
(dn=cn=Users,dc=capmon,dc=lan)
)
即使返回的记录看起来包含
dn
属性:-(

OpenLDAP服务器的记录没有
distrignizedName
属性,并且上面的两个过滤器都不适用于它

我可以做一些对大多数主要LDAP服务器有效的事情吗?

不可能在一次操作中“读取”多个条目。 您可以执行单个搜索操作来匹配并返回多个条目,但不能搜索“DN”本身

我见过一些应用程序试图通过使用复杂的过滤器获取多个条目,例如“(|(cn=foo)(cn=bar)(cn=Fred Flintstone))”,但这可能会导致更多的条目,除非所有CN值都是唯一的。这也不是一个好的做法,因为您可以在筛选器中使用的元素数量有限制,并且此类请求通常不会根据I/O进行优化


读取每个invidual条目会更快,因为LDAP服务器针对此类操作进行了优化。如果您想减少延迟,可以在同一个连接上执行多个异步搜索操作。

您根本不需要编写搜索。您可以直接访问每个DN。是的,这也是您编写的……但我仍然不知道使用或使用Perl的Net::LDAP在不使用ldapsearch的情况下“直接访问一个DN”。在给定N个DNs的情况下,如何做到这一点?我可以在一次“访问”中“直接”访问多个DNs吗PDU?如果你问的是OpenLDAP实用程序,你就偏离主题了,尽管我确信这里有一个符合这种情况。我真的还是不明白。当我是OP问这个问题时,我怎么能偏离主题?你能提到一个可以“直接访问每个DN”的工具吗对一个标准的LDAP数据库?那么我也许可以使用这个工具。我并不是想在这里固执,我只是诚实地不知道如何“直接访问每个DN”。除非是关于计算机编程的问题,否则这是离题的。看看所有的OpenLDAP实用程序。你会找到它的。
(|
  (distinguishedName=cn=ppolicy,dc=capmon,dc=lan)
  (distinguishedName=cn=Users,dc=capmon,dc=lan)
  <more ORed terms>
)
(|
  (dn=cn=ppolicy,dc=capmon,dc=lan)
  (dn=cn=Users,dc=capmon,dc=lan)
  <more ORed terms>
)