Назад | Перейти на главную страницу

Можем ли мы получить атрибуты всех указанных DN в LDAP с помощью одного запроса?

Например, это 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 один уровень глубокий.

Два препятствия с его использованием:

  • Поддерживается только OpenLDAP (с наложением slapo-deref) и IIRC также 389-DS.
  • Вы используете атрибут члена группы uniqueMember который не Необычное имя синтаксис (Syntax-OID 1.3.6.1.4.1.1466.115.121.1.12), но Имя и необязательный UID (Синтаксис-OID 1.3.6.1.4.1.1466.115.121.1.34). Но draft-masarati-ldap-deref явно требует синтаксиса DN.

При использовании элемента управления deref следует позаботиться о том, чтобы данные не извлекались несколько раз. Например, если пользователь является членом многих групп, вы должны получать одни и те же данные много раз, что может существенно снизить производительность.

Так что, возможно, соединение на стороне клиента в любом случае будет лучшим решением.