Несогласованные результаты фильтрации LDAP

Я пытаюсь выяснить, является ли пользователь косвенным членом определенной группы AD. Это делается из программы Delphi XE5, но для ясности я написал (и протестировал) свои примеры в PowerShell.

К сожалению, я получаю совершенно противоречивые результаты из моих запросов LDAP: один и тот же запрос иногда работает нормально, а иногда возвращает, что пользователь не является членом данной группы.

Вот пример (powershell) того, что я пытаюсь:

get-aduser -LDAPFilter "(memberof:1.2.840.113556.1.4.1941:=CN=egaa_app,OU=Applications,OU=access,OU=groups,OU=xxx,DC=xxx,DC=xxx,DC=xxx)" -SearchBase "CN=usr-sgr,OU=expert1,OU=experts,OU=remoteusers,OU=users,OU=exogit,OU=xxx,DC=xxx,DC=xxx,DC=xxx"

Приведенная выше команда должна возвращать объект пользователя usr-sgr, если он прямо или косвенно является членом группы AD groupegaa_app,OU=Applications,OU=access,OU=groups,OU=xxx,DC=xxx,DC=xxx,DC=xxx.

Тем не менее, когда я запускаю его один раз, я получаю пустой результат. Если я открою пользователя в AD MMC и каким-то образом обновлю его (в моем случае я изменил «основную группу» пользователя, а затем изменил ее обратно), тот же запрос успешно вернет объект пользователя.

Я также попытался использовать «обратный» запрос (который проверяет, содержит ли данная группа пользователя косвенно), и я стал свидетелем того же поведения.

Все это было сделано на рядовом сервере (Windows 2008 R2, с исправлениями) из того же сеанса входа в систему.


person Stephane    schedule 24.09.2015    source источник


Ответы (1)


Думаю, я могу объяснить это вам.

Сначала небольшой отзыв о LDAP_MATCHING_RULE_IN_CHAIN :

LDAP_MATCHING_RULE_IN_CHAIN — это OID правила сопоставления, предназначенный для предоставления метода поиска происхождения объекта. Примером такого запроса является запрос, предназначенный для проверки того, является ли пользователь «user1» членом группы «group1». Вы должны установить базу для DN пользователя (cn=user1, cn=users, dc=x) и область для base и использовать следующий запрос.

(memberof:1.2.840.113556.1.4.1941:=cn=Group1,OU=groupsOU,DC=x)

Здесь атрибут memberof — это атрибут, который будет искаться по цепочке в каждом групповом объекте. Используйте редактор атрибутов из MMC «активный каталог пользователя и компьютера», чтобы следовать этому атрибуту:

Редактор атрибутов AD

А затем измените основную группу, вы увидите, что новая основная группа исчезнет из списка атрибутов memberof, а старая появится в атрибуте.

Вывод. Основная группа не поддерживается LDAP_MATCHING_RULE_IN_CHAIN.

В любом случае будьте внимательны при настройке области действия -SearchScope в PowerSell.

Кстати, для меня лучшим инструментом для тестирования такого рода фильтров является LDIFDE. .EXE.

ldifde -f c:\temp\test.ldif -d "CN=Jean-Paul Blanc,OU=Interne,OU=Silogix,DC=silogix,DC=local" -r "(memberof:1.2.840.113556.1.4.1941:=CN=bidon,OU=Interne,OU=Silogix,DC=silogix,DC=local)" -p base
person JPBlanc    schedule 24.09.2015
comment
Вот и все! Большое спасибо. Однако мне интересно, как правильно программно проверить, принадлежит ли пользователь к данной группе. - person Stephane; 25.09.2015
comment
У вас есть общая картина, вам просто нужно добавить основную группу. Я дал некоторые подсказки здесь - person JPBlanc; 25.09.2015