Что такое LDAP-протокол, иерархия данных? Определение компонентов данных LDAP. Когда и почему LDAP лучше, чем база данных?
LDAP, или Lightweight Directory Access Protocol, является открытым протоколом, используемым для хранения и получения данных из каталога с иерархической структурой. Обычно используемый для хранения информации об организации, ее активах и пользователях, LDAP является гибким решением для определения любого типа сущностей и их свойств.
Служба каталогов используется для хранения, организации и представления данных в формате «ключ-значение». Обычно каталоги оптимизированы для поиска, поиска и операций чтения поверх операций записи, поэтому они очень хорошо работают с данными, на которые часто ссылаются, но редко меняются.
LDAP является коммуникационным протоколом, который определяет методы, в которых служба каталога может быть доступна. Говоря более широко, LDAP формирует способ, которым данные внутри службы директории должны быть представлены пользователям, определяет требования к компонентам, используемым для создания записей данных внутри службы директории, и описывает способ, которым различные примитивные элементы используются для составления записей.
Сама информация в LDAP-системе хранится в элементах, называемых атрибутами. Атрибуты, в основном, являются парами ключ-значение. В отличие от некоторых других систем, ключи имеют предопределённые имена, которые продиктованы выбранным для данной записи объектными классами. Данные в атрибуте должны соответствовать типу, определённому в исходном определении атрибута.
Установка значения для атрибута:
mail: [admin@example.com]
При обращении к атрибуту и его данным (когда он не задан), две стороны соединяются знаком равенства:
mail=[example.com]
В LDAP вы используете атрибуты в пределах записи (entry). Запись представляет собой набор атрибутов под именем, используемый для описания чего-либо.
dn: sn=Ellingwood,ou=people,dc=digitalocean,dc=com
objectclass: person
sn: Ellingwood
cn: Justin Ellingwood
Все записи добавляются в систему LDAP в виде веток на деревьях, называемых Data Information Trees, или DIT-ы.
DIT представляет собой организационную структуру, похожую на файловую систему, где каждая запись (кроме записи верхнего уровня) имеет ровно одну родительскую запись и под ней может находиться любое количество дочерних записей.
sn=Ellingwood,ou=people,dc=digitalocean,dc=com
Эта строка называется distinguished name (dn) записи и используется для идентификации записи. Она функционирует как полный путь до "корня" DIT. В данном случае у нас есть запись под названием sn=Ellingwood, которую мы создаем. Прямым родителем является запись с именем ou=people. Родители этой записи произошли от доменного имени digitalocean.com, которое выступает как корень нашей DIT.
Атрибуты определяются с использованием достаточно сложного синтаксиса. Это определение для атрибута name:
attributetype ( 2.5.4.41 NAME 'name' DESC 'RFC4519: common supertype of name attributes'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
К счастью, в большинстве случаев не нужно определять собственные атрибуты, так как наиболее распространённые из них включены в большинство реализаций LDAP, а другие легко импортируются.
ObjectClasses — это просто группировка связанных атрибутов, которая была бы полезна при описании конкретной вещи. Например, "person" — это objectClass. Записи имеют возможность использовать атрибуты objectClass путем задания специального атрибут с названием objectClass, задающий objectClass, который вы хотите использовать.
dn: . . .
objectClass: person
После этого у вас появляется возможность установить внутри записи следующие атрибуты:
- cn: Общее имя
- description: Понятное человеку описание записи
- seeAlso: Ссылка на связанные записи
- sn: Фамилия
- telephoneNumber: Номер телефона
- userPassword: Пароль пользователя
Два основных типа ObjectClasses — это структурный (structural) и вспомогательные (auxiliary). Первый используется для создания и определения записи, второй - несет в себе дополнительный функционал. Запись должна иметь ровно один структурный класс, но может иметь ноль или более вспомогательных классов.
Определения ObjectClass определяют, являются ли предоставляемые атрибуты обязательными (MUST) или необязательными (MAY).
objectclass ( 2.5.6.6 NAME 'person' DESC 'RFC2256: a person' SUP top STRUCTURAL
MUST ( sn $ cn )
MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )
Это определяется как структурный объектClass, что означает, что он может быть использован для создания записи. Созданная запись должна содержать заданными атрибуты surname и commonname, и может, при желании, содержать аттрибуты userPassword, telephoneNumber, seeAlso, или description.
Схемы в LDAP представляют собой просто наборы взаимосвязанных ObjectClasses и атрибутов. Один DIT может иметь много различных схем, так что он может создавать нужные ему записи и атрибуты.
Формат схемы, по сути, является просто комбинацией вышеперечисленных записей.
. . .
objectclass ( 2.5.6.6 NAME 'person' DESC 'RFC2256: a person' SUP top STRUCTURAL
MUST ( sn $ cn )
MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )
attributetype ( 2.5.4.4 NAME ( 'sn' 'surname' )
DESC 'RFC2256: last (family) name(s) for which the entity is known by' SUP name )
attributetype ( 2.5.4.4 NAME ( 'cn' 'commonName' )
DESC 'RFC4519: common name(s) for which the entity is known by' SUP name )
. . .
Каждый objectClass — это класс, который описывает характеристики объектов данного типа. Однако объекты в LDAP могут быть экземплярами нескольких классов. Это позволяет указать для записи несколько классов, в результате чего объект просто имеет доступ к объединенной коллекции атрибутов со строжайшими определениями MUST или MAY, имеющими приоритет.
Объектный класс может указывать на родительский объектный класс, от которого он наследует свои атрибуты. Родительским является объектный класс, следующий за идентификатором SUP. Класс-родитель должен быть того же типа, как и определяемый объектный класс (например, STRUCTURAL или AUXILIARY).
objectclass ( 2.5.6.7 NAME 'organizationalPerson' SUP person STRUCTURAL
. . .
Почти все деревья наследования каждого объектного класса заканчиваются специальным объектным классом, называемым "top". Это абстрактный объектный класс, единственное предназначение которого заключается в том, чтобы можно было выполнить требование задавания объектного класса. Он используется для указания вершины цепочки наследования.
Атрибуты также могут указать родительский атрибут в своем определении. В этом случае атрибут наследует свойства, которые были установлены в родительском атрибуте. Это часто используется для создания более специфических версий общего атрибута. Это полезно, так как позволяет создать конкретный атрибут, полезный для людей, интерпретирующих элемент, даже когда его обобщенная форма остаётся неизменной.
Аспект | LDAP | Реляционная база данных | Преимущества LDAP |
---|---|---|---|
Тип данных | Оптимизирован для чтения, поиска и управления иерархическими данными. | Оптимизирован для хранения, извлечения и управления структурированными данными в табличном формате. | LDAP лучше для иерархических данных, таких как пользовательские учетные записи, группы, организационные структуры. |
Операции | Преимущественно чтение, менее эффективен для операций записи. | Поддерживает сложные операции записи и обновления. | LDAP эффективен в средах, где операции чтения значительно преобладают над операциями записи. |
Запросы | Использует простой механизм фильтрации. | Поддерживает сложные запросы с использованием SQL. | LDAP подходит для простых запросов, особенно при поиске и фильтрации данных пользователей. |
Масштабируемость | Высокая масштабируемость для операций чтения. | Масштабируемость зависит от конкретной СУБД, но обычно хорошо масштабируется и для чтения, и для записи. | LDAP лучше масштабируется для сценариев с высоким объемом операций чтения. |
Безопасность | Обычно используется для управления доступом и аутентификацией. | Может включать сложные системы контроля доступа, но не специализируется на аутентификации. | LDAP является предпочтительным выбором для управления учетными записями и аутентификации. |
Сложность управления | Сравнительно прост в управлении за счет ограниченного набора операций. | Может требовать более сложного управления и настройки. | LDAP легче в управлении для конкретных задач управления идентификацией. |
Интеграция | Легко интегрируется с различными системами и приложениями для управления идентификацией. | Хорошо интегрируется с приложениями, требующими сложной обработки данных. | LDAP лучше подходит для интеграции с системами управления идентификацией и доступом. |
LDAP часто используется в крупных организациях для централизованного управления учетными записями и доступом, тогда как реляционные базы данных применяются для общего управления данными и сложных операций с данными.
В этой статье была рассмотрена важность LDAP в контексте служб каталогов. От определения основных концепций до анализа его преимуществ перед традиционными базами данных. В заключение, правильное понимание и использование LDAP может значительно повысить безопасность и управляемость информационных систем в различных организациях.