#active-directory #ldap #ldap-query
Вопрос:
У меня есть требование, в котором мне нужно выполнить запрос, как показано ниже, и получить 2-3 атрибута для всех сущностей, удовлетворяющих этому запросу. Количество различаемых имен будет составлять около 100 в одном запросе. Как я вижу в документации Microsoft, что DistinguishedName не индексируется, я подозреваю, что это может вызвать проблемы с производительностью.
Кто-нибудь знает, действительно ли это вызовет проблемы с производительностью? Помимо приведенного ниже фильтра ldap, мне, очевидно, придется использовать область ПОДДЕРЕВА.
(|(distinguishedName=<DN 1 goes here>)(distinguishedName=<DN 2 goes here>))
Правка 1:
Я попробовал это в своем тестовом Active Directory, в котором ~6 тыс. записей.
Internal event: A client issued a search operation with the following options.
Starting node:
DC=example,DC=com
Filter:
( |
(distinguishedName=CN=user-1,CN=large-test,CN=Users,DC=example,DC=com)
(distinguishedName=CN=user-2,CN=large-test,CN=Users,DC=example,DC=com)
(distinguishedName=CN=user-3,CN=large-test,CN=Users,DC=example,DC=com)
(distinguishedName=CN=group1,CN=large-test,CN=Groups,DC=example,DC=com)
)
Search scope:
subtree
Attribute selection:
mail,objectClass
Server controls:
Visited entries:
4
Returned entries:
4
Used indexes:
idx_distinguishedName:4:N;idx_distinguishedName:1:N;idx_distinguishedName:1:N;idx_distinguishedName:1:N;
Pages referenced:
123
Pages read from disk:
0
Из результатов видно, что он посетил только 4 записи, которые я искал, используя некоторые индексы. Я проверил с помощью инструмента оснастки схемы (просто для уверенности), и он не показывает индексы на DistinguishedName. Хотя я не уверен, как он использует эти индексы.
Комментарии:
1. Что вы пробовали? Как часто вы будете запускать этот запрос? Как вы выполняете запрос? (Код? заявление? JNDI?)
2. Я бы выбрал все группы в active directory и их участников. Мне также нужно будет получать электронные письма участников. Поскольку во время выборки списка групп он возвращает только dn участника, а не адрес электронной почты, мне нужно будет отдельно получать электронные письма, соответствующие этим DNS. Поскольку число участников может быть большим, этот запрос будет выполняться довольно часто. Мы будем запускать этот запрос через наше приложение java, используя некоторую библиотеку ldap (unboundid).
3. Для
distinguishedName
атрибута не установлен флаг поиска по индексу, поскольку он не является реальным атрибутом . Честно говоря, это очень похоже на воображаемую проблему. Если вы действительно обеспокоены: попробуйте реализовать логику запроса в своем приложении, а затем протестируйте ее на контроллере постоянного тока с включенным ведением журнала диагностики4. Спасибо, Матиас. Я искал что-то подобное, что могло бы помочь мне диагностировать, эффективен запрос или нет. Я попробую это сделать.
5. Попробовал запустить образец запроса в тестовом active directory и обновил приведенные выше результаты.
Ответ №1:
Microsoft Active Directory хранит членство в группах на начальном уровне, поэтому вы можете использовать его для получения атрибута электронной почты.
Напр. ldapsearch .... -b SEARCH_BASE "(|(memberOf=GROUP_DN_1)(memberOf=GROUP_DN_2)...)" mail
Комментарии:
1. Я также пытался это сделать, но проблема здесь та же, что и с DistinguishedName, поскольку memberOf также не индексируется.
2. таким образом, вы получаете «ошибку административного ограничения» обратно? Не могли бы вы опубликовать сообщение об ошибке?
3. Я еще не пробовал этот подход, но, пожалуйста, ознакомьтесь с моим обновлением выше с атрибутом DistinguishedName.