Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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.
Т.е. упрощенно говоряпри нажатии теткой кнопки будет выполняться 
 
Код
begin
  dbms_job.change (номер джоба, время выполнения и т.д);
 end;

Так вот, эту процедуру может запускать на выполнение только юзер с привилегией дба.
Прочитала это в документации, и кроме того я смотрела трассировку, в момент запуска 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  дба - очередь из джобов пустая.
Предложила начальнику дать какой-нить одной из теток-юзеров привилегию дба, и пусть только она имеет право запускать джоб  (потому что теткам это вообще-то не нужно как они сами сказали, это начальник хочет чтобы все было максимально красиво),
хотя и понимаю что это неправильно, левому юзеру какому-то раздавать дба.
Начальник сказал - нет уж, так не надо, можно как-то по-другому, только я точно не помню как smile
Ребят, кто-нить может подсказать, как сделать в этом случае?
  

Автор: LSD 5.7.2006, 21:46
Создай в схеме того пользователя которым создавала JOB процедуру по запуску с AUTHID DEFINER и дай пользователю теток на нее EXECUTE. 

Автор: annika 6.7.2006, 08:02
Блин, в схеме того, КОТОРЫМ джоб создавала. А джоб был создан не владельцем схемы...
Все получилось, спасибо. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)