The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Сети, протоколы, сервисы" / Оглавление документа


10. Инструменты создания и обслуживания баз данных

Данный раздел расскажет Вам, как создавать базу данных slapd с нуля и устранять возникающие при этом проблемы, если Вы с ними столкнётесь. Существует два пути создания базы данных. Первый из них - создание базы данных при запущенном slapd с использованием операций LDAP. При использовании этого метода Вы просто запускаете slapd и добавляете записи с помощью выбранного Вами клиента LDAP. Такой метод хорош для относительно маленьких баз данных (несколько сот или тысяч записей, в зависимости от Ваших потребностей). Данный метод применим к тем типам баз данных, которые поддерживают обновления.

Второй метод - создание базы данных при остановленном slapd с помощью специальных утилит, поставляемых с slapd(8). Такой метод лучше всего подходит, если Вам надо создать много тысяч записей, что займёт неприемлемо долгое время при использовании LDAP-метода, или Вы хотите убедиться, что во время создания базы данных к ней не будет осуществляться доступ. Обратите внимание, что не все типы баз данных поддерживают эти утилиты.


10.1. Создание базы данных через LDAP

В данном методе Вы используете выбранный Вами клиент LDAP (например, ldapadd(1)) для добавления записей, точно также, как Вы это делаете в уже созданных базах данных. Перед запуском slapd(8) убедитесь, что в конфигурационном файле заданы указанные ниже директивы.

        suffix <dn>

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

        suffix "dc=example,dc=com"

Убедитесь, что Вы указали директорию, в которую будут помещаться индексные файлы:

        directory <директория>

Например:

        directory /usr/local/var/openldap-data

Необходимо создать данную директорию с соответствующими правами, такими, чтобы slapd мог производить в неё запись.

Кроме того, необходимо настроить slapd так, чтобы Вы могли подсоединиться к нему под учётной записью пользователя каталога с правами на добавление записей. Можно настроить каталог, чтобы он поддерживал специального администратора или пользователя root только для этой цели. Это делается с помощью следующих двух директив в определении базы данных:

        rootdn <dn>
        rootpw <пароль>

Например:

        rootdn "cn=Manager,dc=example,dc=com"
        rootpw secret

Эти директивы указывают DN и пароль, которые могут быть использованы для аутентификации в качестве записи администратора базы данных (то есть записи, которой разрешено делать всё, что угодно). DN и пароль, указанные здесь, будут работать всегда, независимо от того, существует ли актуальная запись с этим именем в каталоге и задан ли для неё пароль. Таким способом решается проблема курицы и яйца применительно к тому, как проходить аутентификацию и добавлять записи, если в каталоге еще не существует ни одной записи.

Наконец, Вы должны убедиться, что определение базы данных содержит нужные Вам определения индексов:

        index {<список атрибутов> | default} [pres,eq,approx,sub,none]

Например, для индексирования атрибутов cn, sn, uid и objectclass могут быть использованы следующие директивы index:

        index cn,sn,uid pres,eq,approx,sub
        index objectClass eq

В данном примере создаются индексы наличия, равенства, приблизительного равенства и равенства подстроке для атрибутов cn, sn и uid, а также индекс равенства для атрибута objectClass. Имейте ввиду, что не все типы индексов доступны для каждого типа атрибута. Для получения дополнительной информации по данной директиве смотрите раздел Конфигурационный файл slapd.

После того, как Вы установили эти параметры под Ваши нужды, запустите slapd, подсоединитесь к нему с помощью клиента LDAP и начинайте добавлять записи. Например, чтобы добавить записи организации и организационной роли с помощью инструмента ldapadd, Вы можете создать LDIF-файл entries.ldif следующего содержания:

        # Организация для Example Corporation
        dn: dc=example,dc=com
        objectClass: dcObject
        objectClass: organization
        dc: example
        o: Example Corporation
        description: The Example Corporation

        # Организационная роль для Directory Manager
        dn: cn=Manager,dc=example,dc=com
        objectClass: organizationalRole
        cn: Manager
        description: Directory Manager

