Технологии туннелирования

Протокол LDAP

Разбить на страницы
Показывать лекцию целиком

Введение

ITU (International Telecommunication Union) разработал серию рекомендаций для создания так называемого сервиса Каталога. Каталог является сервером или распределенным набором серверов, которые поддерживают распределенную базу данных, содержащую информацию о различных объектах, таких как пользователи, устройства и т.п. Эта распределенная база данных называется Информационной Базой Каталога (Directory Information Base - DIB). Информация включает имя объекта, а также различные атрибуты, характеризующие этот объект. Данные рекомендации носят название стандарта Х.500.

Для доступа к объектам этой распределенной базы данных был разработан Протокол Доступа к Каталогу (Directory Access Protocol – DAP).

LDAP (Lightweight Directory Access Protocol) предоставляет большинство возможностей DAP при существенно меньшей стоимости реализации. Например, удалены избыточные и редко используемые операции. LDAP, в отличие от Х.500, использует стек ТСР, а не OSI.

Однако не существует взаимно однозначного соответствия между операциями протокола LDAP и операциями протокола DAP стандарта Х.500.

LDAP - это протокол, который используется для доступа к информации, хранящейся на распределенных в сети серверах.

Эта информация представляет собой данные, хранящиеся в атрибутах. При этом предполагается, что такие данные чаще читаются, чем модифицируются. LDAP основан на клиент-серверной модели взаимодействия.

Общая модель данного протокола состоит в том, что сервер выполняет требуемые клиенту операции. Клиент передает запрос, описывающий операцию, которая должна быть выполнена сервером. Сервер выполняет необходимые операции в Каталоге. После завершения операции или нескольких операций сервер возвращает клиенту ответ, содержащий результаты или код ошибки.

Заметим, что хотя требуется, чтобы серверы возвращали ответы всякий раз, когда такие ответы определены в протоколе, не существует требования синхронного поведения клиентов или серверов. Запросы и ответы для нескольких операций могут пересылаться между клиентом и сервером в любом порядке, однако клиенты должны получить ответ на каждый свой запрос.

Информация на сервере LDAP представляет собой совокупность записей, которые содержат набор атрибутов и сгруппированы в древовидную иерархическую структуру.

Запись идентифицируется глобально уникальным именем (Distinguished Name – DN) – подобно имени домена в структуре DNS.

Каталог является специализированной базой данных, которая может использоваться в повседневной жизни – телефонная книга, программа передач и т.п. Предполагается, что данные Каталога достаточно статичны. Классическим примером подобной специализированной базы данных является сервис DNS.

Преимущества LDAP

