Повышение эффективности управления корпоративными данными. Обеспечение взаимодействия ПП «Парус-Предприятие 8» с Active Directory Миндияров Илья Гафурович Главный специалист по программному обеспечению Центра информационных технологий и консалтинга «ПАРУС» [email protected] Рассматриваемые задачи •

Download Report

Transcript Повышение эффективности управления корпоративными данными. Обеспечение взаимодействия ПП «Парус-Предприятие 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