а затем использовать такую команду, чтобы фактически создать запись:

        ldapadd -f entries.ldif -x -D "cn=Manager,dc=example,dc=com" -w secret

В этой команде используются настройки, заданные в приведённых выше примерах.


10.2. Создание базы данных при отключенном slapd

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

        suffix <dn>

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

        suffix "dc=example,dc=com"

Убедитесь, что Вы указали директорию, в которую будут помещаться индексные файлы:

        directory <директория>

Например:

        directory /usr/local/var/openldap-data

Наконец, Вам необходимо определить индексы, которые Вы хотите построить. Это делается с помощью одной или нескольких директив index.

        index {<список атрибутов> | default} [pres,eq,approx,sub,none]

Например:

        index cn,sn,uid pres,eq,approx,sub
        index objectClass eq

В данном примере создаются индексы наличия, равенства, приблизительного равенства и равенства подстроке для атрибутов cn, sn и uid, а также индекс равенства для атрибута objectClass. Имейте в виду, что не все типы индексов доступны для каждого типа атрибута. Для получения дополнительной информации по данной директиве смотрите раздел Конфигурационный файл slapd.

10.2.1. Программа slapadd

После того, как Вы установили эти параметры под Ваши нужды, Вы создаёте основную базу данных и соответствующие индексы путём запуска программы slapadd(8):

        slapadd -l <входной файл> -f <файл настроек slapd>
                [-d <уровень отладки>] [-n <целое число>|-b <суффикс>]

Значения параметров следующие:

        -l <входной файл>

Указывает подаваемый на вход файл LDIF, содержащий требуемые для добавления записи в текстовой форме, описанной ниже в подразделе Формат текстового представления записи LDIF.

        -f <файл настроек slapd>

Указывает конфигурационный файл slapd, в котором определено, где создавать индексы, какие индексы создавать и т.д.

        -F <директория настроек slapd>

Указывает конфигурационную директорию. Если задано сразу оба параметра -f и -F, конфигурационный файл будет прочитан, переконвертирован в формат конфигурационной директории и записан в указанную директорию. Если ни одного из этих двух параметров не было задано, slapd попытается прочитать конфигурационную директорию по умолчанию перед тем, как попытаться использовать конфигурационный файл по умолчанию. Если существует конфигурационная директория правильного формата, тогда конфигурационный файл по умолчанию игнорируется. Если при этом также указан режим холостого запуска, никакого преобразования произведено не будет.

        -d <уровень отладки>

Включает вывод отладочной информации согласно указанному <уровню отладки>. Уровни отладки аналогичны соответствующим уровням для slapd. Смотрите подраздел Параметры командной строки раздела Запуск slapd.

        -n <номер базы данных>

Необязательный параметр, указывающий, в какую из баз данных вносить изменения. Первая из перечисленных в конфигурационном файле баз данных получает номер 1, вторая - 2 и т.д. По умолчанию используется первая база данных из перечисленных в конфигурационном файле. Данный параметр не должен использоваться совместно с параметром -b.

        -b <суффикс>

Необязательный параметр, указывающий, в какую из баз данных вносить изменения. Для определения искомой базы данных устанавливается соответствие между передаваемым суффиксом и суффиксом, указанным в директиве suffix базы данных. Данный параметр не должен использоваться совместно с параметром -n.

10.2.2. Программа slapindex

Иногда возникает необходимость пересоздать индексы (например, после изменения slapd.conf(5)). Это можно сделать с помощью программы slapindex(8). slapindex вызывается следующим образом:

        slapindex -f <файл настроек slapd>
                [-d <уровень отладки>] [-n <номер базы данных>|-b <суффикс>]

где параметры -f, -d, -n и -b аналогичны соответствующим параметрам программы slapadd(1). slapindex перестраивает все индексы на основании текущего содержимого базы данных.

