2015-09-18

Синхронизация пользователя из SSO (OID) в OEBS

Случайно удалил пользователя OEBS в OID. Как результат: пользователь в OEBS живет (а удалить оотуда ничего нельзя), не изменяется (пишет ошибку на выполение пакета fnd_ldap_wrapper) и не синхронизируется назад.

Покопавшись, так и не нашел культурного способа синхронизировать одного пользователя.

Решил действовать в лоб, а именно:
1. Завести руками пользователя в OID
2. Узнать его guid
3. Прописать guid в fnd_user
Первый шаг делается через Oracle Directory Manager, второй и третий скриптом

DECLARE
  l_user_name VARCHAR2(4000) := 'test_user';
  l_guid      RAW(16);
BEGIN
  l_guid := fnd_ldap_user.get_user_guid_and_count(p_user_name => l_user_name,
                                                  n           => :user_count);
  dbms_output.put_line('l_guid=' || rawtohex(l_guid));
  UPDATE fnd_user u SET u.user_guid = l_guid WHERE user_name = l_user_name;
END;

После этого пользователь без ошибок меняется через интерфейс и может зайти под своим паролем.

Два самых больших вопроса, которые меня мучают и о которых, возможно, напишу позднее:
* есть ли культурный способ запушить пользователя (ровно одного, без удаления всей ветки) в OID
* Если верить функции fnd_ldap_user.get_user_guid GUID пользователя хранится в атрибуте orclguid. Но в Oracle Directory Manager такого атрибута я так и не нашел. Наверное эта утилита не позволяет смотреть raw значения. Ну хоть бы написало, что атрибут есть и не пустой :(

Комментариев нет: