Утиліта LDIF Directory Exchange, Windows IT Pro
Ефективне використання даних із бази каталогу

На прикладі кількох LDIF-файлів можна показати, як найбільш ефективно працювати з даними AD за допомогою Ldifde та спорідненої утиліти, Csvde. Csvde - варіант Ldifde, в якому значення поділяються комами (формат CSV). Csvde забезпечує імпорт у бази даних, такі як Microsoft Access, або електронні таблиці, у тому числі Microsoft Excel, що розуміють файли в CSV-форматі. Утиліти Ldifde та Csvde постачаються разом з Windows 2000 Server, але їх можна скопіювати з інсталяційного компакт-диска Windows 2000 Server і запускати на робочих станціях Windows XP та Windows 2000.
Експорт з AD
Перш ніж розпочати роботу з Ldifde, необхідно розібратися в структурі файлу LDIF. наЕкрані 1 показана організаційна одиниця (OU) з ім'ям Monterey, до складу якої входять чотири користувачі та група. Для експорту цієї інформації з AD необхідно виконати команду
ldifde -f monterey.ldif -d "ou=Monterey,DC=ad,dc=local"
Кожен запис в LDIF-файлі починається з рядка DN з позначенням dn:. У LDAP-каталог DN об'єкта однозначно визначає об'єкт у всьому каталозі. Другий рядок починається з позначення changetype:, що вказує тип зміни, яке має бути виконане утилітою Ldifde в об'єкті, ідентифікованому ім'ям DN. Змінатипу всіх записів в Monterey.ldif - add. Щоразу під час експорту записів Ldifde форматує файл таким чином, щоб можна було імпортувати ці записи до іншого каталогу LDAP. Після того, як заданий changetype, Ldifde видає атрибут кожного об'єкта в наступному форматі:
Можна визначити клас кожного об'єкта, вказавши атрибут objectClass. У Monterey.ldif міститься OU, за якою слідують три користувача, група та останній користувач.
Якщо необхідно експортувати дані AD (наприклад, список імен користувачів) для підготовки звіту, слід вибрати критерії (наприклад, клас), що обмежують вихідні дані Ldifde, і вказати атрибути об'єкта, що експортуються: обох цілей можна досягти за допомогою параметрів -r і -l. Параметр -r призначає пошуковий фільтр у синтаксисі LDAP, у якому вказуються один або кілька атрибутів та їх кращі значення. Наприклад, щоб експортувати лише записи користувачів, потрібно ввести команду:
А для експорту всіх користувачів із прізвищем Smith слід ввести команду:
ldifde -r "(&(objectClass=user)(sn=Smith))"
За допомогою параметра -l, за яким слідує розділений комами список атрибутів, можна вказати атрибути, що видаютьсяутилітою Ldifde для кожного об'єкта. Наприклад, команди
виводять ім'я та офіс для кожного користувача (див. Екран 2).

Читачам, незнайомим із запитами LDAP, я рекомендую звернути увагу на врізку «Фільтри LDAP», в якій міститься докладніша інформація про структуру запитів. Щоб уточнити точне ім'я атрибута або класу, що фільтрується, можна скористатися оснасткою Active Directory Schema консолі Microsoft Management Console (MMC) або експортувати OU, що містить потрібний об'єкт, а потім дослідити LDIF-файл. Якщо в записі об'єкта шуканого атрибута немає, потрібно просто відредагувати об'єкт в AD, встановити значення атрибута і знову експортувати OU. Наприклад, у процесі редагування об'єкта user в оснастці Active Directory Users and Computers консолі MMC на вкладці General з'явиться поле Office (див. Екран 3). Щоб визначити ім'я атрибута LDAP для цього поля AD, можна ввести значення для атрибута Office, а потім експортувати об'єкт за допомогою Ldifde. Ім'я атрибута LDAP з'явиться у файлі LDIF після імені атрибута physicalDeliveryOfficeName.

