Un usuario de la base de datos de Oracle no puede crear un trabajo de base de datos incluso con privilegios relevantes
Tengo un usuario de la base de datos de Oracle llamado "ADMUSER" con los siguientes privilegios, que son los privilegios necesarios para crear un trabajo de base de datos según mi entendimiento. [La versión de la base de datos de Oracle es Oracle 10g 10.2.0.4]
CREATE JOB
CREATE ANY JOB
CREATE EXTERNAL JOB
MANAGE SCHEDULER
Pero cuando trato de llamar a un procedimiento almacenado que a su vez llama al método DBMS_SCHEDULER.create_job, obtengo un error de privilegios insuficientes.
Procedimiento almacenado:
PROCEDURE prod_dispatch_main_job (l_max_job IN NUMBER,
l_interval IN NUMBER,
l_freq IN VARCHAR2)
BEGIN
DBMS_SCHEDULER.create_job (
job_name => 'PROD_DISPATCH_JOB',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN PROD_Procedures.prod_run_user_job('
|| l_max_job
|| '); END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'freq='
|| l_freq
|| ';interval='
|| l_interval,
job_class => 'CONSOLIDATE_CLASS',
enabled => TRUE,
auto_drop => FALSE);
END;
Ejecuté este SP como se menciona a continuación usando el desarrollador de SQL (traté de ejecutarme así porque no funcionó cuando llamé como "{call PROD_Procedures.prod_dispatch_main_job (?,?,?)}" Usando java jdbc).
begin
prod_procedures.prod_dispatch_main_job(1,10,'minutely');
end;
Entonces me dieron los siguienteserror.
Error starting at line 7 in command:
begin
prod_procedures.prod_dispatch_main_job(1,10,'minutely');
end;
Error report:
ORA-27486: insufficient privileges
ORA-06512: at "SYS.DBMS_ISCHED", line 99
ORA-06512: at "SYS.DBMS_SCHEDULER", line 262
ORA-06512: at "ADMUSER.PROD_PROCEDURES", line 422
ORA-06512: at line 2
27486. 00000 - "insufficient privileges"
*Cause: An attempt was made to perform a scheduler operation without the
required privileges.
*Action: Ask a sufficiently privileged user to perform the requested
operation, or grant the required privileges to the proper user(s).
La línea 422 contiene "DBMS_SCHEDULER.create_job" ... cadena. Pero como mencioné anteriormente, cuando verifiqué la tabla "session_privs", puedo ver que este usuario tiene los privilegios mencionados anteriormente. ¿Podría alguien ayudarme por favor a solucionar este problema?
ACTUALIZAR: Reemplazé el valor de job_class en la función create_job con 'DEFAULT_JOB_CLASS'. Entonces funciona sin ningún problema. Por lo tanto, creo que este usuario necesita algunos privilegios para acceder a la clase de trabajo 'CONSOLIDATE_CLASS'. ¿Podría alguien decirme cómo verificar la base de datos para los privilegios otorgados en esta clase de trabajo para este usuario? ¿Qué tabla debería consultar para verificar los privilegios otorgados en los objetos?
Necesito verificar que este usuario no tenga privilegios de ejecución en 'CONSOLIDATE_CLASS' antes de otorgar los privilegios.