如何从LDAP目录中检索自特定日期以来添加的那些用户和组的列表?

时间:2009-08-17 07:06:52

标签: ldap ldap-query

我的应用程序每天执行一次LDAP查询,并获取给定容器中的所有用户和组。一旦获取,我的应用程序将遍历组的用户列表,仅将新的用户添加到我的应用程序的数据库(它只添加用户名)。

如果有50,000个用户,我的应用服务器每天都忙着45分钟执行此操作。

有没有办法在我的LDAP查询中指定我需要“delta”,以便我只检索自上次LDAP查询以来添加/修改/删除的用户?

5 个答案:

答案 0 :(得分:2)

我认为每个条目都应该有一个modifyTimestamp。看一下像softerra ldap浏览器(http://download.softerra.com/files/ldapbrowser26.msi)这样的东西。如果它存在,您应该能够在ldap查询中添加一个条件,以查找自上次运行同步作业以来已更改的条目。

答案 1 :(得分:1)

这取决于您的目录。应该有一个属性,如时间戳或序列号,可用于过滤LDAP查询。例如,在Active Directory中,值为'uSNChanged'。

答案 2 :(得分:1)

跟踪更改有两个主要选择:轮询和DirSync。这些文章应该为您提供一些背景知识,帮助您选择最适合您的文章。

http://support.microsoft.com/kb/891995

http://msdn.microsoft.com/en-us/library/ms677974(VS.85).aspx

这里有一些.NET的东西:

http://msdn.microsoft.com/en-us/library/system.directoryservices.directorysynchronization.aspx

答案 3 :(得分:0)

您需要检查目录的操作属性。

使用OpenLDAP,您可以添加+符号以获取操作属性,并从createTimestamp:

进行检查

始终采用祖鲁格式,即YYYYMMDDHHMMSSZ。使用像fedora-ds这样的其他DS你需要搜索操作属性。

ldapsearch -x< other_options> createTimestamp

答案 4 :(得分:0)

对于用户,请尝试:

directorySearcher.Filter = "(&(objectCategory=person)(objectClass=user)(whenChanged>=" + yourLastQueryDate.ToString("yyyyMMddHHmmss") + ".0Z))";

对于团体,请尝试:

directorySearcher.Filter = "(&(objectCategory=group)(whenChanged>=" + yourLastQueryDate.ToString("yyyyMMddHHmmss") + ".0Z))";

然后:

SearchResultCollection adSearchResults = dSearcher.FindAll();

注意:请确保您的上一个查询日期为UTC /祖鲁时间,或使用后缀“ .nZ”调整您的时区。