Хоча файловий формат LDIF не підходить для імпорту даних AD у базу даних з метою підготовки звітів та запитів, Microsoft пропонує іншу утиліту, Csvde, яка розуміє ті ж параметри, що і Ldifde, але видає дані у форматі CSV. Наприклад, за командою
будуть отримані ті ж дані, що і за командою Ldifde, але кожен запис буде складатися з одного рядка значень, розділених комами (див. Екран 4). Слід звернути увагу, що в першому рядку файлів, що генеруються програмою Csvde, містяться імена атрибутів, які коректно сприймаються програмами Access і Excel як заголовки стовпців.

Робота з текстом та нетекстовими типами даних
Привикористання Ldifde для простого експорту та імпорту файлів між каталогами LDAP жодних проблем не виникає. Але якщо Ldifde або Csvde використовуються для експорту даних у програми побудови звітів або адміністратор будує власні LDIF-файли для автоматизації внесення змін до AD, деякі атрибути можуть викликати труднощі. Під час підготовки звітів та автоматизації змін AD, Ldifde та Csvde найкраще працюють із текстовими атрибутами, а не такими нетекстовими типами, як дати та двійкові дані. Як не дивно, один атрибут AD може займати кілька полів в оснастці Active Directory Users and Computers. Наприклад, один цілий атрибут з ім'ям userAccountControl містить кілька параметрів облікового запису (див. Екран 5).

