ITPub博客

首页 > Linux操作系统 > Linux操作系统 > JOB调用的权限问题

JOB调用的权限问题

原创 Linux操作系统 作者:yangtingkun 时间:2007-03-26 00:00:00 0 删除 编辑

今天在处理一个JOB错误的时候,才发现自己对JOB的运气权限理解有误。


一直认为JOB中WHAT存放的是匿名块,因此JOB中使用的权限应该和匿名块一致。没有想到JOB相当于定义者权限存储过程中的权限,只对直接授权有效,而对角色无效。

看一个简单的例子:

SQL> CREATE TABLE T (ID NUMBER);

表已创建。

SQL> CREATE USER TEST IDENTIFIED BY TEST DEFAULT TABLESPACE YANGTK;

用户已创建

SQL> GRANT CONNECT, RESOURCE TO TEST;

授权成功。

SQL> CREATE ROLE R_INSERT_T;

角色已创建

SQL> GRANT INSERT ON T TO R_INSERT_T;

授权成功。

SQL> GRANT R_INSERT_T TO TEST;

授权成功。

SQL> CONN TEST/TEST@TEST
已连接。
SQL> INSERT INTO YANGTK.T VALUES (1);

已创建 1 行。

SQL> BEGIN
2 INSERT INTO YANGTK.T VALUES (2);
3 END;
4 /

PL/SQL 过程已成功完成。

SQL> CREATE OR REPLACE PROCEDURE P_TEST_DEFINE AS
2 BEGIN
3 EXECUTE IMMEDIATE 'INSERT INTO YANGTK.T VALUES (3)';
4 END;
5 /

过程已创建。

SQL> EXEC P_TEST_DEFINE
BEGIN P_TEST_DEFINE; END;

*
ERROR 位于第 1 行:
ORA-00942: 表或视图不存在
ORA-06512: 在"TEST.P_TEST_DEFINE", line 3
ORA-06512: 在line 1

通过角色获得的授权,可以在SQL中和匿名块中使用,但是对定义者存储过程无效。

下面看看JOB的情况:

SQL> DECLARE
2 V_JOB NUMBER;
3 BEGIN
4 DBMS_JOB.SUBMIT(V_JOB, 'BEGIN INSERT INTO YANGTK.T VALUES (5); END;', SYSDATE);
5 COMMIT;
6 END;
7 /

PL/SQL 过程已成功完成。

SQL> COL WHAT FORMAT A60
SQL> SELECT JOB, WHAT, FAILURES FROM USER_JOBS;

JOB WHAT FAILURES
---------- ---------------------------------------------------- ----------
104 BEGIN INSERT INTO YANGTK.T VALUES (5); END; 1

SQL> EXEC DBMS_JOB.RUN(104)
BEGIN DBMS_JOB.RUN(104); END;

*
ERROR 位于第 1 行:
ORA-12011: 无法执行 1 作业
ORA-06512: 在"SYS.DBMS_IJOB", line 406
ORA-06512: 在"SYS.DBMS_JOB", line 272
ORA-06512: 在line 1

显然JOB无法正常运行,检查后台ALERT文件:

Sun Mar 18 20:35:49 2007
Errors in file f:oracleadmintestudumptest_ora_1032.trc:
ORA-12012: 自动执行作业 104 出错
ORA-06550: 第 1 行, 第 121 列:
PL/SQL: ORA-00942: 表或视图不存在
ORA-06550: 第 1 行, 第 102 列:
PL/SQL: SQL Statement ignored

由此可见,JOB的权限和存储过程一致,通过角色的授权是无效的。

SQL> CONN YANGTK/YANGTK@TEST
已连接。
SQL> GRANT INSERT ON T TO TEST;

授权成功。

SQL> CONN TEST/TEST@TEST
已连接。
SQL> EXEC DBMS_JOB.RUN(104)

PL/SQL 过程已成功完成。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-69212/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10486254