Мне нужен список всех пользователей, общих для известного набора групп, с использованием одного запроса LDAP нашей Active Directory. Судя по тому, что мы читали до сих пор, казалось, что это невозможно, но я подумал, что лучше всего спросить коллективный разум.
Можно ли запрашивать LDAP пользователей, общих для набора групп
Ответы (3)
Да, это возможно с запросом с областью действия атрибута. Для этого требуется W2K3 AD или более поздняя версия, но вы получите всех пользователей, которые имеют определенный атрибут, то есть членство в группе или, в вашем случае, в нескольких группах (пересечение групп). Один из лучших примеров взят из книги Джо Каплана и Райана Даннса «Руководство для разработчиков .NET по программированию служб каталогов» для работы с AD.
Предостережение. К этому моменту вы закончили тривиальные поиски в AD, и ряд вещей становится важным, например, корень поиска, область действия и эффект поиска в потенциально ОГРОМНОМ наборе данных для элементов, которые вам нужны. . Просмотр 50 или 60 000 пользователей для поиска членов группы действительно влияет на производительность, и будьте готовы выполнять постраничные результаты или аналогичные действия в случае большого набора данных. Каплан/Райан отлично справляются с практической работой, чтобы привести вас туда, где вы должны быть. Тем не менее, я с большим успехом использовал их в двух проектах AD. Возможность извлекать данные из AD без рекурсивных запросов ОЧЕНЬ стоит того, и я обнаружил, что это быстро, пока я контролирую размер своего набора данных.
Попробуй это:
(&(objectCategory=Person)
(&
(memberOf=CN=group1,dc=company,dc=local)
(memberOf=CN=group2,dc=company,dc=local)
(memberOf=CN=group3,dc=company,dc=local)
)
)
Это похоже на мой вопрос, за исключением того, что я хотел, чтобы все пользователи, которые НЕ были членами групп. Вам нужно будет удалить все пробелы для работы большинства инструментов запросов.
Это невозможно в одном запросе, если ваши группы содержат вложенные группы.
Вам нужно будет написать некоторый код, который рекурсивно разрешает членов группы и выполняет логический эквивалент «внутреннего соединения» результатов, создавая список пользователей, общих для всех исходных групп.