Імпорт змін до AD
При імпорті змін до AD за допомогою Ldifde параметр -i використовується для завдання режиму імпорту, а -f - для вказівки LDIF-файлу. Розглянемо докладніше, як використовувати Ldifde для підготовки LDIF-файлів, які створюють, видаляють та змінюють об'єкти AD.
Створення об'єктів.Найпростіший спосіб побудувати LDIF-файл, який створює новий об'єкт, - експортувати вже існуючий об'єкт. Щоразу, коли Ldifde експортує об'єкт, вона видає об'єкт, параметр changetype якого - add. Якщо імпортувати файл Ldifde у той самий каталог, то Ldifde спробує створити дублікат щойно експортованого об'єкта. Тому можна експортувати зразковий об'єкт (наприклад, існуючий об'єкт user), а потім відредагувати файл LDIF так, щоб створити новий об'єкт. У разі використання цього методу необхідно видалити деякі визначення атрибутів з вихідного експортного файлу, оскільки ряд атрибутів може встановлювати лише служба каталогу. Наприклад, якщоспробувати встановити атрибут, колиChanged для об'єкта user, утиліта Ldifde видасть на екран повідомлення Add error on line 1: Constraint Violation. Сервер side error is "Виявлення може бути неправильно визначено, якщо він встановлений в системі". За промовчанням Ldifde експортує всі атрибути, у тому числі призначені лише для читання, але може і коректно переносити дані з одного каталогу до іншого. Для цього достатньо вказати параметр -k при імпорті файлу LDIF, який змушує утиліту Ldifde ігнорувати помилки типів constraint violations і object already exists. Щоб підвищити швидкість імпорту великих масивів даних, можна вказати параметр -y, у результаті Ldifde використовує укорочені підтвердження транзакцій (lazy commit).
Видалення об'єктів.Створити LDIF-файл, який видаляє один або кілька об'єктів, є порівняно просто. Достатньо ввести рядок DN, а потім вказати delete у рядку changetype. Наприклад, щоб видалити обліковий запис користувача Robert Hall із домену acme.com, потрібно ввести команду
Зміна об'єктів.Безперечно, найскладніший тип операцій імпорту, що здійснюються LDIF-файлами, - це зміна об'єктів AD. На початку LDIF-файлу слід перерахувати DN, а потім вказати modify в рядку змінитипу. Далі необхідно вказати тип операції, що виконується Ldifde, слідом за якою має бути наведене ім'я атрибута, що змінюється. Наприклад, запис
вказує на утиліту, що в наступному рядку або рядках наведено нове значення або значення для атрибута displayName об'єкта, ідентифікованого за допомогою DN. У попередньому операторі я вказав факультативні рядки та значення для тих випадків, коли змінюються багатозначні атрибути і потрібно вказати кілька значень для одного атрибута.
У наступномуВ рядку LDIF-файлу необхідно вказати значення атрибута. Наприклад,
вказує прізвище Johnson. Якщо для цього ж атрибута потрібно задати додаткові значення, слід просто перерахувати їх у додаткових рядках у тому ж форматі. Після того як введено останній рядок зі значенням для даного атрибуту, потрібно додати рядок, що містить лише дефіс. Наприклад,
змінює прізвище Joe на Johnson.
Поряд із операцією replace можна використовувати операції add і delete. Операція add застосовується, якщо даний атрибут ніколи не призначався для об'єкта, що цікавить нас. У разі багатозначних атрибутів при використанні add утиліта Ldifde додає зазначені значення до існуючих значень атрибута. Наприклад, фрагмент
додає Joe, James і Lamar до групи Managers. Достатньо замінити add: member на replace: member, щоб перед введенням Joe, James і Lamar утиліта Ldifde видалила будь-яких користувачів, які раніше входили до групи Managers. Якщо операція add застосовується до однозначних атрибутів, таких, як sn (surname - прізвище), яким вже надано значення, то Ldifde може видати повідомлення Multiple values були specified for an attribute that can have only one value. Операція delete використовується для видалення всіх значень атрибутів, внаслідок чого атрибут зникає, ніби ніколи не призначався для даного об'єкта. Наприклад,
видаляє поточне прізвище Joe. За допомогою операції delete можна видалити і конкретне значення багатозначного атрибуту. Наприклад,
видаляє Joe із групи Managers, не торкаючись інших членів. Ця зміна схожа на визначення поля в рядку бази даних Microsoft SQL Server нульового значення. Для видалення, додавання або заміни багатозначних атрибутів одного об'єкта слід розділяти рядки для кожного атрибутаоднією рисою. Наприклад,
Використання Ldifde та Csvde
Як отримати конкретну інформацію про працівників? Багато підприємств проектують програми для ведення досьє співробітників самостійно. Такі програми збирають дані про зміни облікових записів, паролів та повноважень співробітників від моменту надходження на роботу до звільнення. Припустимо, нам потрібно отримати всі облікові записи користувачів підрозділу Research and Development. Для цього достатньо виконати команди
За допомогою програми управління досьє можна блокувати облікові записи користувача під час звільнення співробітника у відділі кадрів. Для цього додаток має створити LDIF-файл із наступною структурою:
де - DN співробітника. Потім додаток має запустити команду
Щоб реімпортувати дані AD. Якщо потрібно видалити користувача з групи, слід створити LDIF:
де - DN групи, а - DN користувача, що видаляється.
Параметри Ldifde та Csvde
Декілька додаткових параметрів дозволяють провести тонке налаштування режиму роботи Ldifde. За промовчанням Ldifde та Csvde звертаються до AD за допомогою облікових даних користувача. Однак, за допомогою параметра -b можна вказати дані, які повинні використовувати Ldifde та Csvde. Щоб не вказувати пароль у командному рядку або сценарії, можна замінити зірочкою (*). У цьому випадку Ldifde попросить ввести пароль, не показуючи на екрані символи, що вводяться з клавіатури. Якщо потрібно імпортувати або експортувати дані на конкретний сервер, достатньо вказати ім'я сервера з -s. Щоб отримати список DN всіх оброблених об'єктів, слід скористатися параметром -v.
Фільтри LDAP
Найпростіший фільтр LDAP - (attributeName operator value), наприклад (cn = John Calvin). Поряд із операторомрівності (=) можна використовувати оператори «більше чи одно» (>=) і «менше чи одно» (
«Відкриті системи» – провідне українське видавництво, яке випускає широкий спектр видань для професіоналів та активних користувачів у сфері ІТ, цифрових пристроїв, телекомунікацій, медицини та поліграфії, журнали для дітей.