Случайно удалил пользователя 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 значения. Ну хоть бы написало, что атрибут есть и не пустой :(
Комментариев нет:
Отправить комментарий