Повышение эффективности управления корпоративными данными. Обеспечение взаимодействия ПП «Парус-Предприятие 8» с Active Directory Миндияров Илья Гафурович Главный специалист по программному обеспечению Центра информационных технологий и консалтинга «ПАРУС» [email protected] Рассматриваемые задачи •
Download ReportTranscript Повышение эффективности управления корпоративными данными. Обеспечение взаимодействия ПП «Парус-Предприятие 8» с Active Directory Миндияров Илья Гафурович Главный специалист по программному обеспечению Центра информационных технологий и консалтинга «ПАРУС» [email protected] Рассматриваемые задачи •
Повышение эффективности управления корпоративными данными. Обеспечение взаимодействия ПП «Парус-Предприятие 8» с Active Directory Миндияров Илья Гафурович Главный специалист по программному обеспечению Центра информационных технологий и консалтинга «ПАРУС» [email protected] 2014 Рассматриваемые задачи • Пример написания КОР-разделов по отображению данных из Active Directory • Пример пользовательской процедуры по обновлению адресной книги • Пример отчета о незаблокированных учетных записях уволенных сотрудников В архиве находятся файлы, используемые в презентации. Чтобы их открыть нужно: 1. Открыть PowerPoint 2. Открыть файл этой презентации 3. На текущем слайде 2 раза нажать кнопку мыши на иконке файла Общая проблематика Когда на предприятии работает Парус 8, то информация по актуальным кадровым данным находится внутри модуля “Управление персоналом и штатное расписание” , но т.к. адресная книга, например Microsoft Outlook, ведется в Active Directory, то после перевода работника на другую должность необходимо затратить некоторые усилия по редактированию адресной книги. Microsoft предоставляет возможность давать разрешения на редактирование отдельных атрибутов записей в Active Directory, но кадровики, как правило не меняют еще и адресную книгу. Другая проблема заключается в том, что при увольнении сотрудника возможно не всегда в IT-службу сообщают об увольнении и учетная запись пользователя в Active Directory не блокируется. Общая проблематика В презентации рассматривается только изменение атрибутов, которые отображаются в адресной книге и выборка учетных записей для анализа. Заведение пользователя и редактирование его прав доступа в домене мной не рассматривается, т.к. такие операции должны производиться только по письменным заявкам о предоставлении доступа в IT-службу предприятия. Общая проблематика В предлагаемом решении сотрудник IT-службы после того как сам создаст пользователя в домене один раз выполнит привязку между учетной записью пользователя в Active Directory и записью в разделе “Сотрудники” в ПП Парус 8. Далее редактирование информации о ФИО, должности, телефонах и размещению сотрудника осуществляется через Парус 8, что снимает нагрузку с IT-службы предприятия и повышает достоверность информации. Как работает решение Сотруднику IT-службы предоставляется отдельный модуль в котором он осуществляет привязку между сотрудником Парус 8 и объектом ActiveDirectory, причем содержание деревьев ActiveDirectory показывается в привычном виде (в виде дерева узлов) . Возможна настройка привязки из модулей в которых есть раздел сотрудники, например “Управление персоналом и штатное расписание”, “Расчет заработной платы”. Доступ к деревьям осуществляется на основе ролей Парус 8, т.е. разные роли могут видеть разные деревья, т.к. Парус 8 на предприятии один, а контроллеров доменов много и географически они могут располагаться в разных городах Как работает решение Сотрудникам, ответственным за ведение адресной книги в разделе “Сотрудники” предоставляется КОР-расширение “Связь с адресной книгой” Как работает решение Поля Фамилия, Имя, Отчество, Полное наименование берутся из справочника “Контрагент” Поле организация заполняется из работодателя “Сотрудника” Поля подразделение и должность заполняются либо из “Штатного подразделения” и “Штатной должности” раздела “Исполнения должностей” либо при явном заполнении полей “Подразделение”, “Должность” подраздела “Связь с адресной книгой”. Примечание: т.к. в ActiveDirectory существует ограничение на название в 64 символа в “Штатных подразделениях” и “Штатных должностях” вводятся дополнительные свойства . Как работает решение Поля “Подразделение” и “Должность” подраздела “Связь с адресной книгой” введены для случая если: 1. В адресной книге надо показать неправду 2. В адресной книге присутствуют записи о сотрудниках других организаций. Во втором случае “исполнения должности “ у такого контакта быть не может и становятся необходимы эти поля. Как работает решение При изменении данных раздела “Связь с адресной книгой” , при отработке приказов о переводе, увольнении автоматически меняются записи в ActiveDirectory. При возникновении ошибок в ActiveDirectory сетевому администратору высылается письмо с описанием ошибки. В подразделе “Связь с адресной книгой” может быть только одна запись (это более культурный аналог дополнительных свойств). В подраздел “Связь с адресной книгой” можно внести запись только после установления привязки с ActiveDirectory. Обычные пользователи Парус 8 напрямую к ActiveDirectory не обращаются – они не могут видеть с каким паролем осуществляется редактирование записей Установка: в Active Direcrory Создайте группу, например parus8. Создайте пользователя , например ADEditor. Включите ADEditor в parus8 Через мастер делегирования назначьте права группе parus8 : •на чтение и запись атрибутов displayName, givenName, middleName, sn, initials, company, department, title, telephoneNumber, otherTelephone, physicalDeliveryOfficeName. •на чтение атрибутов objectGUID, lockoutTime, userAccountControl http://technet.microsoft.com/en-us/library/cc756087(WS.10).aspx Если этих атрибутов в мастере не видно, то исправьте файл %systemroot%\System32\Dssec.dat http://support.microsoft.com/kb/296490/en-us Примечание: в интернете много статей и на русском языке Установка: в Active Direcrory Установите программу ADExplorer http://technet.microsoft.com/de-de/sysinternals/bb963907.aspx Проверьте подключение Установка: в Active Direcrory Обратите внимание на Apache Directory Studio™ http://directory.apache.org/studio Установка: в Парус 8 Из архива второго слайда этой презентации выполните в sqlplus файл java.sql Например: sqlplus parus@forum @java.sql Посмотрите файл java.log на предмет ошибок, которых быть не должно. В базе данных должны создаться следующие объекты UDO_T_AD_TMPUSERS – временная таблица UDO_P_AD_TMPUSERS_INSERT – процедура по заполнению UDO_T_AD_TMPUSERS ru/parus/ActiveDirectory - JAVA SOURCE и JAVA CLASS UDO_P_AD_FILL_USERS – процедура для вызова ru.parus.ActiveDirectory.fillUsers UDO_F_AD_MODIFY_BY_GUID – функция для вызова ru.parus.ActiveDirectory.modifyAttributes UDO_F_AD_GET_ESCAPED_GUID –сервисная функция по преобразованию атрибута objectGUID Пояснение Установленных объектов достаточно, чтобы научиться программно взаимодействовать с Active Directory UDO_P_AD_FILL_USERS это как бы аналог select objectGUID, distinguishedName, mail, displayName, givenName, middleName, sn, initials, company, department, title, telephoneNumber, otherTelephone, physicalDeliveryOfficeName, lockoutTime, userAccountControl from ActiveDirectory where searchFilter UDO_F_AD_MODIFY_BY_GUID это update ActiveDirectory set displayName= :displayName, givenName= :givenName, middleName= :middleName, sn= :sn, initials=:initials, company=:company, department= :department, title= :title, telephoneNumber= :telephoneNumber, otherTelephone= :otherTelephone, physicalDeliveryOfficeName= :physicalDeliveryOfficeName where objectGUID = : objectGUID Пояснение Собственно теперь если к сотруднику добавить “Дополнительное свойство” со значением objectGUID, то уже можно редактировать адресную книгу. Рассмотрим UDO_F_AD_MODIFY_BY_GUID ( LDAPADSERVER in varchar2, BASECTXDN in varchar2, SUSER in varchar2, SPASSWORD in varchar2, sGUID in varchar2, displayName in varchar2, givenName in varchar2, middleName in varchar2, sn in varchar2, initials in varchar2, company in varchar2, department in varchar2, title in varchar2, telephoneNumber in varchar2, otherTelephone in varchar2, physicalDeliveryOfficeName in varchar2 ); Пояснение Где LDAPADSERVER – адрес сервера: ldap://192.168.1.1 BASECTXDN - узел с которого начнется просмотр: DC=parus,DC=ru SUSER - пользователь в ActivDirectory: [email protected] SPASSWORD - пароль пользователя ADEditor Перед тем как работать необходимо под пользоватем SYS выполнить begin dbms_java.grant_permission('PARUS','SYS:java.net.SocketPermission','192.168.1.1:389','c onnect,resolve'); end; Это позволит пользователю PARUS соединяться с 192.168.1.1 на стандартный порт LDAP -389 Пояснение Функция UDO_F_AD_MODIFY_BY_GUID возвращает значение типа CLOB в котором записан XML поясняющий, что сделано и/или какие произошли ошибки выполнения. Например: <atribute name=" displayName"> <error> [LDAP: error code 50 - 00002098: SecErr: DSID-03150E8A, problem 4003 (INSUFF_ACCESS_RIGHTS), data 0 ?] </error> </atribute> Это означает, что нет прав на изменение displayName. Я объясняю это потому, что при первоначальной настройке доступа в ActiveDirectory необходимо будет находить ошибки. Установка проектного решения Из архива второго слайда этой презентации выполните в sqlplus файлы common.sql и classes.sql Например: sqlplus parus@forum @common.sql sqlplus parus@forum @classes.sql Скомпилируйте объекты В списке нескомпилированных возможно останутся UDO_P_AD_CLNPERSONS_BASE_SEND зависимые от этой процедуры UDO_P_AD_CLNPERONS_ADDRBK_INS UDO_P_AD_CLNPERONS_ADDRBK_UPD UDO_P_AD_CLNPERONS_ADDRBK_DEL Так может случиться потому что в системе нет пакета по отсылке электронной почты UDO_PKG_MAIL Описание проектного решения Решение состоит из КОР-классов: UDOActiveDirectoryAccessConf – настройка доступа в контроллеры ActiveDirectory UDOActiveDirectoryTree – представление для отображения узлов ActiveDirectory UDOActiveDirectoryUsers – представление для отображения записей в ActiveDirectory UDOActiveDirectoryClnpersons - раздел в котором осуществляется привязка к сотрудникам UDO_ClientPersonsAddrBook – подраздел для “Сотрудников” для хранения данных По sql-коду и слайдам презентации вы самостоятельно сможете повторить эти классы. Цель моего доклада показать как можно взаимодействовать с ActiveDirectory, т.к. “правильных” способов множество. UDOActiveDirectoryAccessConf UDOActiveDirectoryAccessConf Атрибуты UDOActiveDirectoryAccessConf Связи с “Организации”, “Каталоги”, “Роли” UDOActiveDirectoryAccessConf Пример формы на исправление UDOActiveDirectoryAccessConf Когда будете добавлять запись, то сначала дайте себе роль например “ADEditor” если вы будете добавлять запись для этой роли. В представлении раздела пароль будет показываться только если у вас есть права на редактирование каталога с записью. Таким образом пользователи не узнают пароля на учетную запись в ActivDirectory. UDOActiveDirectoryAccessConf Если у Вас один контроллер домена, то этот раздел можно не создавать. Проще создать 4 строковых константы в отдельном каталоге , на просмотр которого имеют право только администраторы. UDOActiveDirectoryTree UDOActiveDirectoryTree Атрибуты UDOActiveDirectoryTree Связи UDOActiveDirectoryUsers UDOActiveDirectoryUsers Атрибуты UDOActiveDirectoryUsers Связи с “Организациями” и с UDOActiveDirectoryTree UDOActiveDirectoryUsers Методы вызова UDOActiveDirectoryUsers Настройка метода вызова UDOActiveDirectoryUsers Настройка метода вызова Обратите внимание на действие перед открытием раздела UDOActiveDirectoryUsers Настройка метода вызова UDOActiveDirectoryClnpersons UDOActiveDirectoryClnpersons Атрибуты UDOActiveDirectoryClnpersons Метод Рабочее место IT-специалиста Собираем новый модуль Рабочее место IT-специалиста Подключаем модули и добавляем UDOActiveDirectoryClnpersons в меню Рабочее место IT-специалиста Эти 3 класса нужны только для того, чтобы устанавливать связь между сотрудником и атрибутом objectGUID Если сетевой администратор согласен напрямую устанавливать objectGUID у сотрудника путем копирования значения , то можно классы не создавать, а в “Сотрудниках” добавить новое КОР-действие и творчески переписать в UDO_P_AD_CLNPERSONS_SET_GUID вызовы pkg_env.PROLOGUE и pkg_env.EPILOGUE UDO_ClientPersonsAddrBook Этот класс является дочерним к штатному разделу “Сотрудники” UDO_ClientPersonsAddrBook Атрибуты UDO_ClientPersonsAddrBook Действия UDO_ClientPersonsAddrBook Метод вызова UDO_ClientPersonsAddrBook Ограничения UDO_ClientPersonsAddrBook В сотрудниках создайте действие с типом “Открыть раздел” UDO_ClientPersonsAddrBook В сотрудниках даем права и проверяем вызов Отчет о незаблокированных учетных записях 1. На втором слайде в архиве возьмите UDO_P_AD_NOTLOCKED.prc 2. Выполните скрипт 3. Создайте пользовательский отчет с типом “Двоичные данные” 4. Загрузите в отчет любой файл Отчет о незаблокированных учетных записях Как это работает UDO_P_AD_FILL_USERS_ALL(ncompany => NCOMPANY); Во временной таблице udo_t_ad_tmpusers сохранит сведения обо всех пользователях в ActivDirectory. Вообще-то эта процедура еще строит и дерево каталогов для КОР-классов и выбирает “лишние” атрибуты, но как пример для примера она нам подходит. Нас будут интересовать 2 поля учетной записи lockouttTme и userAccountControl --блокировки нет или блокировка в будущем (t2.lockouttime is null or t2.lockouttime > sysdate) and --флаг ...10 т.е. 2, говорит что учетная запись блокирована bitand(t2.useraccountcontrol, 2) = 0 Послесловие Код Java и PL/SQL рабочий , но следует понимать, что он предоставлен в учебных целях, например для сопоставления с адресной книгой достаточно 2 полей objectGUID и distinguishedName, а для отчета 4 - objectGUID , distinguishedName, lockoutTime и userAccountControl. Причем получение userAccountControl прилично увеличивает время выполнение запроса . Не рекомендуется редактировать поля cn и distinguishedName, не разобравшись, что они из себя представляют. На практике оказалось, что выполнение запросов из Java быстрее, чем через DBMS_LDAP. У Active Directory есть ограничение – просто запрос вернет 1000 записей (может и меньше, зависит от настроек), посмотрите как используется PagedResultsResponseControl Послесловие В сообщениях об ошибках LDAP [LDAP: error code 50 - 00002098: SecErr: DSID-03150E8A, problem 4003 (INSUFF_ACCESS_RIGHTS), data 0 ?] В “?]” – знак вопроса это замена 0x00, если замену не сделать ,то xml-файл в браузере корректно не отобразится. Даты в LDAP хранятся в формате с точностью 100 наносекунд, прошедшее с 1 января 1601. В LDAP в одном атрибуте может храниться несколько значений параметров. В ADExplorer при просмотре атрибута переходите на определение его в схеме, чтобы понять его размерность. Желаю успехов Вам в изучении взаимодействия с Active Directory, это дело полезное. СПАСИБО ЗА ВНИМАНИЕ «Корпорация ПАРУС», 129366, Москва, ул. Ярославская, д.10 корп.4, (495) 797-89-90, 797-89-91 [email protected] www.parus.com