10.2.3. Программа slapcat

Программа slapcat используется для выгрузки содержимого базы данных в LDIF-файл. Это может быть полезно, если Вы хотите сделать читабельную резервную копию Вашей базы данных или если Вы хотите отредактировать Вашу базу данных при остановленном slapd. Программа вызывается следующим образом:

        slapcat -l <имя файла> -f <файл настроек slapd>
                [-d <уровень отладки>] [-n <номер базы данных>|-b <суффикс>]

где -n или -b используются для выбора базы данных из перечисленных в файле slapd.conf(5), указанном с помощью -f. Соответствующий выходной LDIF пишется на стандартный вывод, либо в файл, указанный в параметре -l.


10.3. Формат текстового представления записи LDIF

LDAP Data Interchange Format (LDIF, Формат обмена данными LDAP) используется для представления записей LDAP в простом текстовом формате. В этом подразделе дано краткое описание формата представления записи LDIF, дополнительные сведения можно найти в ldif(5) и технической спецификации RFC2849 (рус.) (RFC2849 (ориг.)).

Основная форма представления записи следующая:

        # комментарий
        dn: <уникальное имя (distinguished name)>
        <описание атрибута>: <значение атрибута>
        <описание атрибута>: <значение атрибута>

        ...

Строки, начинающиеся с символа '#', - комментарии. Описание атрибута может быть либо простым типом атрибута, таким как cn или objectClass, либо в форме 1.2.3 (OID, ассоциированный с типом атрибута), либо может включать опции, такие как cn;lang_en_US или userCertificate;binary.

Строка может быть продолжена путём добавления одиночного символа пробела или табуляции в начало следующей строки. Например:

        dn: cn=Barbara J Jensen,dc=example,dc=
         com
        cn: Barbara J
          Jensen

эквивалентно:

        dn: cn=Barbara J Jensen,dc=example,dc=com
        cn: Barbara J Jensen

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

        cn: Barbara J Jensen
        cn: Babs Jensen

Если <значение атрибута> содержит непечатные символы или начинается с пробела, двоеточия (':') или символа "меньше" ('<'), то за <описанием атрибута> следует двойное двоеточие и значение атрибута, закодированное в формате base64. Например, значение " begins with a space" будет закодировано в таком виде:

        cn:: IGJlZ2lucyB3aXRoIGEgc3BhY2U=

Также можно указать URL ресурса, содержащего значение атрибута. В следующем примере указывается, что значение атрибута jpegPhoto будет получено из файла /path/to/file.jpeg.

        cn:< file:///path/to/file.jpeg

В одном файле LDIF можно указать несколько записей, разделяя их пустой строкой. Вот пример LDIF-файла, содержащего три записи:

        # Запись Barbara
        dn: cn=Barbara J Jensen,dc=example,dc=com
        cn: Barbara J Jensen
        cn: Babs Jensen
        objectClass: person
        sn: Jensen

        # Запись Bjorn
        dn: cn=Bjorn J Jensen,dc=example,dc=com
        cn: Bjorn J Jensen
        cn: Bjorn Jensen
        objectClass: person
        sn: Jensen
        # JPEG-фотография, закодированная в формате Base64
        jpegPhoto:: /9j/4AAQSkZJRgABAAAAAQABAAD/2wBDABALD
         A4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQ
         ERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVG

        # Запись Jennifer
        dn: cn=Jennifer J Jensen,dc=example,dc=com
        cn: Jennifer J Jensen
        cn: Jennifer Jensen
        objectClass: person
        sn: Jensen
        # JPEG-фотография из файла 
        jpegPhoto:< file:///path/to/file.jpeg

Обратите внимание, что jpegPhoto в записи Bjorn закодировано в формате base64, а jpegPhoto в записи Jennifer будет получено из расположения, указанного URL.


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




Спонсоры:
Слёрм
Inferno Solutions
Hosting by Ihor
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2019 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру