6

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

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

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

4

5 回答 5

2

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

于 2009-08-17T07:28:50.230 回答
1

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

于 2009-08-17T07:45:07.247 回答
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

于 2009-08-17T14:30:00.733 回答
1

对于用户尝试:

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/Zulu 时间或使用“.nZ”后缀来调整您的时区。

于 2019-01-09T15:47:22.070 回答
0

您需要检查 Directory 的操作属性。

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

它始终采用 Zulu 格式,即 YYYYMMDDHHMMSSZ。与 fedora-ds 等其他 DS 一样,需要搜索操作属性。

ldapsearch -x <其他选项> createTimestamp

于 2012-01-17T23:32:39.693 回答