Как получить список только тех пользователей и групп, которые были добавлены с определенной даты из каталога LDAP?

Мое приложение выполняет запрос LDAP один раз в день и извлекает всех пользователей и группы в заданном контейнере. Как только он получен, мое приложение перебирает список пользователей групп, добавляя только новые в базу данных моего приложения (оно добавляет только имя пользователя).

Если есть 50 000 пользователей, мой сервер приложений занят 45 минут каждый день, выполняя эту операцию.

Есть ли способ указать, что мне нужна «дельта» в моем запросе LDAP, чтобы я получал только тех пользователей, которые были добавлены/изменены/удалены с момента моего последнего запроса LDAP?


person Community    schedule 17.08.2009    source источник


Ответы (5)


Я думаю, что в каждой записи должно быть modifyTimestamp. Взгляните на что-нибудь вроде браузера softerra ldap (http://download.softerra.com/files/ldapbrowser26.msi). Если он существует, вы сможете добавить условие в свой запрос ldap для поиска записей, которые были изменены с момента последнего запуска задания синхронизации.

person pjp    schedule 17.08.2009
comment
Любая лучшая идея? Потому что насколько я знаю, что modifyTimestamp не реплицируется. - person Ender; 11.07.2017

Это зависит от вашего каталога. Должен быть атрибут, такой как метка времени или порядковый номер, который вы можете использовать для фильтрации вашего запроса LDAP. Например, в Active Directory значение равно «uSNChanged».

person Andrew Strong    schedule 17.08.2009

Существует два основных варианта отслеживания изменений: опрос и 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

person serialhobbyist    schedule 17.08.2009
comment
спасибо, ребята, я попробую все из них. Между тем я использую openLDAP и электронный каталог - person ; 18.08.2009
comment
Ах, извините: я говорил об AD, а не о LDAP в целом. - person serialhobbyist; 18.08.2009

Для пользователей попробуйте:

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» для настройки вашего часового пояса.

person Brett    schedule 09.01.2019

Вам необходимо проверить операционные атрибуты вашего каталога.

С OpenLDAP вы можете добавить знак +, чтобы получить рабочие атрибуты и проверить из createTimestamp:

Он всегда в формате Zulu, т.е. YYYYMMDDHHMMSSZ. С другими DS, такими как fedora-ds, вам нужно искать атрибут операции.

ldapsearch -x ‹ другие_параметры > createTimestamp

person atolani    schedule 17.01.2012