【发布时间】:2009-04-07 22:31:02
【问题描述】:
我需要从 PHP 应用程序中为特定组中的所有用户选择一些属性。我意识到我可以查询组的“成员”属性以获取每个成员的 dn,然后对每个成员的属性进行单独的 LDAP 查询。但是,我希望有一个我可以执行的查询会立即返回所有结果,以防止 PHP 应用程序和 LDAP 服务器 (AD) 之间的过多来回。
使用LDAP browser 我可以成功地在我的整个域上运行搜索:
Search DN: DC=middlebury,DC=edu
Filter: (memberOf=CN=BG_Cells,OU=General,OU=Groups,DC=middlebury,DC=edu)
Attributes: objectClass,mail,givenName,sn,sAMAccountName,telephoneNumber
并取回预期的结果。但是,当我使用 PHP 的 ldap_search() 方法尝试此过滤器时,我得到一个带有代码 1 的 Operations error。
下面是我正在使用的 PHP。
....
$baseDN = 'DC=middlebury,DC=edu';
$filter = '(memberOf=CN=BG_Cells,OU=General,OU=Groups,DC=middlebury,DC=edu)';
$attributes = array('objectClass','mail','givenName','sn','sAMAccountName','telephoneNumber');
$result = ldap_search($connection, $baseDN, $filter, $attributes);
if (ldap_errno($connection))
print "Read failed for $filter with message: ".ldap_error($connection).", #".ldap_errno($ connection));
其他过滤器可以很好地处理这些属性,并且仅使用 array('mail') 或属性的空数组不会消除错误结果,所以我确定问题出在我的过滤器而不是连接或属性上设置。
第二种选择是在组的“成员”字段中对组成员 dns 进行一次查询,然后为每个成员 dn 构建一个长 OR 查询。然而,这仍然会涉及两个查询。
那么有没有更好的方法来获取每个成员的属性,最好是在一个查询中?
【问题讨论】:
-
请贴出相关代码。
-
我已经用相关的 PHP 更新了问题。
标签: php active-directory ldap