儲存過程中使用Dbms_Scheduler包的許可權問題

longwansheng發表於2010-02-08

轉自: http://groundsel.itpub.net/post/1284/496598

[@more@]

使用使用者Test_User建立儲存過程sp_create_job,在儲存過程中使用Dbms_Scheduler包建立Job_Test,過程建立成功,但是在執行的時候,碰到許可權問題,如下:

SQL> conn test_user/test_user@test

已連線。

SQL> CREATE OR REPLACE Procedure sp_create_job As

2 Begin

3 Dbms_Scheduler.Create_Job(Job_Name => 'Job_Test',

4 Job_Type => 'PLSQL_BLOCK',

5 Job_Action => 'Begin sp_test; End;',

6 Start_Date => sysdate + 2 / 24 / 60,

7 Enabled => True,

8 Comments => 'Test');

9 End;

10 /

過程已建立。

SQL> Begin

2 sp_create_job;

3 End;

4 /

Begin

*

1 行出現錯誤:

ORA-27486: 許可權不足

ORA-06512: "SYS.DBMS_ISCHED", line 99

ORA-06512: "SYS.DBMS_SCHEDULER", line 262

ORA-06512: "TEST_USER.SP_CREATE_JOB", line 3

ORA-06512: line 2

此時,檢查了一下Test_User相關的系統許可權,發現許可權都有,但是仍然出現上述錯誤。

SQL> Select * From Session_Privs Where Privilege Like '%SCHEDULE%' Or Privilege

Like '%JOB%';

PRIVILEGE

----------------------------------------

CREATE JOB

CREATE ANY JOB

MANAGE SCHEDULER

CREATE EXTERNAL JOB

事實上,在PL/SQL塊中直接使用Dbms_Scheduler包建立Job,並未碰到許可權問題。

SQL> Begin

2 Dbms_Scheduler.Create_Job(Job_Name => 'Job_Test',

3 Job_Type => 'PLSQL_BLOCK',

4 Job_Action => 'Begin sp_test; End;',

5 Start_Date => sysdate + 2 / 24 / 60,

6 Enabled => True,

7 Comments => 'Test');

8 End;

9 /

PL/SQL 過程已成功完成。

SQL> Begin

2 Dbms_Scheduler.drop_job('Job_Test');

3 End;

4 /

PL/SQL 過程已成功完成。

查了一下,發現Test_User的相關係統許可權,如Create Job是從其他角色上繼承而來,並沒有顯式對其授予該許可權,而在儲存過程或者函式中使用該包,得有顯式授權才可以。

SQL> conn /as sysdba

已連線。

SQL> Grant Create Job To Test_User;

授權成功。

SQL> conn test_user/test_user@test

已連線。

SQL> Begin

2 sp_create_job;

3 End;

4 /

PL/SQL 過程已成功完成。

問題解決。

Groundsel 發表於:2010.02.04 19:40 ::分類: ( Oracle ) ::閱讀:(11次) :: Permanent link

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/92289/viewspace-1031177/,如需轉載,請註明出處,否則將追究法律責任。

相關文章