| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Oracle > Запустить job под юзером без привилегии dba |
| Автор: annika 5.7.2006, 14:55 | ||
| Сервер Oracle 8i, клиентская часть oracle forms 6i. На сервере есть job, каждый день в 23.00 запускает на выполнение процедуру, которая апдейтит определенные строки в таблице TABLE. Когда я создавала его, я зашла в sql navigator под юзером - владельцем схемы, т.е. у которого привилегии dba по умолчанию, в навигаторе есть job manager, кнопка в тулбаре, в нем создала, все работает. Теперь начальник хочет, чтобы: есть тетки, которые работают с данной таблицей (через форму естессно), так вот чтобы они могли принудительно запускать джоб на выполнение, ставить ему свое время выполнения и т.д. Нашла как сделать, через пакет у sys'а dbms_job, процедура в нем называется change. Т.е. упрощенно говоряпри нажатии теткой кнопки будет выполняться
Так вот, эту процедуру может запускать на выполнение только юзер с привилегией дба. Прочитала это в документации, и кроме того я смотрела трассировку, в момент запуска dbms_job.change происходит апдейт таблицы sys.job$, естессно юзер не дба это сделать не сможет. Пробовала раздать только права на один пакет dbms_job, а никакие привилегии дба не трогать. Нифига не идет, тока когда юзер дба. Пробовала под этим юзером-теткой сделать вызов новой процедуры в другом пакете, на который они имеют права (уже давно имеют, здесь без косяков), а в этой новой процедуре вызывать dbms_job.change. Нифига. Во всех случаях вываливается ошибка вида ORA-23421: job number 323 is not a job in the job queue ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86 ORA-06512: at "SYS.DBMS_IJOB", line 514 ORA-06512: at "SYS.DBMS_JOB", line 253 ORA-06512: at line 2 Т.е. в очереди джобов такого джоба нет. Зашла под теткиным юзером USER1 в навигаторе, попробовала открыть джоб менеджер. И правда, в окне отображается так, что ни одного джоба на сервере нет. Заходишь под юзером дба - видишь в окне при нажатии кнопки джоб менеджера все 7 джобов, висящие в данный момент (созданные по другим поводам). Раздаешь юзеру USER1 дба, открываешь под ним джоб менеджер, видишь все 7 джобов. Убираешь у USER1 дба - очередь из джобов пустая. Предложила начальнику дать какой-нить одной из теток-юзеров привилегию дба, и пусть только она имеет право запускать джоб (потому что теткам это вообще-то не нужно как они сами сказали, это начальник хочет чтобы все было максимально красиво), хотя и понимаю что это неправильно, левому юзеру какому-то раздавать дба. Начальник сказал - нет уж, так не надо, можно как-то по-другому, только я точно не помню как Ребят, кто-нить может подсказать, как сделать в этом случае? |
| Автор: LSD 5.7.2006, 21:46 |
| Создай в схеме того пользователя которым создавала JOB процедуру по запуску с AUTHID DEFINER и дай пользователю теток на нее EXECUTE. |
| Автор: annika 6.7.2006, 08:02 |
| Блин, в схеме того, КОТОРЫМ джоб создавала. А джоб был создан не владельцем схемы... Все получилось, спасибо. |