Эта статья - кратчайшее введение в LDAP и службы каталогов. Для иллюстрации излагаемого материала я буду пользоваться инструментом Softerra LDAP Browser, который можно свободно скачать с сайта производителя.
Концепцию служб каталогов и требования к их реализации определяет серия стандартов X.500 ITU-T. Здесь каталог - это специализированная база данных, оптимизированная для поиска и извлечения информации, также поддерживающая добавление и изменение данных.
Среди реализаций служб каталогов наиболее известные - OpenLDAP и MS Active Directory. Клиентами каталогов являются адресные книги почтовых клиентов, сетевые службы, такие как DNS, SMTP, корпоративные приложения и информационные системы.
Как правило, служба каталогов
- реализует протокол для взаимодействия с клиентами,
- поддерживает разграничение доступа,
- поддерживает репликацию каталогов,
- не поддерживает механизм транзакций.
Для взаимодействия со службами каталогов X.500 широко используется протокол LDAP (Lightweight Directory Access Protocol), специфицированный в RFC4510. LDAP работает поверх TCP/IP и является легковесной альтернативой протокола DAP (Directory Access Protocol), весьма требовательного к вычислительным ресурсам.
LDAP реализует протокол взаимодействия со службой каталогов и задает модель данных, соответствующую X.500. Эта модель данных такова:
- В каталоге хранятся записи (entry).
- Запись - это коллекция атрибутов (attribute), имеющая уникальное имя (Distinguished Name, DN).
- Каждый атрибут имеет тип (type) и одно или несколько значений. Синтаксис значений зависит от типа.
- Атрибут objectClass позволяет контролировать, какие атрибуты обязательны и какие допустимы в записи. Таким образом, записи, как и атрибуты, имеют тип (object class).
- Записи в каталоге организованы иерархически в виде дерева.
- Определения типов записей (object classes) и типов атрибутов сами являются записями в каталоге, в специальном поддереве, известном как schema.
Запустим Softerra LDAP Browser и откроем одну из публичных служб каталогов, параметры соединения с которыми предустановлены по умолчанию. (Настроив соединение с MS Active Directory или OpenLDAP в вашей корпоративной сети, вы можете исследовать структуру и содержимое корпоративного каталога.)
Иерархическая организация данных в каталоге часто отражает географическую или организационную структуру. Записи на верхнем уровне могут представлять страны, на нижних - области стран и организации, еще ниже - отделы внутри организаций, людей, оборудование, ресурсы. А можно построить дерево по доменным именам Internet.
Текущая выбранная запись в каталоге Carnegie Mellon University (см. картинку выше) имеет уникальное имя DN o=CMRI,o=CMU,dc=cmu,dc=edu
. Компоненты DN - имена узлов иерархической структуры от корневого до текущего (справа налево). Самый левый компонент DN называется относительным уникальным именем (Relative Distinguished Name, RDN). Таким образом, DN o=CMRI,o=CMU,dc=cmu,dc=edu
состоит из RDN o=CMRI
и DN родительской записи o=CMU,dc=cmu,dc=edu
.
Можно рассматривать DN как абсолютный путь к файлу (по аналогии с файловой системой) или как первичный ключ записи в таблице (по аналогии с реляционной БД).
В рассматриваемом DN o=CMRI,o=CMU,dc=cmu,dc=edu
два верхних уровня названы по доменным именам Internet. А уровнем ниже текущей записи располагаются записи, идентифицируемые значением атрибута ou
(см. картинку выше). Здесь имена атрибутов, идентифицирующие записи разных уровней, имеют следующие значения:
- dc
- аббревиатура от domain component
- o
- аббревиатура от organization
- ou
- аббревиатура от organizational unit
Эти имена, как и десятки других, - имена стандартных атрибутов, специфицированных в RFC 2256 и предназначенных для использования в объектных классах, описывающих людей, организации, их подразделения и т.п. Все реализациии LDAP поддерживают эти стандартные типы атрибутов. Вот еще несколько примеров: telephoneNumber
, name
, givenName
, postalAddress
, sn
(аббревиатура от surname).
В рассматриваемой записи с DN o=CMRI,o=CMU,dc=cmu,dc=edu
имеются три атрибута, objectClass
, o
и businessCategory
, по каждому из которых можно искать эту запись в каталоге.
Для поиска записей в LDAP-каталоге задаются три компонента:
- base DN (базовое уникальное имя)
- показывает, откуда в иерархии начать поиск
- scope (область поиска)
- показывает область поиска, одно из:
- одна запись, идентифицированная base DN
- записи уровнем ниже base DN, т.е. дочерние, но не внучатые
- поддерево с корнем base DN, включая корень
- filter (фильтр)
- задает условие отбора записей
Например, поиск по условию
baseDN: o=CMU,dc=cmu,dc=edu
scope: поддерево
filter: objectClass=organizationalUnit & ou=*Student*
вернет все записи из поддерева с корнем o=CMU,dc=cmu,dc=edu
, удовлетворяющие фильтру (синтаксис фильтра в этом примере легко читаемый, но неправильный, см. далее).
На заметку: cуществуют специальные базовые DN для запроса информации о возможностях сервера, для доступа к схеме (schema) и данным мониторинга.
В Softerra LDAP Browser по Ctrl+F3
вызывается окно поиска, в котором удобно экспериментировать с параметрами поиска LDAP:
В фильтре можно использовать следующие проверки для атрибутов (атрибут ou
взят для примера):
Присутствие атрибута (ou=*)
Равенство значения (ou=School)
Наличие подстроки (ou=S*)
Больше или равно (ou>=School)
Меньше или равно (ou<=School)
Приближенно равно (ou~=School)
Расширенная проверка (ou:1.2.3.4.5=School)
Заметьте, что отсутствуют проверки >
и <
. Проверка на приближенное равенство ~=
использует фонетические сравнение. Расширенная проверка для сравнения образца со значением атрибута использует реализованное LDAP-сервером правило, идентификатор которого указан после двоеточия. Примеры выражений для проверки наличия подстроки (звездочка означает 0 или более символов):
в начале Sch*
в середине *oo*
в конце *ol
в начале и в конце Sc*ol
Проверки в фильтре можно комбинировать при помощи логических операторов:
AND (&(sn=Иванов)(phone=*)(GivenName=И*))
OR (|(cn=Багира)(cn=Балу))
NOT (!(cn=Пикачу))
Внимание! Последний фильтр с NOT
вернет также записи, не содержащие атрибута cn
.
Формируя запрос, можно указать типы атрибутов, которые должны быть включены сервером каталога в ответ. Если список типов атрибутов пуст, то окно поиска LDAP Browser отображает идентифицирующие атрибуты найденных записей (это RDN) и DN родительских записей - вместе они образуют DN найденных записей. Поиск LDAP всегда возвращает DN найденных записей, помимо и независимо от списка атрибутов. Зададим явно список атрибутов, которые мы хотим видеть и повторим запрос (несуществующие типы атрибутов в списке игнорируются сервером и не приводят к ошибке):
Чтобы хорошо освоить синтаксис фильтра, попробуйте разные проверки и их логические комбинации.
Как уже упоминалось, служба каталогов позволяет не только извлекать, но также добавлять и модифицировать записи. Softerra LDAP Browser поддерживает только просмотр данных в каталоге, поэтому для внесения изменений в каталог необходим другой инструмент (например, платный Softerra LDAP Administrator).
Для работы с LDAP практически из любого языка программирования можно воспользоваться существующими библиотекми для этого языка. В будущих статьях, посвященных LDAP, я рассмотрю работу с MS Active Directory в Oracle PL/SQL и в языке программирования Python.
hy is hy
ОтветитьУдалить