Импорт пользователей из каталога Active Directory

26 43

Как известно, одним из способов массового импорта пользователей является импорт пользователей из каталога Active Directory. Однако, на такой вариант импорта накладываются некоторые ограничения:

  1. Невозможно вторично импортировать данные по существующим в системе пользователям.
  2. Невозможно запускать компоненту импорта через командную строку в автономном режиме.
  3. Нет возможности импортировать дополнительную информацию об учетной записи из каталога Active Directory (загружается только информация необходимая для генерации пользователя).

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

  1. Должна быть возможность многократного импорта данных по существующим пользователям с целью обновления информации по данным пользователям (отключение учетной записи, загрузка сертификатов, группы пользователя и пр.)
  2. Импорт пользовательских групп с типами Organization Units и Universal Groups с учетом иерархии в Active Directory. Обновление информации по вхождению пользователя в ту или иную группу.
  3. Импорт пользовательских сертификатов.
  4. Автоматическое связывание учетной записи пользователя с существующей записью справочника Работники.
  5. Импорт E-mail адреса пользователя (в последствии использовался для рассылки уведомлений о новых заданиях).
  6. Закрытие учетной записи пользователя системы DIRECTUM, в случае отключения ее в каталоге Active Directory.
  7. Работа автономном режиме через командную строку по назначенным заданиям.

В результате работы было разработано решение в виде сценария, отвечающего данным требованиям. Из основного функционала сценария можно отметить следующее:

  • Импорт учетной записи пользователя. Импортируется логин пользователя и полное имя. 
  • Импорт пользовательских групп. Импортируются группы пользователя в которые входит учетная запись каталога (импортируются группы с типом Organization Unit и Universal Groups). При этом учитывается иерархия каталогов домена.
  • Импорт пользовательских сертификатов. Импортируются действующие сертификаты учетных записей каталога и сертификаты, срок действия которых еще не наступил, предназначенных для подписания и шифрования.
  • Удаление/закрытие учетной записи. Удаление логина пользователя и закрытие записи справочника Пользователи при отключении учетной записи каталога.
  • Привязка учетной записи к работнику. Учетная запись пользователя привязывается к записи справочника Работники, для которой совпадает значение реквизита Фамилия И.О. с полным именем учетной записи каталога.
  • Импорт адреса E-mail. Если для учетной записи импортированного пользователя была привязана к записи Работники, то для соответствующей записи справочника Персоны записывается пользовательский адрес электронной почты.

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

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

Итак, запустив сценарий, настраиваем параметры импорта и жмем ОК:

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

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

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

Платформа разработки: DIRECTUM 4.6.1.
Пакет разработки и тех. описание: dev_import_ad_users.zip (81,87 Кб)
Исправленная функция к сценарию: dev_create_user.zip (8,99 Кб)

Версия Руслана Бапина: ADIU_ActiveDirectoryImport_New[1][2].zip (5,55 Кб)

26
Авторизуйтесь, чтобы оценить материал.
5
Евгения Селиванова

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

Антон Калашников

Дмитрий, спасибо за отзыв. Ваше мнение о разработанном решении очень важно для нас.

Антон Калашников

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

Подвязка E-mail осуществляется к подвязанной записи работника. В связи с тем что, работник не подвязывается к пользователю, почтовый адрес не может быть записан.

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

Екатерина Ростомова

Извините, пожалуйста за глупый вопрос. Я начинающий "пользователь" системы директум. Утилита эта действительно очень необходима, особенно для крупным организаций. Я установила утлиту через импорт разработки. А где ее дальше искать?

Антон Калашников

Здравствуйте, Екатерина. В данном случае это не утилита, а сценарий системы DIRECTUM. 

Искать данный сценарий следует в компоненте "Сценарии". Данная компонента расположена по следующему пути в проводнике системы:

"Компоненты->Утилиты разработчика->Сценарии"

Далее запустите эту компоненту и найдите в списке сценарий с заголовком "Импорт пользователей из Active Directory". Сценарий будет доступен для запуска или редактирования.

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

Екатерина Ростомова

Спасибо огромное, Антон!

Екатерина Ростомова

И еще, не поняла где настройки доступа к AD. в тексте сценария нужно что-то поменять, или это в другом месте?

Константин Широбоков

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

  • ADIU_LogFilePath
  • ADIU_SharedReferenceInsertDelay

 

 

Екатерина Ростомова

Константин, это сделала - пишет таблица не существует.

Вопрос в том, где указать путь к АД?

Константин Широбоков

Настройки доступа к AD в тексте сценария задавать не нужно. При выполнении скрипта появится диалоговое окно с запросом параметров соединения с каталогом AD и параметрами импорта. Скрин этого окна представлен выше: первый по счету скрин статьи Антона. 

Алексей Лапихин

А если в компании используется LDAP, то данный сценарий будет работать?

