Я пытаюсь написать единый фильтр поиска LDAP для извлечения пользователей, являющихся членами определенной группы.
Мы используем пользовательскую реализацию LDAP (работающую на OpenLDAP: slapd 2.4.40), в которой сопоставляются отношения между пользователями и группами Group (memberUid) -> User (uid)
.
Пользовательский LDIF не имеет атрибутов memberOf, что делает невозможным использование обычного подхода(&(objectClass=person)(memberOf=login_group))
Пользовательские LDIF-файлы выглядят следующим образом:
dn: uid=user1,ou=people,dc=example,dc=com
cn: user1
displayName:: User1
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: shadowAccount
objectClass: posixAccount
uidNumber: 2698
uid: user1
Группа LDIF выглядит следующим образом:
dn: cn=login_group,ou=groups,dc=example,dc=com
gidNumber: 1643
objectClass: posixGroup
objectClass: top
objectClass: groupOfUniqueNames
cn: login_group
memberUid: user1
memberUid: user2
Можно ли написать один LDAP-запрос, который будет эквивалентен SQL JOIN или фильтру «IN», например:
SELECT u.* FROM user u WHERE u.uid IN (SELECT memberUid FROM group WHERE cn=login_group)
Это должен быть один запрос, поскольку он будет использоваться для управления доступом к стороннему порталу; мы не можем изменить реализацию клиента.