LDAP 在 PHP 中搜索多个 DN


LDAP search multiple DNs in PHP

根据 php.net 手册中的这些帖子,应该可以为ldap_search()提供多个DN。

但是,我无法使以下实现正常工作:

$dn[] = 'ou=Red,ou=Teams,ou=Users,dc=example,dc=org';
$dn[] = 'ou=Green,ou=Teams,ou=Users,dc=example,dc=org';
$dn[] = 'ou=Blue,ou=Teams,ou=Users,dc=example,dc=org';
$query = ldap_search($conn, $dn, $filter, $attrs);

通过任何单独的 DN 字符串时一切都很好,但提供数组将出现错误消息:"没有这样的对象"。

一个

明显的解决方法是遍历我的 DN 数组以触发单独的查询并将所有内容推送到一个数组中。我想避免这样做,因为我在一个 DN(分页 - 示例 2(中带回 8000+ 个对象,在其他两个 DN 中各带回 ~300 个对象。

实际上是否可以搜索多个 DN?也许单个 DN 字符串中的特殊语法(符号/字符(?

搜索请求必须至少包含以下参数:

  • 搜索开始的位置的基本对象(不返回基对象上方的对象(
  • 搜索范围:base是基本对象本身,one是基本对象,并且比基对象低一级,sub是基对象和基对象下的所有条目。
  • 一个过滤器,它将返回的条目限制为与断言匹配的条目滤波器

还可以提供属性列表,尽管许多(但不是全部(LDAP API 将请求所有用户属性(如果未在搜索请求中提供(。

在列出的情况下,将基本对象设置为 ou=users,dc=example,dc=com 并使用适当的滤波器。如果 LDAP 客户机必须将返回的条目限制为从属条目要ou=redou=greenou=blue,可以使用复合可扩展匹配筛选器像(&(objectClass=inetOrgPerson)(|(ou:dn:=red)(ou:dn:=green)(ou:dn:=blue)))一样 - 使用正确的对象类,如果数据不使用 inetOrgPerson 。所有符合 LDAP 标准的服务器都支持可扩展匹配筛选器,但不兼容的服务器可能不支持此标准筛选器。

不可能

使用多个基本对象,scope参数定义有多少从属对象级别(如果有(在基本对象下方进行检查。

参见

  • LDAP:掌握搜索过滤器
  • LDAP:搜索最佳做法
  • LDAP:编程实践

你在手册中看到这个了吗?

这些数组的大小

必须与链接标识符数组的大小相同,因为数组的第一个条目用于一个搜索,第二个条目用于另一个搜索,依此类推。

基本上,$conn变量需要是一个连接数组,等于$dn数组的大小。

如果 $dn 数组中有 3 个元素,则 $conn 数组中需要 3 个元素:

$ds = ldap_connect($ldapserver);
$dn[] = 'ou=Red,ou=Teams,ou=Users,dc=example,dc=org';
$dn[] = 'ou=Green,ou=Teams,ou=Users,dc=example,dc=org';
$dn[] = 'ou=Blue,ou=Teams,ou=Users,dc=example,dc=org';
// Match connection elements to count of dn elements
for($x=0, $x < count($dn), $x++)
{
    $conn[] = $ds;
}
$query = ldap_search($conn, $dn, $filter, $attrs);