Роман Орлов

 

Попробовал использовать этот сценарий, у меня вот такая ошибка:

http://www.fast-screen.ru/screen_shooter/images/1300974179_13097.png

Антон Калашников

Роман, какие параметры запуска сценария использовали (какие флажки были включены, а какие нет)? Операционная система, версия системы DIRECTUM?

Роман Орлов

ОС компьютера клиента WIN XP SP3.

Версия: 4.7.0

IS-builder: Версия клиентской части: 7.8.3.1027
Версия серверной части: 7.8.3.1000

Галочки ставил: Привязать запись работника к пользователю и Импортировать E-mail.

Святослав Романов

Аналогичная проблема.

ОС Win 2008 R2

Как быть?

Святослав Романов

Может кому поможет:

Проблема решилась. По умолчанию все галочки неактивны (закрашены серым). После того, как просто вкл/выкл галочки, ошибка пропала.

Сергей Ершов

Вот такая вот ошибка вылезла. В чем причина понять не могу. В параметрах выставляю галочки "Привязать пользователя", "Импортировать мыло" и "Импортировать группы". Кто то уже сталкивался с таким? 

Евгений Иванов

Коллеги, приветствую.

Антон, хотел обратить внимание, что в сценарии есть строка

DDS2.ISBCertificateType = CERTIFICATE_TYPE_SIGN

То есть получается, что всегда тип у сертификата "ЭЦП". В описании написано "Импортируются действующие сертификаты учетных записей каталога .... предназначенных для подписания и шифрования. "

И в ldap запросе нет проверок, для чего предназначен сертификат.

Руслан Бапин

Добрый день, Антон!

Очень хороший и полезный сценарий, спасибо большое!

Есть пожелание - можно ли добавить в качестве параметра имя контейнера (ou)?

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

(This operation returned because the timeout period expired. Сценарий "ADIU_ActiveDirectoryImport": ошибка в строке 204)

Руслан Бапин

Добрый день, Антон!

Я внес небольшое изменение в сценарий "Импорт пользователей из Active Directory" - добавил в качестве параметра имя контейнера (OU). Не могу приложить к этому сообщению файл, если заинтересует - пишите.

Поле необязательное, если не заполнено, то сценарий работает, как и раньше. А если имя контейнера указано, то показывает выбор пользователей только из этого контейнера (и вложенных в него контейнеров).

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

Руслан Бапин

Немного улучшил свой вариант сценария - снял ограничение по уровню контейнера.

Алексей Марков

Аналогичная ошибка как у Сергея Ершова чуть выше, и судя по строке в которой ошибка выходит ее разработчики изначально хотели не отображать (exceptionsOff - exceptionsOn):

ADIU_ImportUser() -> ADIU_UserCreate() -> 72 строка:

UsersMainView.Forms("Dfm").Actions.FindAction("GenerateUsersAction").Execute

Алексей Марков

В саппорте дали измененную функцию ADIU_UserCreate() - после этого удалось импортировать.

Алексей Пестерев

К материалу Антона прикрепили исправленную функцию. Ее импорт исправит возникающую ошибку

Денис Архипов

а пакет разработки остался с "кривой" функцией?

Алексей Пестерев

Сам пакет разработки - да. Необходимо отдельно импортировать также функцию, и все будет ок.

Роман Мигранов

Используется поиск по группам безопасности или распространения?
 

Константин Тарасов

Сценарий в версии 4,9 происходит с ошибкой на строчках начиная с 14, где вызывается функция "ФайлЗаписать". DIRECTUM виснет и сваливается.

 

Victor Polyakov
Добрый день, Антон! Я внес небольшое изменение в сценарий "Импорт пользователей из Active Directory" - добавил в качестве параметра имя контейнера (OU). Не могу приложить к этому сообщению файл, если заинтересует - пишите. Поле необязательное, если не заполнено, то сценарий работает, как и раньше. А если имя контейнера указано, то показывает выбор пользователей только из этого контейнера (и вложенных в него контейнеров). Но есть одно ограничение - сам указываемый контейнер должен быть в домене на самом первом уровне вложенности. 14 марта 2012 в 13:04
Добрый день Руслан, 
могли бы вы мне тоже прислать измененный сценарий?
Руслан Бапин
Добрый день Руслан, могли бы вы мне тоже прислать измененный сценарий?
Отправил в личку
Дмитрий Лебедев
Немного улучшил свой вариант сценария - снял ограничение по уровню контейнера.

Руслан, очень актуальный вопрос про ограничение импорта одним контейнером, тоже прошу прислать!

@Directum - давно пора реализовать этот функционал полноценно в продукте.

 

Руслан Бапин
Руслан, очень актуальный вопрос про ограничение импорта одним контейнером, тоже прошу прислать!

Дмитрий, отправил в личку
Дмитрий Лебедев