Основные причины роста популярности LDAP связаны с тем, что:

  • LDAP имеет стандартную схему хранения информации в отличие от реляционных баз данных, в которых в каждом случае определяется своя схема хранения в терминах таблиц и столбцов и взаимосвязей между таблицами. Поэтому в LDAP нет специфичного для каждого Каталога и для каждого приложения управления - нет так называемой "проблемы N+1 Каталога". Для всех серверов LDAP используется единая схема хра-нения, единый способ именования хранимых объектов и единый протокол доступа.
  • LDAP позволяет быстро отыскивать необходимые данные, поскольку ориентирован в большей степени на чтение и поиск информации, чем на модификацию.
  • LDAP не обязательно должен быть ограничен отдельным сервером, существует возможность организовывать распределенные системы из нескольких серверов. Можно создавать ссылки между различными серверами LDAP, что обеспечивает возможность поиска сразу на нескольких серверах LDAP.
  • Как протокол LDAP, так и структура Каталога LDAP организованы в соответствии со стандартами, в результате чего можно единообразно использовать реализации LDAP различных производителей.
  • Сравнение LDAP и базы данных

    Сравним два наиболее популярных на сегодня способа хранения информации, реляционные базы данных и серверы LDAP, по следующим характеристикам:

  • Соотношение чтение-запись – LDAP, в отличие от реляционных баз данных, оптимизирован для чтения.
  • Расширяемость – схемы LDAP легче изменить в процессе функционирования, чем схемы баз данных.
  • Распределенность – данные LDAP могут располагаться на не-скольких серверах, поиск на которых может осуществляться с использованием одной команды. В результате можно создавать оптимально расположенные конфигурации серверов LDAP, в зависимости от того, где требуется та или иная информация, одновременно обеспечивая возможность поиска всей информации, хранящейся на всех серверах LDAP. Тем самым достигается более высокая степень распределенности по сравнению с реляционными базами данных.
  • Репликация – данные LDAP могут храниться на нескольких серверах, при этом существует возможность использования различных способов синхронизации информации.
  • Применение данных – LDAP разработан для эффективного использования данных, хранящихся в Каталоге, разными приложениями, базы данных разрабатываются для одного приложения.
  • Сложность взаимосвязей между объектами – объекты баз данных имеют более сложные взаимосвязи, чем записи LDAP.
  • Транзакции – в LDAP транзакции проще, обычно изменяется одна запись, транзакции в базах данных более сложные.
  • Тип хранимой информации – LDAP хранит информацию в атрибутах.
  • Способ именования – LDAP является иерархической структурой данных. Имя объекта представляет собой путь к этому объекту в дереве иерархии, аналогично путям к файлам в обычных файловых системах.
  • Схемы – схемы реляционных баз данных полностью определяются разработчиком соответствующей базы данных, LDAP имеет стандартные схемы, включая схему Ядра (Core), общую для любого Каталога. Этим достигается большая интеропера-бельность по сравнению с базами данных.
  • Стандарты – использование стандартных схем хранения информации и стандартного протокола доступа является преимуществом LDAP по сравнению с базами данных, так как в этом случае клиенты LDAP могут общаться с любым сервером LDAP, а клиенты баз данных могут взаимодействовать только с базой данных, для которой они разработаны.
  • Возможность отката при неудачных операциях – реляционные базы данных имеют более гибкие возможности отката, следовательно, они больше подходят для модификации информации, чем LDAP. Для динамичных объектов возможностей LDAP может быть недостаточно.
  • Принципы развертывания серверов LDAP

    При развертывании серверов LDAP необходимо выполнить следующие задачи:

  • Решить, что должно храниться в Каталоге. Необходимо четко понимать, какие приложения будут работать с данными.
  • Определить структуру данных в Каталоге и установить их вза-имосвязи.
  • Определить набор необходимых схем Каталога с учетом требований приложений.
  • Определить пространство имен.
  • Определить топологию размещения серверов.
  • Определить требуемые репликации, гарантируя, что данные будут доступны везде, где они необходимы.
  • Определить оптимальный уровень безопасности с учетом кон-кретных требований безопасности.
  • Основные характеристики LDAP

    Основными характеристиками LDAP, которые определяют его свойства, являются:

  • Способ хранения и доступа к информации – определяет типы данных, хранящихся в Каталоге, их взаимосвязи и способы обращения к ним (именование).
  • Принцип функционирования – определяет операции в протоколе LDAP.
  • Принцип обеспечения безопасности – определяет способы и методы защиты хранящейся в Каталоге информации.
  • Распределенное множество серверов LDAP – определяет способы взаимодействия серверов LDAP и возможность поиска информации на нескольких серверах LDAP.
  • Способ хранения и доступа к информации

    Рассмотрим информационную модель Каталога LDAP.

    Каталог, как определено в стандарте Х.500, есть набор открытых систем, взаимодействующих для предоставления сервисов Каталога. Инфор-мация, хранящаяся в Каталоге, называется Информационной Базой Каталога (Directory Information Base – DIB). Пользователь Каталога, который может быть как человеком, так и машиной, получает доступ к Каталогу, используя клиентское ПО. Клиент от имени пользователя Каталога взаимодействует с одним или более серверами. Сервер хранит фрагмент DIB.

    DIB содержит следующие типы информации:

  • Пользовательская информация - информация, предоставляемая пользователям и, быть может, изменяемая ими.
  • Административная и функциональная информация - информация, используемая для администрирования и/или функционирования Каталога.
  • Функция Каталога состоит в том, чтобы хранить информацию об объектах и предоставлять к ней доступ. Объектом может быть все, что может быть идентифицировано (поименовано).

    Класс объекта есть идентифицированное семейство объектов, которые имеют общие характеристики. Каждый объект принадлежит по крайней мере одному классу. Класс объекта может быть подклассом других классов объектов, в этом случае члены первого класса (подкласса) также считаются членами второго класса (суперкласса). Цепочка подклассов может быть произвольной длины.

    Запись Каталога – это поименованный набор информации. Она являет-ся основной единицей информации, хранящейся в Каталоге. Существует несколько видов записей Каталога.

    Запись содержит информацию о конкретном объекте. Запись типа Alias (Псевдоним) обеспечивает способ альтернативного именования того же самого объекта.

    Множество записей имеет иерархическую структуру дерева, которая называется Информационное Дерево Каталога – Directory Information Tree (DIT).

    Сначала мы рассмотрим DIT, затем обсудим именование записей, структуру записей, классы объектов, описания атрибутов и alias-записи.

    Информационное дерево Каталога

    DIB является композицией множества записей, организованных иерархически в структуру дерева, известную как информационное дерево Каталога (Directory Information Tree – DIT). Вершинами дерева являются записи.

    Дуги между вершинами определяют отношения между записями. Если существует дуга от Х к Y, то запись Х является родителем Y, и Y непосредственно подчиняется Х. Вышестоящими записями являются записи непосредственного родителя и его родителей. Подчиненными записями являются все записи, непосредственно подчиненные данной, и все их подчиненные.

    Пример дерева Каталога:

    (рис 13.1) Пример дерева Каталога

    В данном случае dc=msu и dc=oit – примеры записей. Запись dc=msu является родителем для записи dc=cmc, запись dc=cmc является подчиненной для записи dc=msu.

    Способ именования

    LDAP определяет иерархическую структуру данных, называемую DIT. Дерево Каталога в чем-то подобно файловой системе. Отличие от файловой системы состоит в следующем:

  • Каждая запись в LDAP может как содержать данные, так и служить контейнером, т.е. содержать поддерево. В файловой системе каждая запись является либо файлом, либо каталогом, но не тем и другим одновременно.
  • Уникальные имена LDAP читаются от данной точки к корневой точке, в файловой системе наоборот, от корневой точки к данной.
  • Принципы именования следующие:

  • Все записи должны иметь имена.
  • Имена не должны допускать конфликтов, т.е. все потомки некоторого родителя должны иметь уникальные имена (желательно, чтобы имена были информативными, хотя, естественно, понятие информативности является неформальным, и стандартом не определяется).
  • Относительные уникальные имена

    Относительное уникальное имя (Relative Distinguished Name – RDN) является совокупностью некоторого множества записей.

    Значения записей RDN должно быть уникальным среди всех непосред-ственных подчиненных вышестоящей записи.

    Полные уникальные имена

    Полное имя записи, известное как Distinguished Name (DN), является конкатенацией ее RDN и DN ее родителя. DN уникально определяет узел в дереве.

    Приведем примеры DN:

    (рис 13.2) Примеры DN

    В LDAPv3 для представления уникального имени (DN) используется строка UTF-8.

    Самым левым элементом является последний элемент в дереве. Далее через запятую перечисляются элементы более высоких уровней.

    Уникальные имена имеют две части.

  • Левая часть называется относительным уникальным именем (RDN).
  • Оставшаяся часть является базовым уникальным именем.
  • В приведенном выше примере RDN есть CN=olga

    Базовое уникальное имя есть CN=Users,DC=olga,DC=oit,DC=cmc,DC=msu,DC=ru

    Для каждого базового DN каждый RDN является уникальным. Это гарантирует, что никакие две записи не имеют один и тот же DN.

    Запись LDAP

    Вся информация в LDAP хранится в записях.

    Основные свойства записи:

  • Записи состоят из атрибутов.
  • Атрибут состоит из типа и одного или более значений.
  • Синтаксис атрибута определяется типом данного атрибута.
  • Запись состоит из множества атрибутов, хранящих информацию об объекте. Некоторые атрибуты хранят пользовательскую информацию и называются пользовательскими атрибутами. Другие атрибуты хранят функциональную и/или административную информацию и называются функциональными атрибутами.

    Тип атрибута определяет, может ли атрибут иметь несколько значений, синтаксис и правила соответствия, используемые при создании и сравнении значений данного атрибута, и другие функции.

    Два значения атрибута считаются эквивалентными, если эти значения одинаковые в соответствии с правилами эквивалентности для данного типа атрибута. Если для типа атрибута не определено правило эквивалентности, то два значения два значения этого атрибута считаются эквивалентными, если они одинаковые с учетом чувствительности к регистру.

    Например, атрибут givenName может иметь более одного значения, эти значения должны быть Directory Strings и они не чувствительны к регистру. Поэтому атрибут givenName не может иметь одновременно значения John и JOHN, так как согласно правилу эквивалентности данного типа атрибута это эквивалентные значения.

    Атрибуты

    Атрибут состоит из имени атрибута и одного или более значений дан-ного атрибута.

    Примеры имен атрибутов:

    uid		User id
    cn		Common Name
    sn		Surname
    l		Расположение (Location)
    ou		Организационная единица
    o		Организация
    dc		Контроллер Домена
    st		Штат
    c		Страна
    

    Каждое значение атрибута должно быть уникальным, т.е. дублирова-ние не допускается.

    (рис 13.3) Примеры атрибутов LDAP

    Описания атрибута

    Описание атрибута состоит из типа атрибута и возможно нескольких параметров атрибута.

    (рис 13.4) Пример синтаксиса атрибутов LDAP

    Типы атрибутов

    Тип атрибута определяет, может ли атрибут иметь несколько значений, как используются правила синтаксиса и соответствия при создании и сравнении значений данного атрибута, а также некоторые другие параметры.

    Тип атрибута указывает, является атрибут пользовательским или функциональным. Если атрибут является функциональным, тип атрибута определяет его функциональное использование и указывает, может ли данный атрибут модифицироваться пользователем.

    Тип атрибута (подтип) может быть получен из другого типа атрибута (прямого супертипа). Подтип наследует правила соответствия и синтаксис супертипа. Тип атрибута не может быть подтипом атрибута для другого применения, т.е. пользовательский подтип не может быть получен из функционального супертипа.

    Каждый тип атрибута определяется идентификатором объекта (OID) и возможно одним или несколькими короткими именами (дескрипторами).

    Значение атрибута

    Значения атрибута должно соответствовать синтаксису, определенному для атрибута.

    Когда атрибут используется в качестве имени записи, в RDN присутствует единственное значение данного атрибута. Это значение должно быть уникальным.

    Схема

    Схема Каталога предназначена для:

  • Определения множества правил, которые описывают хранимые данные.
  • Возможности поддержки согласованности данных.
  • Возможности уменьшения дублирования данных.
  • Гарантии, что приложения имеют стандартный интерфейс для доступа к данным.
  • Схема содержит следующую информацию:

  • Необходимые атрибуты.
  • Допустимые атрибуты.
  • Правила сравнения атрибутов.
  • Допустимые диапазоны значений атрибутов.
  • Ограничение на хранение информации, например, запрет дуб-ликатов и т.п.
  • Схема Каталога представляет собой множество определений и ограничений, касающихся структуры DIT, а также возможных способов именования записей. Схема определяет информацию, которая может храниться в записи, атрибуты, используемые для представления этой информации и способ организации записей в иерархическую структуру, что обеспечивает возможность быстрого поиска.

    Схема Каталога состоит из следующего множества определений:

    a) Определение типов атрибутов, содержащих OID атрибута, синтаксис атрибута, связанные с ним правила соответствия, является он функциональным или пользовательским атрибу-том, может ли он иметь несколько значений и происходит ли от другого атрибута.

    b) Определение классов объектов, описывающих множество обязательных и необязательных атрибутов.

    c) Определение правил соответствия.

    d) Определение синтаксиса, описывающего используемые правила представления.

    (рис 13.5) Описываемые в Схеме определения

    Класс объекта

    Класс объекта группирует объекты, которые имеют общие характери-стики. Классы определяют необходимые и допустимые атрибуты.

    Записи могут состоять из объектов нескольких классов. Необходимые и допустимые атрибуты записи являются объединением атрибутов каждого класса, из объектов которого состоит запись.

    Класс объекта может являться наследником другого класса объекта, который в свою очередь может быть получен из более общего класса объекта. В этом случае первый класс называется подклассом, а второй суперк-лассом. Для классов структурных объектов самым общим классом является класс, называемый top. Упорядоченное множество суперклассов от наибо-лее общего класса объекта до данного класса объекта называется цепочкой суперклассов.

    Каждый класс объекта определяет множество атрибутов, которые должны присутствовать в записях, принадлежащих классу, и множество атрибутов, которые могут присутствовать в этих записях. Класс объекта наследует множества допустимых и необходимых атрибутов от своих суперклассов.

    Каждый класс объекта может быть одним из трех видов: абстрактный (Abstract), структурный (Structural) или вспомогательный (Auxiliary).

    Каждый класс объекта идентифицируется своим идентификатором объекта (OID) и возможно одним или более именем.

    Абстрактные классы объектов

    Абстрактный (Abstract) класс объекта описывает основные характеристики, которыми должны обладать классы объектов, которые являются наследниками абстрактного класса.

    Существует специальный класс, называемый top – все структурные и абстрактные классы являются его расширением. Для данного класса необходимым атрибутом является только objectClass. Это гарантирует, что все записи имеют атрибут objectClass.

    Абстрактные классы не могут происходить от структурных или вспомогательных классов объектов.

    Все структурные классы объектов получены от абстрактного класса top. Вспомогательные классы необязательно получены от top.

    Записи могут иметь объекты только структурных и вспомогательных классов.

    Структурные классы объектов

    Структурный класс является подклассом абстрактного класса top.

    Структурные классы не могут быть подклассом вспомогательных классов.

    Вспомогательные классы объектов

    Объекты вспомогательных классов (Auxiliary) используются для описания дополнительных характеристик записей. Обычно они применяются для расширения множества необходимых и допустимых атрибутов записи.

    Объекты вспомогательных классов не могут принадлежать подклассам структурных классов.

    Запись может иметь любое количество объектов вспомогательных классов.

    Множество объектов вспомогательных классов, которые принадлежат записи, может со временем изменяться.

    Наследование классов объектов

    Наследование классов объектов обладает следующими свойствами:

  • Классы могут быть получены из других классов.
  • В случае наследования происходит расширение атрибутов из других классов.
  • Для структурных и абстрактных классов множественного наследования нет.
  • Для классов объектов нельзя перекрывать правила.
  • Правила синтаксиса

    Каждый атрибут, хранящийся в Каталоге, имеет определенный синтаксис. Примером синтаксиса является тип данных. Синтаксис накладывает ограничения на структуру и формат значений атрибута. Сравнение значений не является частью определения синтаксиса, а задается отдельно правилами соответствия. Рассмотрим базовое множество синтаксисов и правил соответствия, которые используются для атрибутов Каталога.

    Правила синтаксиса ограничивают возможные значения атрибутов, хранящихся в Каталоге, и определяют представление атрибутов и значений выражений, передаваемых в протоколе LDAP.

    Правила соответствия

    Правила соответствия используются Каталогом для сравнения значений атрибутов при выполнении операций Search и Compare. Они также используются для поиска DN. При модификации записей правила сравне-ния применяются для нахождения значений, которые должны изменяться или удаляться, и для предотвращения того, чтобы атрибут содержал два одинаковых с точки зрения правил соответствия значения.

    LDIF

    LDIF (LDAP Data Interchange Format) является форматом обмена данными и обладает следующими свойствами:

  • Представляет записи LDAP в виде текста.
  • Имеет читаемый формат.
  • Обеспечивает возможность легкой модификации данных.
  • Используется для изменений большого количества данных по следующему принципу:

  • Сделать дамп данных,
  • Выполнить скрипт, изменяющий данные,
  • Импортировать данные обратно в Каталог.
  • Обеспечивает возможность архивации данных и передачи данных в другие системы.
  • Распределенное множество серверов LDAP

    Протокол LDAP предполагает, что существует один или несколько серверов, которые совместно предоставляют доступ к Информационному Дереву Каталога (DIT).

    (рис 13.6) Пример распределенного множества серверов LDAP

    Каждый сервер содержит определенное поддерево DIT.

    Разработка топологии

    Дерево Каталога может быть распределено по нескольким физическим серверам.

    Использование распределенной топологии обеспечивает:

  • Улучшение производительности Каталога.
  • Улучшение управляемости Каталогом.
  • Возможность хранения большего числа записей, чем это воз-можно на одном сервере.
  • При использовании распределенной топологии пользователи видят один большой Каталог, хотя каждому серверу делегируется только некоторая его часть.

    Распределенная структура Каталогов во многом аналогична распределенной структуре серверов DNS.

    Ссылки (Referral)

    Для реализации распределенной топологии LDAP-Сервер может содержать ссылки (referral) на другие LDAP-серверы. Эти ссылки используются в операциях поиска, что обеспечивает клиенту возможность получения информации от нескольких серверов.

    (рис 13.7) Взаимодействие серверов LDAP

    Рассмотрим последовательность запросов при поиске клиентом информации в Каталоге.

  • Клиент запрашивает информацию у Сервера 1.
  • Сервер 1 возвращает ссылку на Сервер 2.
  • Клиент повторно посылает запрос на Сервер 2.
  • Сервер 2 возвращает информацию Клиенту.
  • Код результата поиска может указывать, что сервер, с которым осуществляется соединение, не содержит целевой записи. В этом случае сервер присылает ссылку на другой сервер в поле referral. Это поле содержит одну или несколько ссылок на один или несколько серверов или сервисов, которые могут быть доступны по протоколу LDAP или по другим протоколам. Такие ссылки могут быть возвращены в ответе для любого запроса операции (исключая операции unbind и abandon, которые не имеют ответа). По крайней мере один URL должен быть указан в поле referral.

    Если клиент продолжает выполнение операции, он должен следовать по ссылке для установления соединения с указанным сервером. Если присутствует несколько URL, считается, что для дальнейшего выполнения операции может использоваться любой URL.

    В URL для протокола LDAP содержится DN, который указывает имя объекта. Если DN в ответе присутствует, клиент должен использовать данное имя в своих следующих запросах для продолжения операции, а если DN в ответе отсутствует, клиент будет использовать то же самое имя, что и в начальном запросе. Некоторые серверы (например, участвующие в распределенном индексировании) могут указать в ссылке различные фильтры для операции поиска. Если фильтр в URL присутствует, клиент должен использовать этот фильтр в своем следующем запросе при продолжении поиска, если фильтр отсутствует, клиент должен использовать тот же фильтр, который он использовал ранее для данного запроса. Другие аспекты нового запроса могут быть как теми же самыми, так и отличаться от запроса, в результате которого была получена ссылка.

    Имя корневого контекста

    Имя корневого контекста является записью верхнего уровня для каждого сервера. Некоторые серверы могут иметь несколько имен корневого контекста.

    LDAP-Сервер предоставляет информацию об имени корневого контекста в атрибуте baseDN.

    (рис 13.8) Определение baseDN сервера

    Корневой контекст является набором атрибутов, который зависит от конкретного сервера. Значения этих атрибутов можно получить, выполнив поиск объекта с фильтром (objectClass=*).

    Описание протокола

    Основные свойства протокола LDAP:

  • Используется клиент-серверная модель.
  • В одном сообщении может быть сделано несколько запросов. В этом случае каждый ответ содержит идентификатор сообщения запроса.
  • В протоколе определено 9 основных операций – запрос ин-формации (2 операции), изменение информации (4 операции), аутентификация и управление (2 операции).
  • LDAPv3 предоставляет расширенные операции и расширенные возможности управления.
  • Для обеспечения расширяемости клиенты и серверы должны игнорировать те элементы, чьи теги они не распознали.

    Клиент указывает версию, которую он использует как часть запроса bind. Клиенты могут определить версии протокола, которые поддерживает сервер, по атрибуту supportedLDAPVersion из корневой записи сервера. Серверы, которые реализуют версию 3, должны передавать данный атрибут.

    (рис 13.9) Параметр baseDN (Base Object) на стороне клиента

    В протоколе LDAP определены следующие операции:

    bindRequest
    bindResponse
    unbindRequest   
    searchRequest
    searchResEntry
    searchResDone
    searchResRef
    modifyRequest
    modifyResponse
    addRequest
    addResponse
    delRequest
    delResponse
    modDNRequest
    modDNResponse
    compareRequest
    compareResponse
    abandonRequest
    extendedReq
    extendedResp
    

    Все сообщения протокола имеют общий конверт, содержащий поля, необходимые всем операциям протокола. В настоящий момент общими полями являются только MessageID и, возможно, controls.

    (рис 13.10) Пример сообщения searchRequest

    MessageID из запроса должно иметь ненулевое значение, отличное от значений в любых других запросах для данного LDAP-соединения, частью которого является данное сообщение. Обычно клиенты увеличивают значение MessageID для каждого запроса.

    Ответы сервера содержат значение MessageID из соответствующего запроса.

    Control представляет собой способ указать дополнительную информацию в LDAP-сообщении. Control только изменяет семантику сообщения, к которому он присоединен.

    Результат выполнения операции возвращается в поле resultCode, которое может принимать следующие значения:

    Success				(0) 
    operationsError			(1) 
    protocolError			(2) 
    timeLimitExceeded		(3) 
    sizeLimitExceeded		(4) 
    compareFalse			(5) 
    compareTrue			(6) 
    authMethodNotSupported		(7) 
    strongAuthRequired		(8) 
    referral				(10) 
    adminLimitExceeded		(11) 
    unavailableCriticalExtension	(12)
    confidentialityRequired		(13) 
    saslBindInProgress		(14) 
    noSuchAttribute			(16) 
    undefinedAttributeType		(17) 
    inappropriateMatching		(18) 
    constraintViolation		(19) 
    attributeOrValueExists	(20) 
    invalidAttributeSyntax	(21) 
    - 22-31 неиспользуются -- 
    noSuchObject			(32) 
    aliasProblem			(33) 
    invalidDNSyntax			(34) 
    -- 35 зарезервировано для неопределенного isLeaf -- 
    aliasDereferencingProblem	(36) 
    - 37-47 неиспользуются -- 
    inappropriateAuthentication	(48) 
    invalidCredentials		(49) 
    insufficientAccessRights 	(50) 
    busy				(51) 
    unavailable			(52) 
    unwillingToPerform		(53) 
    loopDetect				(54) 
    - 55-63 неиспользуются -- 
    namingViolation			(64) 
    objectClassViolation		(65) 
    notAllowedOnNonLeaf			(66) 
    notAllowedOnRDN				(67) 
    entryAlreadyExists			(68) 
    objectClassModsProhibited		(69) 
    - 70 reserved for CLDAP -- 
    affectsMultipleDSAs			(71) 
    - 72-79 не используются -- 
    other			       (80)
    

    Коды результата являются расширяемыми.

    Операции протокола LDAP

    В протоколе определено 9 операций:

  • Операции запроса информации.
  • Search
  • Compare
  • Операции изменения информации.
  • Add
  • Delete
  • Modify
  • Rename
  • Операции аутентификации и управления.
  • Bind
  • Unbind
  • Abandon
  • (рис 13.11) Типичные переговоры LDAP

    Операция Bind

    Операция Bind передает аутентификационную информацию от клиента к серверу.

    (рис 13.12) Пример сообщения bindRequest

    Параметрами запроса Bind являются:

  • Version: номер версии, указывает используемую версию протокола. В настоящий момент максимальная версия протокола равна 3. Заметим, что переговоры о номере версии не ведутся, клиент просто посылает данный параметр. Если сервер не поддерживает указанную версию, он отвечает protocolError в поле resultCode в сообщении BindResponce.
  • Name: имя объекта Каталога, от имени которого клиент хочет установить соединение. Данное поле может иметь нулевое значение (строку нулевой длины) для анонимного соединения или при использовании SASL-аутентификации.
  • Authentication: информация, используемая для аутентификации имени, указанного в запросе Bind. Серверы, которые не поддерживают выбор, предлагаемый клиентом, будут возвращать authMethodNotSupported в коде результата для запроса Bind. Аутентификацию с использованием механизмов SASL мы рассматривать не будем.
  • Ответ Bind определяется следующим образом.

    (рис 13.13) Пример сообщения bindResponse

    BindResponce содержит статус запроса клиента на аутентификацию.

    Если доступ разрешен, то resultCode будет Success, в противном случае он должен содержать OperationError или другую индикацию неудачной аутентификации. Если сервер не поддерживает требуемую клиенту версию протокола, он должен установить resultCode в protocolError.

    Операция Unbind

    Назначение операции Unbind состоит в завершении сессии протокола.

    Операция Unbind не имеет ответа. После передачи UnbindRequest клиент должен предполагать, что сессия протокола завершена. После получения UnbindRequest сервер должен предполагать, что клиент завершил сессию, и все исходящие ответы сервер сбрасывает и закрывает соединение.

    Операция Search

    Операция Search позволяет клиенту запрашивать выполнение поиска на сервере. Это может использоваться для чтения атрибутов из единственной записи, из записей, непосредственно следующих за конкретной записью, или из целого поддерева записей.

    Сообщение Search Request имеет следующие параметры:

    baseObject - LDAPDN, 
    scope 
    baseObject 		(0), 
    singleLevel 		(1), 
    wholeSubtree 		(2) , 
    derefAliases 
    neverDerefAliases 	(0), 
    derefInSearching 	(1), 
    derefFindingBaseObj 	(2), 
    derefAlways 		(3) }, 
    sizeLimit 	INTEGER (0 .. maxInt), 
    timeLimit 	INTEGER (0 .. maxInt), 
    typesOnly 	BOOLEAN, 
    filter 	Filter, 
    attributes 	AttributeDescriptionList 
    
    Filter ::= CHOICE { 
    and			[0] SET SIZE (1..MAX) OF Filter, 
    or			[1] SET SIZE (1..MAX) OF Filter, 
    not			[2] Filter, 
    equalityMatch		[3] AttributeValueAssertion, 
    substrings		[4] SubstringFilter, 
    greaterOrEqual	[5] AttributeValueAssertion, 
    lessOrEqual		[6] AttributeValueAssertion, 
    present		[7] AttributeDescription, 
    approxMatch		[8] AttributeValueAssertion, 
    extensibleMatch 	[9] MatchingRuleAssertion 
    } 
    SubstringFilter ::= SEQUENCE { 
    type	AttributeDescription, 
    -- по крайней мере один должен присутствовать, 
    -- initial и final могут быть указаны только один раз
    substrings	SEQUENCE OF CHOICE { 
     initial	[0] AssertionValue, 
     any		[1] AssertionValue, 
    	final	[2] AssertionValue } 
    } 
    MatchingRuleAssertion ::= SEQUENCE { 
    matchingRule	[1] MatchingRuleId OPTIONAL, 
    type		[2] AttributeDescription OPTIONAL, 
    matchValue		[3] AssertionValue, 
    dnAttributes	[4] BOOLEAN DEFAULT FALSE 
    } 
    

    Перечислим параметры Search Request:

  • BaseObject: базовый объект, относительно которого будет выполняться поиск.
  • Scope: указание области поиска.

    Может существовать три типа области поиска:

  • baseObject - ограничивается только базовым объектом.
  • singleLevel - ограничивается только непосредственно подчиненными объектами.
  • wholeSubtree - поиск во всем поддереве данной записи. (рис 13.14) Область baseObject (рис 13.15) Область singleLevel (рис 13.16) Область wholeSubtree
  • DerefAliases: указание того, как выполняется поиск объекта. Семантика возможных значений данного поля следующая:
  • NeverDerefAliases: не выполняются переходы по ссылкам для aliases при поиске или при размещении базового объекта поиска.
  • DerefInSearching: выполняется переход по ссылкам aliases, подчиненных базовому объекту поиска.
  • DerefFindingBaseObj: выполняется переход по ссылкам aliases, размещенных в базовом объекте по-иска, но не в подчиненных базовому объекту.
  • DerefAlways: выполняется переход по ссылкам aliases как при поиске, так и при размещении базового объекта поиска.
  • SizeLimit: ограничение максимального количества записей, возвращаемых в качестве результата поиска. Значение 0 в данном поле указывает, что при поиске нет ограничения. Сервер сам определяет максимальное количество возвращаемых записей.
  • TimeLimit: ограничение, определяющее максимальное время поиска (в секундах). Значение 0 в данном поле указывает, что ограничений по времени при запросах клиента не существует.
  • TypesOnly: индикатор того, что результаты поиска содержат и типы, и значения атрибутов или только типы атрибутов. При установке данного значения в TRUE будут возвращаться только типы атрибутов. При установке данного значения в FALSE будут возвращаться и типы, и значения атрибутов.
  • Filter: фильтр определяет условия, которые должны быть выполнены. and, or и not используются для комбинирования фильтров. По крайней мере один элемент фильтра должен присутствовать.

    Сервер должен вычислить фильтры. Результатом вычисления фильтра должно быть либо "TRUE", либо "FALSE", либо "Undefined". Если фильтр вычисляет TRUE для конкретной записи, то атрибуты данной записи возвращаются как часть результата поиска. Если фильтр вычисляет FALSE или Undefined, то данная запись при поиске игнорируется.

    Правило соответствия для элемента фильтра equalityMatch определяется правилом соответствия EQUALITY для типа атрибута.

    Правило соответствия для AssertionValues фильтра определяется правилом соответствия SUBSTR для типа атрибута.

    Правило соответствия для элементов фильтра greaterOrEqual и lessOrEqual определяется правилом соответствия ORDERING для типа атрибута.

    Семантика соответствия для элементов фильтра approxMatch определяется реализацией.

  • Attributes: список атрибутов, возвращаемый для каждой записи, которая соответствует фильтру поиска. Могут использоваться два специальных значения: пустой список без атрибутов и атрибут, описываемый строкой "*". Оба значения говорят о том, что возвращаются все пользовательские атрибуты.
  • Следует заметить, что если запрошены все пользовательские атрибуты, некоторые атрибуты записи могут не включаться в результаты поиска в соответствии с политикой управления доступом или другими ограничениями. Более того, серверы не будут возвращать атрибуты выполнения, такие как objectClasses или attributeTypes, если они явно не перечислены.

    Результаты поиска вычисляются сервером после получения им SearchRequest и возвращаются в Search Responses, которые являются LDAP-сообщениями, содержащими типы данных SearchResultEntry, либо SearchResultReference, либо SearchResultDone.

    SearchResultEntry::= SEQUENCE { 
    objectName	LDAPDN, 
    attributes	PartialAttributeList 
    } 
    PartialAttributeList ::= SEQUENCE OF SEQUENCE { 
    type	AttributeDescription, 
    vals		SET OF AttributeValue 
    } 
    -- следуетзаметить, что PartialAttributeList может
    -- иметь ноль элементов (если ни один из атрибутов затре-бованной записи 
    -- не может быть возвращен) и что множество vals  
    -- может также иметь ноль элементов (если запрошены только типы или 
    -- все значения были исключены из результата) 
    SearchResultReference::= [APPLICATION 19] SEQUENCE OF LDAPURL 
    -- по крайней мере один элемент LDAPURL должен присут-ствовать 
    SearchResultDone ::= [APPLICATION 5] LDAPResult 
    

    После получения Search Request сервер будет выполнять необходимый поиск в DIT.

    Сервер может возвращать как найденные записи (SearchResultEntry), так и ссылки на другие серверы для продолжения поиска (SearchResultReference).

    Для завершения поиска клиент может создать новую операцию поиска для каждого полученного SearchResultReference.

    (рис 13.17) Пример запроса searchRequest (рис 13.18) Пример ответа searchResEntry

    Операция Modify

    Операция Modify позволяет клиенту запросить модификацию записи на сервере. Запрос Modify имеет следующие параметры:

    object	LDAPDN, 
    modification
    operation
    add		(0), 
    delete		(1), 
    replace	(2) }, 
    modification	AttributeTypeAndValues } 
    AttributeTypeAndValues ::= SEQUENCE { 
    type	AttributeDescription, 
    vals	SET OF AttributeValue
    } 
    

    Перечислимпараметрызапроса Modify:

  • Object: модифицируемый объект. Значение данного поля содержит DN модифицируемой записи. Сервер не использует никаких alias для определения модифицируемой записи.
  • Modification: список выполняемых изменений. Список из-менений должен быть выполнен в том порядке, в котором он перечислен, как одна атомарная операция. Хотя отдельные из-менения могут нарушать схему Каталога, результирующая запись, после того как весь список изменений выполнен, должна соответствовать требованиям схемы Каталога. Значения поля operation имеют следующую семантику:
  • Add: добавление перечисленных значений для данного атрибута; при необходимости атрибут создается.
  • Delete: удаление перечисленных значений для данного атрибута; весь атрибут удаляется, если никаких значений не указано или если удалены все текущие значения атрибута.
  • Replace: замена значений данного атрибута новыми; если атрибута не существует, он создается. Если при замене не указаны новые значения, то атрибут удаляется, если он есть, и игнорируется, если атрибута не существует.
  • Результат изменения, которое пытался выполнить сервер при получении Modify Request, возвращается в Modify Response.

    При получении Modify Request сервер выполняет необходимые изменения в DIT.

    Сервер возвращает клиенту единственный Modify Response, указывающий либо на успешное завершение изменения DIT, либо на причину неудачного завершения. Заметим, что в силу требования атомарности применения списка изменений в Modify Request, клиент может считать, что ни одно изменение DIT не выполнено, если полученный Modify Response указывает на какую-либо ошибку, и что все запрошенные изменения про-шли успешно, если Modify Response указывает на успешное завершение операции изменения.

    Операция Modify не может быть использована для удаления из записи любого полного уникального имени и тех значений, которые формируют относительное уникальное имя записи. Попытка сделать это приведет к тому, что сервер вернет ошибку notAllowedOnRDN. Для переименования записи используется операция Modify DN, которая будет описана ниже.

    Операция Add

    Операция Add позволяет клиенту запросить добавление записи в Каталог. Add Request имеет следующие параметры:

    entry	LDAPDN, 
    attributes	AttributeList 
    AttributeList ::= SEQUENCE OF SEQUENCE { 
    type	AttributeDescription, 
    vals	SET OF AttributeValue 
    

    Параметрами Add Request являются:

  • Entry: полное уникальное имя добавляемой записи. Заметим, что сервер не определяет никаких aliases при размещении добавляемой записи.
  • Attributes: список атрибутов, которые определяют содержание добавляемой записи. Клиенты должны включать в этот список полные значения (которые формируют RDN записи), атрибут objectClass и значения всех обязательных атрибутов классов объектов данной записи. Клиенты не должны указывать атрибуты, которые не могут модифицироваться пользователем, такие как createTimestamp или creatorName атрибуты, так как сервер создает их автоматически.
  • Запись, указанная в поле entry в AddRequest, существовать не должна. Непосредственный родитель добавляемых записей объекта должен существовать. Например, если клиент пытается добавить CN=JS, DC=Example,DC=NET, но запись DC=Example, DC=NET не существует, а запись DC=NET существует, то сервер вернет ошибку noSuchObject с полем matchedDN, содержащим DC=NET. Если родительская запись существует, но не находится в контексте именования, поддерживаемом сервером, сервер должен возвратить ссылку на сервер, содержащий родительскую запись.

    Операция Delete

    Операция Delete позволяет клиенту запросить удаление записи из Каталога.

    Сообщение Delete Request состоит из DN удаляемой записи. Заметим, что сервер не переходит по aliases, и что только концевые записи (которые не имеют подчиненных записей) могут быть удалены с помощью данной операции.

    Результат операции удаления, выполненной сервером при получении сообщения Delete Request, возвращается в сообщении Delete Response.

    Операция Modify DN

    Операция Modify DN позволяет клиенту изменить левый компонент имени записи в Каталоге и/или переместить поддерево записей на новое место в Каталоге. Сообщение Modify DN Request имеет следующие параметры:

    entry		LDAPDN, 
    newrdn		RelativeLDAPDN, 
    deleteoldrdn	BOOLEAN, 
    newSuperior	[0] LDAPDNOPTIONAL
    

    Параметрами Modify DN Request являются:

  • Entry: DN изменяемой записи. Эта запись может как иметь подчиненные записи, так и не иметь их. Заметим, что сервер не переходит ни по каким aliases для изменяемой записи.
  • Newdn: RDN определяет левый компонент нового имени записи.
  • Deleteoldrdn: Параметр типа boolean, который указывает, должно ли старое значение атрибута RDN оставаться в качестве атрибута записи или оно должно удаляться из записи.
  • newSuperior: если присутствует, то это DN существующего объекта, который становится непосредственным родителем существующей записи.
  • Результат попытки изменения имени сервером при получении сообщения Modify DN Request возвращается в сообщении Modify DN Response.

    Например, если запись, указанная в параметре entry, была cn=OlgaLaponina, c=RU, newdn параметр был cn=Olga R. Laponina и newSuperior параметр отсутствовал, то эта операция пытается переименовать запись, чтобы она имела вид cn= Olga R. Laponina, c=RU. Если запись с таким именем уже существует, то операция завершится с кодом ошибки entryAlreadyExists.

    Объект, указанный в newSuperior, должен существовать. Например, если клиент пытается добавить CN=JS, DC=EXAMPLE, DC=NET, запись DC=EXAMPLE, DC=NET не существует, запись DC=NET существует, то сервер возвратит ошибку noSuchObject с полем matchedDN, содержащим DC=NET.

    Если параметр deleteoldrdn есть TRUE, то значения, формирующие старый RDN, удаляются из записи. Если параметр deleteoldrdn есть FALSE, то значения, формирующие старый RDN, остаются как значения неуникального атрибута записи. Сервер может не выполнить операцию и вернуть код ошибки, если установка параметра deleteoldrdn противоречит Схеме.

    Операция Compare

    Операция Compare позволяет клиенту сравнить утверждение с записью в Каталоге. Compare Request имеет следующие параметры:

    entry	LDAPDN, 
    ava	AttributeValueAssertion
    

    Перечислим параметры CompareRequest:

  • Entry: имя сравниваемой записи. Заметим, что сервер не должен рассматривать aliases записи при выполнении сравнения.
  • Ava: утверждение, с которым сравнивается атрибут записи.
  • Результат сравнения, выполненного сервером при получении Compare Request, возвращается в Compare Response.

    При получении Compare Request сервер пытается выполнить запрошенное сравнение, используя правило соответствия EQUALITY для типа атрибута. Заметим, что как ошибки, так и результат сравнения возвращаются в одной и той же конструкции.

    Заметим, что управление доступом может быть организовано таким образом, чтобы значения некоторых атрибутов (таких как userPassword) сравнивались или запрашивались другими способами.

    Операция Abandon

    Операция Abandon предоставляет возможность создания запроса на прерывание сервером выполняющейся операции.

    MessageID должен быть тот же, что был в операции, запрошенной ранее для данного LDAP-соединения. Сам запрос Abandon не имеет собственного MessageID. Он должен отличаться от идентификатора более ранней операции, для которой был выполнен Abandon.

    Для операции Abandon ответ не определен. При передаче операции Abandon сервер может прервать операцию, идентифицированную MessageID в Abandon Request. Ответы операции при успешном прерывании операции не посылаются. Клиенты могут определить, что операция прервана, выполнив новую операцию bind.

    Операции Abandon и Unbind не могут быть прерваны. Возможность прервать другие операции (в частности, модификации) определяется сервером.

    В том случае, если сервер получил Abandon Request для операции Search в середине передаваемых ответов на поиск, сервер должен немедленно прекратить передачу ответов и не должен посылать SearchResponseDone. Конечно сервер должен гарантировать, что передаются только корректные блоки данных LDAPMessage.

    Клиенты не должны несколько раз посылать запросы Abandon для одной и той же операции, но должны обрабатывать полученные результаты прерванных операций (так как они могли быть уже переданы после полу-чения Abandon и не могли быть прерваны).

    Серверы сбрасывают запросы Abandon для тех MessageID, которые они не распознали, для операций, которые не могут быть прерваны, и для операций, которые уже прерваны.

    Дополнительные операции

    В версию 3 LDAP добавлен расширенный механизм, позволяющий определять дополнительные операции для сервисов, которые ранее не были доступны в протоколе LDAP, например для операций цифровой подписи.

    Расширенная операция позволяет клиенту делать запросы и получать ответы с предопределенными синтаксисом и семантикой. Каждый запрос должен иметь уникальный OBJECT IDENTIFIER.

    requestName	LDAPOID,  
    requestValue	OCTET STRING OPTIONAL
    

    requestName есть OBJECT IDENTIFIER операции requestValue содержит информацию в том виде, в котором она определена в операции. Данная информация инкапсулирована в строку октетов.

    Сервер отвечает LDAPMessage, содержащим ExtendedResponse.

    COMPONENTS OF LDAPResult, 
    ResponseName	LDAPOID OPTIONAL, 
    Response		OCTET STRING OPTIONAL 
    

    Если сервер не распознал имя запроса, он должен вернуть только поля ответа из LDAPResult, содержащие код ошибки protocolError.

    Страницы:

    Введение

    ITU (International Telecommunication Union) разработал серию рекомендаций для создания так называемого сервиса Каталога. Каталог является сервером или распределенным набором серверов, которые поддерживают распределенную базу данных, содержащую информацию о различных объектах, таких как пользователи, устройства и т.п. Эта распределенная база данных называется Информационной Базой Каталога (Directory Information Base - DIB). Информация включает имя объекта, а также различные атрибуты, характеризующие этот объект. Данные рекомендации носят название стандарта Х.500.

    Для доступа к объектам этой распределенной базы данных был разработан Протокол Доступа к Каталогу (Directory Access Protocol – DAP).

    LDAP (Lightweight Directory Access Protocol) предоставляет большинство возможностей DAP при существенно меньшей стоимости реализации. Например, удалены избыточные и редко используемые операции. LDAP, в отличие от Х.500, использует стек ТСР, а не OSI.

    Однако не существует взаимно однозначного соответствия между операциями протокола LDAP и операциями протокола DAP стандарта Х.500.

    LDAP - это протокол, который используется для доступа к информации, хранящейся на распределенных в сети серверах.

    Эта информация представляет собой данные, хранящиеся в атрибутах. При этом предполагается, что такие данные чаще читаются, чем модифицируются. LDAP основан на клиент-серверной модели взаимодействия.

    Общая модель данного протокола состоит в том, что сервер выполняет требуемые клиенту операции. Клиент передает запрос, описывающий операцию, которая должна быть выполнена сервером. Сервер выполняет необходимые операции в Каталоге. После завершения операции или нескольких операций сервер возвращает клиенту ответ, содержащий результаты или код ошибки.

    Заметим, что хотя требуется, чтобы серверы возвращали ответы всякий раз, когда такие ответы определены в протоколе, не существует требования синхронного поведения клиентов или серверов. Запросы и ответы для нескольких операций могут пересылаться между клиентом и сервером в любом порядке, однако клиенты должны получить ответ на каждый свой запрос.

    Информация на сервере LDAP представляет собой совокупность записей, которые содержат набор атрибутов и сгруппированы в древовидную иерархическую структуру.

    Запись идентифицируется глобально уникальным именем (Distinguished Name – DN) – подобно имени домена в структуре DNS.

    Каталог является специализированной базой данных, которая может использоваться в повседневной жизни – телефонная книга, программа передач и т.п. Предполагается, что данные Каталога достаточно статичны. Классическим примером подобной специализированной базы данных является сервис DNS.

    Преимущества LDAP

    Основные причины роста популярности LDAP связаны с тем, что:

  • LDAP имеет стандартную схему хранения информации в отличие от реляционных баз данных, в которых в каждом случае определяется своя схема хранения в терминах таблиц и столбцов и взаимосвязей между таблицами. Поэтому в LDAP нет специфичного для каждого Каталога и для каждого приложения управления - нет так называемой "проблемы N+1 Каталога". Для всех серверов LDAP используется единая схема хра-нения, единый способ именования хранимых объектов и единый протокол доступа.
  • LDAP позволяет быстро отыскивать необходимые данные, поскольку ориентирован в большей степени на чтение и поиск информации, чем на модификацию.
  • LDAP не обязательно должен быть ограничен отдельным сервером, существует возможность организовывать распределенные системы из нескольких серверов. Можно создавать ссылки между различными серверами LDAP, что обеспечивает возможность поиска сразу на нескольких серверах LDAP.
  • Как протокол LDAP, так и структура Каталога LDAP организованы в соответствии со стандартами, в результате чего можно единообразно использовать реализации LDAP различных производителей.
  • Сравнение LDAP и базы данных

    Сравним два наиболее популярных на сегодня способа хранения информации, реляционные базы данных и серверы LDAP, по следующим характеристикам:

  • Соотношение чтение-запись – LDAP, в отличие от реляционных баз данных, оптимизирован для чтения.
  • Расширяемость – схемы LDAP легче изменить в процессе функционирования, чем схемы баз данных.
  • Распределенность – данные LDAP могут располагаться на не-скольких серверах, поиск на которых может осуществляться с использованием одной команды. В результате можно создавать оптимально расположенные конфигурации серверов LDAP, в зависимости от того, где требуется та или иная информация, одновременно обеспечивая возможность поиска всей информации, хранящейся на всех серверах LDAP. Тем самым достигается более высокая степень распределенности по сравнению с реляционными базами данных.
  • Репликация – данные LDAP могут храниться на нескольких серверах, при этом существует возможность использования различных способов синхронизации информации.
  • Применение данных – LDAP разработан для эффективного использования данных, хранящихся в Каталоге, разными приложениями, базы данных разрабатываются для одного приложения.
  • Сложность взаимосвязей между объектами – объекты баз данных имеют более сложные взаимосвязи, чем записи LDAP.
  • Транзакции – в LDAP транзакции проще, обычно изменяется одна запись, транзакции в базах данных более сложные.
  • Тип хранимой информации – LDAP хранит информацию в атрибутах.
  • Способ именования – LDAP является иерархической структурой данных. Имя объекта представляет собой путь к этому объекту в дереве иерархии, аналогично путям к файлам в обычных файловых системах.
  • Схемы – схемы реляционных баз данных полностью определяются разработчиком соответствующей базы данных, LDAP имеет стандартные схемы, включая схему Ядра (Core), общую для любого Каталога. Этим достигается большая интеропера-бельность по сравнению с базами данных.
  • Стандарты – использование стандартных схем хранения информации и стандартного протокола доступа является преимуществом LDAP по сравнению с базами данных, так как в этом случае клиенты LDAP могут общаться с любым сервером LDAP, а клиенты баз данных могут взаимодействовать только с базой данных, для которой они разработаны.
  • Возможность отката при неудачных операциях – реляционные базы данных имеют более гибкие возможности отката, следовательно, они больше подходят для модификации информации, чем LDAP. Для динамичных объектов возможностей LDAP может быть недостаточно.
  • Принципы развертывания серверов LDAP

    При развертывании серверов LDAP необходимо выполнить следующие задачи:

  • Решить, что должно храниться в Каталоге. Необходимо четко понимать, какие приложения будут работать с данными.
  • Определить структуру данных в Каталоге и установить их вза-имосвязи.
  • Определить набор необходимых схем Каталога с учетом требований приложений.
  • Определить пространство имен.
  • Определить топологию размещения серверов.
  • Определить требуемые репликации, гарантируя, что данные будут доступны везде, где они необходимы.
  • Определить оптимальный уровень безопасности с учетом кон-кретных требований безопасности.
  • Основные характеристики LDAP

    Основными характеристиками LDAP, которые определяют его свойства, являются:

  • Способ хранения и доступа к информации – определяет типы данных, хранящихся в Каталоге, их взаимосвязи и способы обращения к ним (именование).
  • Принцип функционирования – определяет операции в протоколе LDAP.
  • Принцип обеспечения безопасности – определяет способы и методы защиты хранящейся в Каталоге информации.
  • Распределенное множество серверов LDAP – определяет способы взаимодействия серверов LDAP и возможность поиска информации на нескольких серверах LDAP.
  • Способ хранения и доступа к информации

    Рассмотрим информационную модель Каталога LDAP.

    Каталог, как определено в стандарте Х.500, есть набор открытых систем, взаимодействующих для предоставления сервисов Каталога. Инфор-мация, хранящаяся в Каталоге, называется Информационной Базой Каталога (Directory Information Base – DIB). Пользователь Каталога, который может быть как человеком, так и машиной, получает доступ к Каталогу, используя клиентское ПО. Клиент от имени пользователя Каталога взаимодействует с одним или более серверами. Сервер хранит фрагмент DIB.

    DIB содержит следующие типы информации:

  • Пользовательская информация - информация, предоставляемая пользователям и, быть может, изменяемая ими.
  • Административная и функциональная информация - информация, используемая для администрирования и/или функционирования Каталога.
  • Функция Каталога состоит в том, чтобы хранить информацию об объектах и предоставлять к ней доступ. Объектом может быть все, что может быть идентифицировано (поименовано).

    Класс объекта есть идентифицированное семейство объектов, которые имеют общие характеристики. Каждый объект принадлежит по крайней мере одному классу. Класс объекта может быть подклассом других классов объектов, в этом случае члены первого класса (подкласса) также считаются членами второго класса (суперкласса). Цепочка подклассов может быть произвольной длины.

    Запись Каталога – это поименованный набор информации. Она являет-ся основной единицей информации, хранящейся в Каталоге. Существует несколько видов записей Каталога.

    Запись содержит информацию о конкретном объекте. Запись типа Alias (Псевдоним) обеспечивает способ альтернативного именования того же самого объекта.

    Множество записей имеет иерархическую структуру дерева, которая называется Информационное Дерево Каталога – Directory Information Tree (DIT).

    Сначала мы рассмотрим DIT, затем обсудим именование записей, структуру записей, классы объектов, описания атрибутов и alias-записи.

    Информационное дерево Каталога

    DIB является композицией множества записей, организованных иерархически в структуру дерева, известную как информационное дерево Каталога (Directory Information Tree – DIT). Вершинами дерева являются записи.

    Дуги между вершинами определяют отношения между записями. Если существует дуга от Х к Y, то запись Х является родителем Y, и Y непосредственно подчиняется Х. Вышестоящими записями являются записи непосредственного родителя и его родителей. Подчиненными записями являются все записи, непосредственно подчиненные данной, и все их подчиненные.

    Пример дерева Каталога:

    (рис 13.1) Пример дерева Каталога

    В данном случае dc=msu и dc=oit – примеры записей. Запись dc=msu является родителем для записи dc=cmc, запись dc=cmc является подчиненной для записи dc=msu.

    Способ именования

    LDAP определяет иерархическую структуру данных, называемую DIT. Дерево Каталога в чем-то подобно файловой системе. Отличие от файловой системы состоит в следующем:

  • Каждая запись в LDAP может как содержать данные, так и служить контейнером, т.е. содержать поддерево. В файловой системе каждая запись является либо файлом, либо каталогом, но не тем и другим одновременно.
  • Уникальные имена LDAP читаются от данной точки к корневой точке, в файловой системе наоборот, от корневой точки к данной.
  • Принципы именования следующие:

  • Все записи должны иметь имена.
  • Имена не должны допускать конфликтов, т.е. все потомки некоторого родителя должны иметь уникальные имена (желательно, чтобы имена были информативными, хотя, естественно, понятие информативности является неформальным, и стандартом не определяется).
  • Относительные уникальные имена

    Относительное уникальное имя (Relative Distinguished Name – RDN) является совокупностью некоторого множества записей.

    Значения записей RDN должно быть уникальным среди всех непосред-ственных подчиненных вышестоящей записи.

    Полные уникальные имена

    Полное имя записи, известное как Distinguished Name (DN), является конкатенацией ее RDN и DN ее родителя. DN уникально определяет узел в дереве.

    Приведем примеры DN:

    (рис 13.2) Примеры DN

    В LDAPv3 для представления уникального имени (DN) используется строка UTF-8.

    Самым левым элементом является последний элемент в дереве. Далее через запятую перечисляются элементы более высоких уровней.

    Уникальные имена имеют две части.

  • Левая часть называется относительным уникальным именем (RDN).
  • Оставшаяся часть является базовым уникальным именем.
  • В приведенном выше примере RDN есть CN=olga

    Базовое уникальное имя есть CN=Users,DC=olga,DC=oit,DC=cmc,DC=msu,DC=ru

    Для каждого базового DN каждый RDN является уникальным. Это гарантирует, что никакие две записи не имеют один и тот же DN.

    Запись LDAP

    Вся информация в LDAP хранится в записях.

    Основные свойства записи:

  • Записи состоят из атрибутов.
  • Атрибут состоит из типа и одного или более значений.
  • Синтаксис атрибута определяется типом данного атрибута.
  • Запись состоит из множества атрибутов, хранящих информацию об объекте. Некоторые атрибуты хранят пользовательскую информацию и называются пользовательскими атрибутами. Другие атрибуты хранят функциональную и/или административную информацию и называются функциональными атрибутами.

    Тип атрибута определяет, может ли атрибут иметь несколько значений, синтаксис и правила соответствия, используемые при создании и сравнении значений данного атрибута, и другие функции.

    Два значения атрибута считаются эквивалентными, если эти значения одинаковые в соответствии с правилами эквивалентности для данного типа атрибута. Если для типа атрибута не определено правило эквивалентности, то два значения два значения этого атрибута считаются эквивалентными, если они одинаковые с учетом чувствительности к регистру.

    Например, атрибут givenName может иметь более одного значения, эти значения должны быть Directory Strings и они не чувствительны к регистру. Поэтому атрибут givenName не может иметь одновременно значения John и JOHN, так как согласно правилу эквивалентности данного типа атрибута это эквивалентные значения.

    Атрибуты

    Атрибут состоит из имени атрибута и одного или более значений дан-ного атрибута.

    Примеры имен атрибутов:

    uid		User id
    cn		Common Name
    sn		Surname
    l		Расположение (Location)
    ou		Организационная единица
    o		Организация
    dc		Контроллер Домена
    st		Штат
    c		Страна
    

    Каждое значение атрибута должно быть уникальным, т.е. дублирова-ние не допускается.

    (рис 13.3) Примеры атрибутов LDAP

    Описания атрибута

    Описание атрибута состоит из типа атрибута и возможно нескольких параметров атрибута.

    (рис 13.4) Пример синтаксиса атрибутов LDAP

    Типы атрибутов

    Тип атрибута определяет, может ли атрибут иметь несколько значений, как используются правила синтаксиса и соответствия при создании и сравнении значений данного атрибута, а также некоторые другие параметры.

    Тип атрибута указывает, является атрибут пользовательским или функциональным. Если атрибут является функциональным, тип атрибута определяет его функциональное использование и указывает, может ли данный атрибут модифицироваться пользователем.

    Тип атрибута (подтип) может быть получен из другого типа атрибута (прямого супертипа). Подтип наследует правила соответствия и синтаксис супертипа. Тип атрибута не может быть подтипом атрибута для другого применения, т.е. пользовательский подтип не может быть получен из функционального супертипа.

    Каждый тип атрибута определяется идентификатором объекта (OID) и возможно одним или несколькими короткими именами (дескрипторами).

    Значение атрибута

    Значения атрибута должно соответствовать синтаксису, определенному для атрибута.

    Когда атрибут используется в качестве имени записи, в RDN присутствует единственное значение данного атрибута. Это значение должно быть уникальным.

    Схема

    Схема Каталога предназначена для:

  • Определения множества правил, которые описывают хранимые данные.
  • Возможности поддержки согласованности данных.
  • Возможности уменьшения дублирования данных.
  • Гарантии, что приложения имеют стандартный интерфейс для доступа к данным.
  • Схема содержит следующую информацию:

  • Необходимые атрибуты.
  • Допустимые атрибуты.
  • Правила сравнения атрибутов.
  • Допустимые диапазоны значений атрибутов.
  • Ограничение на хранение информации, например, запрет дуб-ликатов и т.п.
  • Схема Каталога представляет собой множество определений и ограничений, касающихся структуры DIT, а также возможных способов именования записей. Схема определяет информацию, которая может храниться в записи, атрибуты, используемые для представления этой информации и способ организации записей в иерархическую структуру, что обеспечивает возможность быстрого поиска.

    Схема Каталога состоит из следующего множества определений:

    a) Определение типов атрибутов, содержащих OID атрибута, синтаксис атрибута, связанные с ним правила соответствия, является он функциональным или пользовательским атрибу-том, может ли он иметь несколько значений и происходит ли от другого атрибута.

    b) Определение классов объектов, описывающих множество обязательных и необязательных атрибутов.

    c) Определение правил соответствия.

    d) Определение синтаксиса, описывающего используемые правила представления.

    (рис 13.5) Описываемые в Схеме определения

    Класс объекта

    Класс объекта группирует объекты, которые имеют общие характери-стики. Классы определяют необходимые и допустимые атрибуты.

    Записи могут состоять из объектов нескольких классов. Необходимые и допустимые атрибуты записи являются объединением атрибутов каждого класса, из объектов которого состоит запись.

    Класс объекта может являться наследником другого класса объекта, который в свою очередь может быть получен из более общего класса объекта. В этом случае первый класс называется подклассом, а второй суперк-лассом. Для классов структурных объектов самым общим классом является класс, называемый top. Упорядоченное множество суперклассов от наибо-лее общего класса объекта до данного класса объекта называется цепочкой суперклассов.

    Каждый класс объекта определяет множество атрибутов, которые должны присутствовать в записях, принадлежащих классу, и множество атрибутов, которые могут присутствовать в этих записях. Класс объекта наследует множества допустимых и необходимых атрибутов от своих суперклассов.

    Каждый класс объекта может быть одним из трех видов: абстрактный (Abstract), структурный (Structural) или вспомогательный (Auxiliary).

    Каждый класс объекта идентифицируется своим идентификатором объекта (OID) и возможно одним или более именем.

    Абстрактные классы объектов

    Абстрактный (Abstract) класс объекта описывает основные характеристики, которыми должны обладать классы объектов, которые являются наследниками абстрактного класса.

    Существует специальный класс, называемый top – все структурные и абстрактные классы являются его расширением. Для данного класса необходимым атрибутом является только objectClass. Это гарантирует, что все записи имеют атрибут objectClass.

    Абстрактные классы не могут происходить от структурных или вспомогательных классов объектов.

    Все структурные классы объектов получены от абстрактного класса top. Вспомогательные классы необязательно получены от top.

    Записи могут иметь объекты только структурных и вспомогательных классов.

    Структурные классы объектов

    Структурный класс является подклассом абстрактного класса top.

    Структурные классы не могут быть подклассом вспомогательных классов.

    Вспомогательные классы объектов

    Объекты вспомогательных классов (Auxiliary) используются для описания дополнительных характеристик записей. Обычно они применяются для расширения множества необходимых и допустимых атрибутов записи.

    Объекты вспомогательных классов не могут принадлежать подклассам структурных классов.

    Запись может иметь любое количество объектов вспомогательных классов.

    Множество объектов вспомогательных классов, которые принадлежат записи, может со временем изменяться.

    Наследование классов объектов

    Наследование классов объектов обладает следующими свойствами:

  • Классы могут быть получены из других классов.
  • В случае наследования происходит расширение атрибутов из других классов.
  • Для структурных и абстрактных классов множественного наследования нет.
  • Для классов объектов нельзя перекрывать правила.
  • Правила синтаксиса

    Каждый атрибут, хранящийся в Каталоге, имеет определенный синтаксис. Примером синтаксиса является тип данных. Синтаксис накладывает ограничения на структуру и формат значений атрибута. Сравнение значений не является частью определения синтаксиса, а задается отдельно правилами соответствия. Рассмотрим базовое множество синтаксисов и правил соответствия, которые используются для атрибутов Каталога.

    Правила синтаксиса ограничивают возможные значения атрибутов, хранящихся в Каталоге, и определяют представление атрибутов и значений выражений, передаваемых в протоколе LDAP.

    Правила соответствия

    Правила соответствия используются Каталогом для сравнения значений атрибутов при выполнении операций Search и Compare. Они также используются для поиска DN. При модификации записей правила сравне-ния применяются для нахождения значений, которые должны изменяться или удаляться, и для предотвращения того, чтобы атрибут содержал два одинаковых с точки зрения правил соответствия значения.

    LDIF

    LDIF (LDAP Data Interchange Format) является форматом обмена данными и обладает следующими свойствами:

  • Представляет записи LDAP в виде текста.
  • Имеет читаемый формат.
  • Обеспечивает возможность легкой модификации данных.
  • Используется для изменений большого количества данных по следующему принципу:

  • Сделать дамп данных,
  • Выполнить скрипт, изменяющий данные,
  • Импортировать данные обратно в Каталог.
  • Обеспечивает возможность архивации данных и передачи данных в другие системы.
  • Распределенное множество серверов LDAP

    Протокол LDAP предполагает, что существует один или несколько серверов, которые совместно предоставляют доступ к Информационному Дереву Каталога (DIT).

    (рис 13.6) Пример распределенного множества серверов LDAP

    Каждый сервер содержит определенное поддерево DIT.

    Разработка топологии

    Дерево Каталога может быть распределено по нескольким физическим серверам.

    Использование распределенной топологии обеспечивает:

  • Улучшение производительности Каталога.
  • Улучшение управляемости Каталогом.
  • Возможность хранения большего числа записей, чем это воз-можно на одном сервере.
  • При использовании распределенной топологии пользователи видят один большой Каталог, хотя каждому серверу делегируется только некоторая его часть.

    Распределенная структура Каталогов во многом аналогична распределенной структуре серверов DNS.

    Ссылки (Referral)

    Для реализации распределенной топологии LDAP-Сервер может содержать ссылки (referral) на другие LDAP-серверы. Эти ссылки используются в операциях поиска, что обеспечивает клиенту возможность получения информации от нескольких серверов.

    (рис 13.7) Взаимодействие серверов LDAP

    Рассмотрим последовательность запросов при поиске клиентом информации в Каталоге.

  • Клиент запрашивает информацию у Сервера 1.
  • Сервер 1 возвращает ссылку на Сервер 2.
  • Клиент повторно посылает запрос на Сервер 2.
  • Сервер 2 возвращает информацию Клиенту.
  • Код результата поиска может указывать, что сервер, с которым осуществляется соединение, не содержит целевой записи. В этом случае сервер присылает ссылку на другой сервер в поле referral. Это поле содержит одну или несколько ссылок на один или несколько серверов или сервисов, которые могут быть доступны по протоколу LDAP или по другим протоколам. Такие ссылки могут быть возвращены в ответе для любого запроса операции (исключая операции unbind и abandon, которые не имеют ответа). По крайней мере один URL должен быть указан в поле referral.

    Если клиент продолжает выполнение операции, он должен следовать по ссылке для установления соединения с указанным сервером. Если присутствует несколько URL, считается, что для дальнейшего выполнения операции может использоваться любой URL.

    В URL для протокола LDAP содержится DN, который указывает имя объекта. Если DN в ответе присутствует, клиент должен использовать данное имя в своих следующих запросах для продолжения операции, а если DN в ответе отсутствует, клиент будет использовать то же самое имя, что и в начальном запросе. Некоторые серверы (например, участвующие в распределенном индексировании) могут указать в ссылке различные фильтры для операции поиска. Если фильтр в URL присутствует, клиент должен использовать этот фильтр в своем следующем запросе при продолжении поиска, если фильтр отсутствует, клиент должен использовать тот же фильтр, который он использовал ранее для данного запроса. Другие аспекты нового запроса могут быть как теми же самыми, так и отличаться от запроса, в результате которого была получена ссылка.

    Имя корневого контекста

    Имя корневого контекста является записью верхнего уровня для каждого сервера. Некоторые серверы могут иметь несколько имен корневого контекста.

    LDAP-Сервер предоставляет информацию об имени корневого контекста в атрибуте baseDN.

    (рис 13.8) Определение baseDN сервера

    Корневой контекст является набором атрибутов, который зависит от конкретного сервера. Значения этих атрибутов можно получить, выполнив поиск объекта с фильтром (objectClass=*).

    Описание протокола

    Основные свойства протокола LDAP:

  • Используется клиент-серверная модель.
  • В одном сообщении может быть сделано несколько запросов. В этом случае каждый ответ содержит идентификатор сообщения запроса.
  • В протоколе определено 9 основных операций – запрос ин-формации (2 операции), изменение информации (4 операции), аутентификация и управление (2 операции).
  • LDAPv3 предоставляет расширенные операции и расширенные возможности управления.
  • Для обеспечения расширяемости клиенты и серверы должны игнорировать те элементы, чьи теги они не распознали.

    Клиент указывает версию, которую он использует как часть запроса bind. Клиенты могут определить версии протокола, которые поддерживает сервер, по атрибуту supportedLDAPVersion из корневой записи сервера. Серверы, которые реализуют версию 3, должны передавать данный атрибут.

    (рис 13.9) Параметр baseDN (Base Object) на стороне клиента

    В протоколе LDAP определены следующие операции:

    bindRequest
    bindResponse
    unbindRequest   
    searchRequest
    searchResEntry
    searchResDone
    searchResRef
    modifyRequest
    modifyResponse
    addRequest
    addResponse
    delRequest
    delResponse
    modDNRequest
    modDNResponse
    compareRequest
    compareResponse
    abandonRequest
    extendedReq
    extendedResp
    

    Все сообщения протокола имеют общий конверт, содержащий поля, необходимые всем операциям протокола. В настоящий момент общими полями являются только MessageID и, возможно, controls.

    (рис 13.10) Пример сообщения searchRequest

    MessageID из запроса должно иметь ненулевое значение, отличное от значений в любых других запросах для данного LDAP-соединения, частью которого является данное сообщение. Обычно клиенты увеличивают значение MessageID для каждого запроса.

    Ответы сервера содержат значение MessageID из соответствующего запроса.

    Control представляет собой способ указать дополнительную информацию в LDAP-сообщении. Control только изменяет семантику сообщения, к которому он присоединен.

    Результат выполнения операции возвращается в поле resultCode, которое может принимать следующие значения:

    Success				(0) 
    operationsError			(1) 
    protocolError			(2) 
    timeLimitExceeded		(3) 
    sizeLimitExceeded		(4) 
    compareFalse			(5) 
    compareTrue			(6) 
    authMethodNotSupported		(7) 
    strongAuthRequired		(8) 
    referral				(10) 
    adminLimitExceeded		(11) 
    unavailableCriticalExtension	(12)
    confidentialityRequired		(13) 
    saslBindInProgress		(14) 
    noSuchAttribute			(16) 
    undefinedAttributeType		(17) 
    inappropriateMatching		(18) 
    constraintViolation		(19) 
    attributeOrValueExists	(20) 
    invalidAttributeSyntax	(21) 
    - 22-31 неиспользуются -- 
    noSuchObject			(32) 
    aliasProblem			(33) 
    invalidDNSyntax			(34) 
    -- 35 зарезервировано для неопределенного isLeaf -- 
    aliasDereferencingProblem	(36) 
    - 37-47 неиспользуются -- 
    inappropriateAuthentication	(48) 
    invalidCredentials		(49) 
    insufficientAccessRights 	(50) 
    busy				(51) 
    unavailable			(52) 
    unwillingToPerform		(53) 
    loopDetect				(54) 
    - 55-63 неиспользуются -- 
    namingViolation			(64) 
    objectClassViolation		(65) 
    notAllowedOnNonLeaf			(66) 
    notAllowedOnRDN				(67) 
    entryAlreadyExists			(68) 
    objectClassModsProhibited		(69) 
    - 70 reserved for CLDAP -- 
    affectsMultipleDSAs			(71) 
    - 72-79 не используются -- 
    other			       (80)
    

    Коды результата являются расширяемыми.

    Операции протокола LDAP

    В протоколе определено 9 операций:

  • Операции запроса информации.
  • Search
  • Compare
  • Операции изменения информации.
  • Add
  • Delete
  • Modify
  • Rename
  • Операции аутентификации и управления.
  • Bind
  • Unbind
  • Abandon
  • (рис 13.11) Типичные переговоры LDAP

    Операция Bind

    Операция Bind передает аутентификационную информацию от клиента к серверу.

    (рис 13.12) Пример сообщения bindRequest

    Параметрами запроса Bind являются:

  • Version: номер версии, указывает используемую версию протокола. В настоящий момент максимальная версия протокола равна 3. Заметим, что переговоры о номере версии не ведутся, клиент просто посылает данный параметр. Если сервер не поддерживает указанную версию, он отвечает protocolError в поле resultCode в сообщении BindResponce.
  • Name: имя объекта Каталога, от имени которого клиент хочет установить соединение. Данное поле может иметь нулевое значение (строку нулевой длины) для анонимного соединения или при использовании SASL-аутентификации.
  • Authentication: информация, используемая для аутентификации имени, указанного в запросе Bind. Серверы, которые не поддерживают выбор, предлагаемый клиентом, будут возвращать authMethodNotSupported в коде результата для запроса Bind. Аутентификацию с использованием механизмов SASL мы рассматривать не будем.
  • Ответ Bind определяется следующим образом.

    (рис 13.13) Пример сообщения bindResponse

    BindResponce содержит статус запроса клиента на аутентификацию.

    Если доступ разрешен, то resultCode будет Success, в противном случае он должен содержать OperationError или другую индикацию неудачной аутентификации. Если сервер не поддерживает требуемую клиенту версию протокола, он должен установить resultCode в protocolError.

    Операция Unbind

    Назначение операции Unbind состоит в завершении сессии протокола.

    Операция Unbind не имеет ответа. После передачи UnbindRequest клиент должен предполагать, что сессия протокола завершена. После получения UnbindRequest сервер должен предполагать, что клиент завершил сессию, и все исходящие ответы сервер сбрасывает и закрывает соединение.

    Операция Search

    Операция Search позволяет клиенту запрашивать выполнение поиска на сервере. Это может использоваться для чтения атрибутов из единственной записи, из записей, непосредственно следующих за конкретной записью, или из целого поддерева записей.

    Сообщение Search Request имеет следующие параметры:

    baseObject - LDAPDN, 
    scope 
    baseObject 		(0), 
    singleLevel 		(1), 
    wholeSubtree 		(2) , 
    derefAliases 
    neverDerefAliases 	(0), 
    derefInSearching 	(1), 
    derefFindingBaseObj 	(2), 
    derefAlways 		(3) }, 
    sizeLimit 	INTEGER (0 .. maxInt), 
    timeLimit 	INTEGER (0 .. maxInt), 
    typesOnly 	BOOLEAN, 
    filter 	Filter, 
    attributes 	AttributeDescriptionList 
    
    Filter ::= CHOICE { 
    and			[0] SET SIZE (1..MAX) OF Filter, 
    or			[1] SET SIZE (1..MAX) OF Filter, 
    not			[2] Filter, 
    equalityMatch		[3] AttributeValueAssertion, 
    substrings		[4] SubstringFilter, 
    greaterOrEqual	[5] AttributeValueAssertion, 
    lessOrEqual		[6] AttributeValueAssertion, 
    present		[7] AttributeDescription, 
    approxMatch		[8] AttributeValueAssertion, 
    extensibleMatch 	[9] MatchingRuleAssertion 
    } 
    SubstringFilter ::= SEQUENCE { 
    type	AttributeDescription, 
    -- по крайней мере один должен присутствовать, 
    -- initial и final могут быть указаны только один раз
    substrings	SEQUENCE OF CHOICE { 
     initial	[0] AssertionValue, 
     any		[1] AssertionValue, 
    	final	[2] AssertionValue } 
    } 
    MatchingRuleAssertion ::= SEQUENCE { 
    matchingRule	[1] MatchingRuleId OPTIONAL, 
    type		[2] AttributeDescription OPTIONAL, 
    matchValue		[3] AssertionValue, 
    dnAttributes	[4] BOOLEAN DEFAULT FALSE 
    } 
    

    Перечислим параметры Search Request:

  • BaseObject: базовый объект, относительно которого будет выполняться поиск.
  • Scope: указание области поиска.

    Может существовать три типа области поиска:

  • baseObject - ограничивается только базовым объектом.
  • singleLevel - ограничивается только непосредственно подчиненными объектами.
  • wholeSubtree - поиск во всем поддереве данной записи. (рис 13.14) Область baseObject (рис 13.15) Область singleLevel (рис 13.16) Область wholeSubtree
  • DerefAliases: указание того, как выполняется поиск объекта. Семантика возможных значений данного поля следующая:
  • NeverDerefAliases: не выполняются переходы по ссылкам для aliases при поиске или при размещении базового объекта поиска.
  • DerefInSearching: выполняется переход по ссылкам aliases, подчиненных базовому объекту поиска.
  • DerefFindingBaseObj: выполняется переход по ссылкам aliases, размещенных в базовом объекте по-иска, но не в подчиненных базовому объекту.
  • DerefAlways: выполняется переход по ссылкам aliases как при поиске, так и при размещении базового объекта поиска.
  • SizeLimit: ограничение максимального количества записей, возвращаемых в качестве результата поиска. Значение 0 в данном поле указывает, что при поиске нет ограничения. Сервер сам определяет максимальное количество возвращаемых записей.
  • TimeLimit: ограничение, определяющее максимальное время поиска (в секундах). Значение 0 в данном поле указывает, что ограничений по времени при запросах клиента не существует.
  • TypesOnly: индикатор того, что результаты поиска содержат и типы, и значения атрибутов или только типы атрибутов. При установке данного значения в TRUE будут возвращаться только типы атрибутов. При установке данного значения в FALSE будут возвращаться и типы, и значения атрибутов.
  • Filter: фильтр определяет условия, которые должны быть выполнены. and, or и not используются для комбинирования фильтров. По крайней мере один элемент фильтра должен присутствовать.

    Сервер должен вычислить фильтры. Результатом вычисления фильтра должно быть либо "TRUE", либо "FALSE", либо "Undefined". Если фильтр вычисляет TRUE для конкретной записи, то атрибуты данной записи возвращаются как часть результата поиска. Если фильтр вычисляет FALSE или Undefined, то данная запись при поиске игнорируется.

    Правило соответствия для элемента фильтра equalityMatch определяется правилом соответствия EQUALITY для типа атрибута.

    Правило соответствия для AssertionValues фильтра определяется правилом соответствия SUBSTR для типа атрибута.

    Правило соответствия для элементов фильтра greaterOrEqual и lessOrEqual определяется правилом соответствия ORDERING для типа атрибута.

    Семантика соответствия для элементов фильтра approxMatch определяется реализацией.

  • Attributes: список атрибутов, возвращаемый для каждой записи, которая соответствует фильтру поиска. Могут использоваться два специальных значения: пустой список без атрибутов и атрибут, описываемый строкой "*". Оба значения говорят о том, что возвращаются все пользовательские атрибуты.
  • Следует заметить, что если запрошены все пользовательские атрибуты, некоторые атрибуты записи могут не включаться в результаты поиска в соответствии с политикой управления доступом или другими ограничениями. Более того, серверы не будут возвращать атрибуты выполнения, такие как objectClasses или attributeTypes, если они явно не перечислены.

    Результаты поиска вычисляются сервером после получения им SearchRequest и возвращаются в Search Responses, которые являются LDAP-сообщениями, содержащими типы данных SearchResultEntry, либо SearchResultReference, либо SearchResultDone.

    SearchResultEntry::= SEQUENCE { 
    objectName	LDAPDN, 
    attributes	PartialAttributeList 
    } 
    PartialAttributeList ::= SEQUENCE OF SEQUENCE { 
    type	AttributeDescription, 
    vals		SET OF AttributeValue 
    } 
    -- следуетзаметить, что PartialAttributeList может
    -- иметь ноль элементов (если ни один из атрибутов затре-бованной записи 
    -- не может быть возвращен) и что множество vals  
    -- может также иметь ноль элементов (если запрошены только типы или 
    -- все значения были исключены из результата) 
    SearchResultReference::= [APPLICATION 19] SEQUENCE OF LDAPURL 
    -- по крайней мере один элемент LDAPURL должен присут-ствовать 
    SearchResultDone ::= [APPLICATION 5] LDAPResult 
    

    После получения Search Request сервер будет выполнять необходимый поиск в DIT.

    Сервер может возвращать как найденные записи (SearchResultEntry), так и ссылки на другие серверы для продолжения поиска (SearchResultReference).

    Для завершения поиска клиент может создать новую операцию поиска для каждого полученного SearchResultReference.

    (рис 13.17) Пример запроса searchRequest (рис 13.18) Пример ответа searchResEntry

    Операция Modify

    Операция Modify позволяет клиенту запросить модификацию записи на сервере. Запрос Modify имеет следующие параметры:

    object	LDAPDN, 
    modification
    operation
    add		(0), 
    delete		(1), 
    replace	(2) }, 
    modification	AttributeTypeAndValues } 
    AttributeTypeAndValues ::= SEQUENCE { 
    type	AttributeDescription, 
    vals	SET OF AttributeValue
    } 
    

    Перечислимпараметрызапроса Modify:

  • Object: модифицируемый объект. Значение данного поля содержит DN модифицируемой записи. Сервер не использует никаких alias для определения модифицируемой записи.
  • Modification: список выполняемых изменений. Список из-менений должен быть выполнен в том порядке, в котором он перечислен, как одна атомарная операция. Хотя отдельные из-менения могут нарушать схему Каталога, результирующая запись, после того как весь список изменений выполнен, должна соответствовать требованиям схемы Каталога. Значения поля operation имеют следующую семантику:
  • Add: добавление перечисленных значений для данного атрибута; при необходимости атрибут создается.
  • Delete: удаление перечисленных значений для данного атрибута; весь атрибут удаляется, если никаких значений не указано или если удалены все текущие значения атрибута.
  • Replace: замена значений данного атрибута новыми; если атрибута не существует, он создается. Если при замене не указаны новые значения, то атрибут удаляется, если он есть, и игнорируется, если атрибута не существует.
  • Результат изменения, которое пытался выполнить сервер при получении Modify Request, возвращается в Modify Response.

    При получении Modify Request сервер выполняет необходимые изменения в DIT.

    Сервер возвращает клиенту единственный Modify Response, указывающий либо на успешное завершение изменения DIT, либо на причину неудачного завершения. Заметим, что в силу требования атомарности применения списка изменений в Modify Request, клиент может считать, что ни одно изменение DIT не выполнено, если полученный Modify Response указывает на какую-либо ошибку, и что все запрошенные изменения про-шли успешно, если Modify Response указывает на успешное завершение операции изменения.

    Операция Modify не может быть использована для удаления из записи любого полного уникального имени и тех значений, которые формируют относительное уникальное имя записи. Попытка сделать это приведет к тому, что сервер вернет ошибку notAllowedOnRDN. Для переименования записи используется операция Modify DN, которая будет описана ниже.

    Операция Add

    Операция Add позволяет клиенту запросить добавление записи в Каталог. Add Request имеет следующие параметры:

    entry	LDAPDN, 
    attributes	AttributeList 
    AttributeList ::= SEQUENCE OF SEQUENCE { 
    type	AttributeDescription, 
    vals	SET OF AttributeValue 
    

    Параметрами Add Request являются:

  • Entry: полное уникальное имя добавляемой записи. Заметим, что сервер не определяет никаких aliases при размещении добавляемой записи.
  • Attributes: список атрибутов, которые определяют содержание добавляемой записи. Клиенты должны включать в этот список полные значения (которые формируют RDN записи), атрибут objectClass и значения всех обязательных атрибутов классов объектов данной записи. Клиенты не должны указывать атрибуты, которые не могут модифицироваться пользователем, такие как createTimestamp или creatorName атрибуты, так как сервер создает их автоматически.
  • Запись, указанная в поле entry в AddRequest, существовать не должна. Непосредственный родитель добавляемых записей объекта должен существовать. Например, если клиент пытается добавить CN=JS, DC=Example,DC=NET, но запись DC=Example, DC=NET не существует, а запись DC=NET существует, то сервер вернет ошибку noSuchObject с полем matchedDN, содержащим DC=NET. Если родительская запись существует, но не находится в контексте именования, поддерживаемом сервером, сервер должен возвратить ссылку на сервер, содержащий родительскую запись.

    Операция Delete

    Операция Delete позволяет клиенту запросить удаление записи из Каталога.

    Сообщение Delete Request состоит из DN удаляемой записи. Заметим, что сервер не переходит по aliases, и что только концевые записи (которые не имеют подчиненных записей) могут быть удалены с помощью данной операции.

    Результат операции удаления, выполненной сервером при получении сообщения Delete Request, возвращается в сообщении Delete Response.

    Операция Modify DN

    Операция Modify DN позволяет клиенту изменить левый компонент имени записи в Каталоге и/или переместить поддерево записей на новое место в Каталоге. Сообщение Modify DN Request имеет следующие параметры:

    entry		LDAPDN, 
    newrdn		RelativeLDAPDN, 
    deleteoldrdn	BOOLEAN, 
    newSuperior	[0] LDAPDNOPTIONAL
    

    Параметрами Modify DN Request являются:

  • Entry: DN изменяемой записи. Эта запись может как иметь подчиненные записи, так и не иметь их. Заметим, что сервер не переходит ни по каким aliases для изменяемой записи.
  • Newdn: RDN определяет левый компонент нового имени записи.
  • Deleteoldrdn: Параметр типа boolean, который указывает, должно ли старое значение атрибута RDN оставаться в качестве атрибута записи или оно должно удаляться из записи.
  • newSuperior: если присутствует, то это DN существующего объекта, который становится непосредственным родителем существующей записи.
  • Результат попытки изменения имени сервером при получении сообщения Modify DN Request возвращается в сообщении Modify DN Response.

    Например, если запись, указанная в параметре entry, была cn=OlgaLaponina, c=RU, newdn параметр был cn=Olga R. Laponina и newSuperior параметр отсутствовал, то эта операция пытается переименовать запись, чтобы она имела вид cn= Olga R. Laponina, c=RU. Если запись с таким именем уже существует, то операция завершится с кодом ошибки entryAlreadyExists.

    Объект, указанный в newSuperior, должен существовать. Например, если клиент пытается добавить CN=JS, DC=EXAMPLE, DC=NET, запись DC=EXAMPLE, DC=NET не существует, запись DC=NET существует, то сервер возвратит ошибку noSuchObject с полем matchedDN, содержащим DC=NET.

    Если параметр deleteoldrdn есть TRUE, то значения, формирующие старый RDN, удаляются из записи. Если параметр deleteoldrdn есть FALSE, то значения, формирующие старый RDN, остаются как значения неуникального атрибута записи. Сервер может не выполнить операцию и вернуть код ошибки, если установка параметра deleteoldrdn противоречит Схеме.

    Операция Compare

    Операция Compare позволяет клиенту сравнить утверждение с записью в Каталоге. Compare Request имеет следующие параметры:

    entry	LDAPDN, 
    ava	AttributeValueAssertion
    

    Перечислим параметры CompareRequest:

  • Entry: имя сравниваемой записи. Заметим, что сервер не должен рассматривать aliases записи при выполнении сравнения.
  • Ava: утверждение, с которым сравнивается атрибут записи.
  • Результат сравнения, выполненного сервером при получении Compare Request, возвращается в Compare Response.

    При получении Compare Request сервер пытается выполнить запрошенное сравнение, используя правило соответствия EQUALITY для типа атрибута. Заметим, что как ошибки, так и результат сравнения возвращаются в одной и той же конструкции.

    Заметим, что управление доступом может быть организовано таким образом, чтобы значения некоторых атрибутов (таких как userPassword) сравнивались или запрашивались другими способами.

    Операция Abandon

    Операция Abandon предоставляет возможность создания запроса на прерывание сервером выполняющейся операции.

    MessageID должен быть тот же, что был в операции, запрошенной ранее для данного LDAP-соединения. Сам запрос Abandon не имеет собственного MessageID. Он должен отличаться от идентификатора более ранней операции, для которой был выполнен Abandon.

    Для операции Abandon ответ не определен. При передаче операции Abandon сервер может прервать операцию, идентифицированную MessageID в Abandon Request. Ответы операции при успешном прерывании операции не посылаются. Клиенты могут определить, что операция прервана, выполнив новую операцию bind.

    Операции Abandon и Unbind не могут быть прерваны. Возможность прервать другие операции (в частности, модификации) определяется сервером.

    В том случае, если сервер получил Abandon Request для операции Search в середине передаваемых ответов на поиск, сервер должен немедленно прекратить передачу ответов и не должен посылать SearchResponseDone. Конечно сервер должен гарантировать, что передаются только корректные блоки данных LDAPMessage.

    Клиенты не должны несколько раз посылать запросы Abandon для одной и той же операции, но должны обрабатывать полученные результаты прерванных операций (так как они могли быть уже переданы после полу-чения Abandon и не могли быть прерваны).

    Серверы сбрасывают запросы Abandon для тех MessageID, которые они не распознали, для операций, которые не могут быть прерваны, и для операций, которые уже прерваны.

    Дополнительные операции

    В версию 3 LDAP добавлен расширенный механизм, позволяющий определять дополнительные операции для сервисов, которые ранее не были доступны в протоколе LDAP, например для операций цифровой подписи.

    Расширенная операция позволяет клиенту делать запросы и получать ответы с предопределенными синтаксисом и семантикой. Каждый запрос должен иметь уникальный OBJECT IDENTIFIER.

    requestName	LDAPOID,  
    requestValue	OCTET STRING OPTIONAL
    

    requestName есть OBJECT IDENTIFIER операции requestValue содержит информацию в том виде, в котором она определена в операции. Данная информация инкапсулирована в строку октетов.

    Сервер отвечает LDAPMessage, содержащим ExtendedResponse.

    COMPONENTS OF LDAPResult, 
    ResponseName	LDAPOID OPTIONAL, 
    Response		OCTET STRING OPTIONAL 
    

    Если сервер не распознал имя запроса, он должен вернуть только поля ответа из LDAPResult, содержащие код ошибки protocolError.

    Вернуться к учебному плану