0

如果这个问题没有被问过一百万次,我会感到惊讶,但我还没有找到解决方案。

我正在使用 PHP“ldap_search”列出 Active Directory 用户,并希望使用以下方法显示某些“操作属性”,例如创建用户的日期 (createTimeStamp):

$filter = "CN=*";
$result = ldap_search($ldap, $ldap_dn, $filter) or exit("Unable to search LDAP server");

这可行,我得到了一个用户列表,但是没有返回createTimeStamp 。我读过这是因为它被归类为“操作属性”,不属于正常结果集。显然,只有在特别请求时才会返回这些属性。所以我然后尝试了这个:

$filter = "CN=*";
$attr = array("samaccountname","createTimeStamp");
$result = ldap_search($ldap, $ldap_dn, $filter, $attr) or exit("Unable to search LDAP server");

这仍然没有返回createTimeStamp的值。所以我的问题是:是否可能以某种方式将 Active Directory 配置为不返回这些值,如果是,是否可以更改?


编辑:如果有帮助,我们可以检索大整数/间隔格式的lastLogon,但不能检索UTC 编码时间格式的createTimeStamp;我不确定这有多相关,因为我们遇到的问题是根本没有返回数据。


编辑 2:我使用 LDIFDE ( http://support.microsoft.com/kb/237677 ) 使用此行搜索 Active Directory:

ldifde -f ldaptest.txt -s myServer -d "DC=domain,DC=com" -p subtree -r "(sAMAccountName=*BWayne*)" -l "createTimeStamp"

...它返回这个:

dn: CN=Wayne Bruce,OU=Section....
changetype: add
createTimeStamp: 20100406101951.0Z

因此,如果这是一个访问问题,那么它似乎只会影响 PHP 脚本。

4

1 回答 1

0

Entries and attributes can be protected by access controls. Use a known good tool to attempt to retrieve createTimestamp to determine if access controls are in place. Try this on an entry whch is known to have the createTimestamp attribute and on your test entry:

ldapsearch -h hostname -p port -D bindDN -w bindPassword \
    -b baseObject -s base '(&)' createTimestamp

Be sure to use the same DN to authenticate the tests in each case.

于 2013-10-02T18:16:47.880 回答