Например, это ldapquery и его вывод:
# ldapsearch -LLL -h myldaphost -D uid=myname,ou=People,ou=MyBranch,o=MyOrg -x -w mypasswd -b cn=TEST_USERS,ou=Groups,ou=MyBranch,o=MyOrg uniqueMember
dn: cn=TEST_USERS,ou=Groups,ou=MyBranch,o=MyOrg
uniqueMember: uid=user1,ou=People,ou=MyBranch,o=MyOrg
uniqueMember: uid=user2,ou=People,ou=MyBranch,o=MyOrg
uniqueMember: uid=user3,ou=People,ou=MyBranch,o=MyOrg
uniqueMember: uid=user4,ou=People,ou=MyBranch,o=MyOrg
Скажем, у каждого DN uniqueMember также есть атрибут Employee number.
ldapsearch -LLL -h myldaphost -D uid=myname,ou=People,ou=MyBranch,o=MyOrg -x -w mypasswd -b uid=user1,ou=People,ou=MyBranch,o=MyOrg employeeNumber
dn: uid=user1,ou=People,ou=MyBranch,o=MyOrg
employeeNumber: 5282345
Как мы можем получить номера сотрудников всех сотрудников группы с помощью одного запроса?
Вы не можете, по крайней мере, без накладки. LDAP не является SQL и изначально не поддерживает операции соединения.
Если вам нужна эта информация, вам нужно будет выполнить 1 + n запросов.
Кроме можно сделать эквивалент следования одному атрибуту со значением dn с помощью memberOf
наложение. В этом случае строка фильтра memberOf=cn=groupname,ou=groups,dc=example,dc=com
.
Есть I-D для Управление разыменованием LDAP который можно использовать с операциями поиска для разыменования DN один уровень глубокий.
Два препятствия с его использованием:
При использовании элемента управления deref следует позаботиться о том, чтобы данные не извлекались несколько раз. Например, если пользователь является членом многих групп, вы должны получать одни и те же данные много раз, что может существенно снизить производительность.
Так что, возможно, соединение на стороне клиента в любом случае будет лучшим решением.