-
Имеем функцию, написана мной. function Internal_Create_OBP(p_OBP in varchar2) return varchar2 is vRes varchar2(256); begin vRes := External_Create_OBP(p_OBP); end;
хочу, что бы практически любой мог вызвать мою функцию Internal_, а из неё что бы можно было вызвать External_ от имени
которую не каждый может вызвать, т.к. права на нее ограничены. Login|pass достаточных прав есть.
-
текст External_Create_OBP нет, он на удаленном сервере, посмотреть нельзя
внутри External_Create_OBP, как показывают эксперименты, определяется логин запускающего юзера, который прописан в некую таблицу. И, если там не прописан юзер, то даже запустив функцию, получим отлуп на программном уровне логики.
Юзер со всеми правами есть. И прописан он там где надо везде. Надо что бы любой юзер мог запустить мою обертку, а она как-бы от имени этого Юзера, вызвала удаленку
-
ф-ция, при наличии прав на её выполнение, по умолчанию, работает с правами definer'а(authid definer). definer не проходит авторизацию в external_create_obp?
-
> Кщд (06.07.12 09:35) [2]
права - с этим разобрался. Функция external_create_obp определяет текущего юзера и смотрит где-то имеет ли он права запускать ее. грубо говоря, она делает select count(*) into N from SecretTable where UserLogin = GetCurrentLogin() if N > 0 then можно_запускать.
как мне написать функцию, что бы было аля так begin CurrentUser := KeepCurrentUser; My_AlterSession('GoodUser/Password'); vRes := External_Create_OBP(p_OBP); My_AlterSession(CurrentUser); end;
-
>AV © (06.07.12 15:19) [3] >как мне написать функцию, что бы было аля так если под пользователем понимается пользователь Oracle, то такой код невозможен
>текст External_Create_OBP нет, он на удаленном сервере, посмотреть нельзя через db_link? или?..
в общем случае, External_Create_OBP - черный ящик и гадать, что и как там делается, нелепо
нужен код
|