「ADMUSER」という名前の Oracle データベース ユーザーがいて、次の権限があります。これは、私の理解によると、データベース ジョブを作成するために必要な権限です。[Oracle データベースのバージョンは Oracle 10g 10.2.0.4]
CREATE JOB
CREATE ANY JOB
CREATE EXTERNAL JOB
MANAGE SCHEDULER
しかし、DBMS_SCHEDULER.create_job メソッドを呼び出すストアド プロシージャを呼び出そうとすると、権限が不十分であるというエラーが発生します。
ストアド プロシージャ:
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;
以下のように、SQL開発者を使用してこのSPを実行しました(Java jdbcを使用して「{call PROD_Procedures.prod_dispatch_main_job(?,?,?)}」のように呼び出したときに機能しなかったため、このように実行しようとしました)。
begin
prod_procedures.prod_dispatch_main_job(1,10,'minutely');
end;
その後、次のエラーが発生しました。
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).
行 422 には、"DBMS_SCHEDULER.create_job"... 文字列が含まれています。しかし、前述したように、「session_privs」テーブルを確認すると、このユーザーが上記の権限を持っていることがわかります。誰でもこの問題を解決するのを手伝ってもらえますか?
更新: create_job 関数の job_class の値を「DEFAULT_JOB_CLASS」に置き換えました。その後、問題なく動作します。したがって、このユーザーには「CONSOLIDATE_CLASS」ジョブ クラスにアクセスする権限が必要だと思います。このジョブクラスでこのユーザーに付与された権限をデータベースで確認する方法を教えてください。オブジェクトに付与された権限を確認するには、どの表を参照すればよいですか?
権限を付与する前に、このユーザーが「CONSOLIDATE_CLASS」に対する実行権限を持っていないことを確認する必要があります。