С Active Directory мне недавно пришлось столкнуться на практике в большой компании. LDAP это протокол по которому можно читать с 389 порта ldap сервера иерархические данные, а также изменять и фильтровать их. Используются эти данные как некий аналог регистра Windows, только для публичных целей. Обычно AD используется в больших корпорациях что-бы хранить личную информацию сотней сотрудников, сгруппированных по департаментам и регионам.
Адрессация
При работе с LDAP (я буду использовать этот термин, хотя это всё равно что говорить HTTP вместо Apache Server) можно заметить сначала полный хаос — какие-то сокращения, завёрнутые в одно иерархическое дерево, по которому ещё можно и поиск делать странный. На самом деле — дерево строится без всяких ID’шников, по именам папок. А сокращения это:
DN (Distinguished Name). Полное местонахождение от корня, типа URL — уникален и состоит из родителей.
RDN (Relative Distinguished Name). Фактически — имя, просто без родителей, должно быть под своим родителем уникально вроде как.
DC (Domain Controller). Верхний тип подразделения, аналог домена.
OU (Organisation Unit). Обычное подразделение или папка, как правило означает что в ней — группа объектов.
CN (Common Name). Папка и документ в одном лице. Дейтсвительно, какая разница?
Фактически же, LDAP поддерживает и канонический вид пути в виде URL, но для большей запутанности всё-таки использует аддрессацию с этими сокращениями.Вот и получается превращение
foo.org/Marketing/HPLaser3 в CN=HPLaser3,OU=Marketing,DC=foo,DC=org
Фильтрация
В отличие от HTTP сервера, который отвечает только за выдачу документов по нужному URL’у, ldap включает в себя и встроенный поиск. От этого ни тепло ни холодно, потому что расширения для ldap нет, всем разработчикам проще выпустить свой ldap сервер. Поэтому поиск тоже немного кривой из-за синтаксиса — в нём можно найти по значению параметра объекта сам объект, но логика AND и OR при больших конструкциях рискованна.
Вместо типичного запроса (userClass=*) можно ввести к примеру (sn=vasja pupkin) и найти один или несколько объектов, у которых этот параметр такой же. Через php это делается после connect и bind, при помощи ldap_search, возможно прийдётся ldap подгружать как extension из .dll/.so
Имена атрибутов у объектов — нечуствительны к регистру. А начиная с третьей версии , протокол поддерживает и тн. «Operational attributes» которые задаются сервером и по умолчанию в поиске не показываются. Удобно когда всё-таки надо что-то скрыть от пользователей.
Софт
Что-бы не мучаться и гадать почему не работает соединение или откуда брать данные, можно быстро поискать при помощи ldap браузеров:
- Apache Directory studio , 32 мега, захотел JVM, пришлось скопировать из папки Zend. Красивый, быстрый и каким-то боком интегрируется в Eclipse.
- Softella LDAP browser, на вид функциональный но грузит данные очень медленно
- JExplorer старый, захотел поновой JVM
- phpLdapAdmin, по аналогии с phpmyadmin ставится на сервак
Ну а если вы только вы сис.админ то серверы на выбор:
- OpenLDAP — бесплатный
- Novell eDirectory — говорят хорош
- Red Hat Directory Server и Fedora Directory Server
- Microsoft Active Directory — вроде есть на Windows серваках
- Sun Java System Directory Server
- IBM Tivoli Directory Server