Руслан, не удается ввести нужный OU (ни в формате ou=users,ou=moscow,ou=russia,ou=legacy,dc=domain,dc=com ни в формате Legacy\Russia\Moscow\Users ) - места не хватает в поле для ввода значения поля. В каком формате правильно вводить, и можно ли просто захардкодить в сценарии нужный OU?

Руслан Бапин

Дмитрий, нужно ввести просто наименование OU (то бишь его name). Сценарий сам выполняет поиск в AD по наименованию и получает его distinguishedName. Тут может быть подвох - я не уверен, но мне кажется, что могут быть разные OU с одинаковым name, тогда сценарий возьмет первый попавшийся.

 

Руслан, не удается ввести нужный OU (ни в формате ou=users,ou=moscow,ou=russia,ou=legacy,dc=domain,dc=com ни в формате Legacy\Russia\Moscow\Users ) - места не хватает в поле для ввода значения поля. В каком формате правильно вводить, и можно ли просто захардкодить в сценарии нужный OU?

 
Дмитрий Лебедев

"Тут может быть подвох - я не уверен, но мне кажется, что могут быть разные OU с одинаковым name, тогда сценарий возьмет первый попавшийся."

Да, это наш случай, есть повторяющиеся имена OU в домене. Значит, нам придется жестко вписать OU в код сценария.

 

 

Руслан Бапин
Да, это наш случай, есть повторяющиеся имена OU в домене. Значит, нам придется жестко вписать OU в код сценария.

"Этим хирургам лишь бы чего нибудь отрезать...". Темная сторона Вас так и манит :)

Как я понял из предыдущего поста, для Вас не проблема вводить имя OU в формате "ou=users,ou=moscow,ou=russia,ou=legacy,dc=domain,dc=com". Тогда просто сделайте в вызове InputDialog длину запрашиваемой строки побольше, и закомментируйте несколько строчек кода, где выполняется запрос к AD для поиска distinguishedName для заданного OU. Там еще переменной присваивается результат запроса, вместо этого присвойте ей то, что пользователь ввел в InputDialog (к сожалению, у меня сейчас под рукой нет текста сценария).

А еще лучше - добавить к запросу InputDialog еще один параметр, который будет определять, как сценарий интерпретирует введенную строку - как наименование или как distinguishedName, и в зависимости от этого выполнять или не выполнять поиск.
 

Natalie shevchenko

Здравствуйте, Руслан!

В Вашем видоизмененном сценарии используется ф-ция ADIU_ImportUser_New(),

но в выложенной разработке ее нет. Существует только ф-ция ADIU_ImportUser().

Возможно ли использовать ADIU_ImportUser()? Если нет, то где взять видоизмененную ф-цию ADIU_ImportUser_New()?

Павел Шепелев

Подскажите пожалуйста, а как использовать вариант Руслана? В прикрепленном к статье файле "Версия Руслана Бапина", есть только xml файла.Процитировать выделенное

Павел Шепелев

Нашел, прошу прощения :)

Сер Бутенко

Могли бы вы мне тоже прислать исправленный сценарий? Он работает с последней версией? У меня пользователей импортирует, группы и почту нет.

Руслан Бапин
Сер Бутенко 1 июля 2014 в 15:24 Могли бы вы мне тоже прислать исправленный сценарий? Он работает с последней версией? У меня пользователей импортирует, группы и почту нет.

Если вопрос ко мне, то моя версия сценария прикреплена к материалу. Больше я ничего не исправлял. Да, кстати, выше Natalie shevchenko сообщала, что в моем сценарии встречается вызов функции ADIU_ImportUser_New(), прошу прощения, это, видимо, следы каких-то моих опытов, можно просто заменить на вызов исходной функции ADIU_ImportUser()

Василий Свирепов

Руслан, Добрый день, подскажите пожалуйста, давно используем систему directum, но без обновлений. Текущая версия 5.0. Импорт пользователей из AD работал исправно, до недавнего момента. Был сбой. Сервер восстановил, но при импорте пользователя система не может его сгенерировать в sql.  Выходит ошибка "группа или пользователь windows nt не существует SQL State 42000, SQL Error Code 15401".  Стали разбираться почему не происходит добавления пользователя в SQL и вышли на то что причина в том что добавляются пользователи не домена, а локального компьютера. На sql выполняется запрос с котором в параметрах suser_sid ('локальный компьютер\testuser') и sp_grantlogin 'локальный компьютер\testuser', скорее всего тут должен быть домен, но не понятно почему система его не подставляет. Возможно где то должна прописываться константа? вы не могли бы помочь мне с этим вопросом?

Анатолий Придыбайло

Василий, Лучше задайте свой вопрос в специальном разделе сайта, там вы с большей вероятностью сможете получить ответ - https://club.directum.ru/questions

Авторизуйтесь, чтобы написать комментарий