ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 调用者权限过程对OWNER对象的依赖

调用者权限过程对OWNER对象的依赖

原创 Linux操作系统 作者:yangtingkun 时间:2010-09-23 23:57:15 0 删除 编辑

今天在看定义者、调用者权限部分想到的这个问题。

 

 

对于调用者权限存储过程,不同的用户访问是本用户下的表,但是如果存储过程的OWNER用户下存储过程所依赖的表被删除,其他用户下还能否正常运行这个过程。

做了个简单的测试:

SQL> CONN YANGTK/YANGTK
已连接。
SQL> CREATE TABLE T (ID NUMBER);

表已创建。

SQL> CREATE OR REPLACE PROCEDURE P_TEST
  2  AUTHID CURRENT_USER
  3  AS
  4  BEGIN
  5  INSERT INTO T VALUES (1);
  6  END;
  7  /

过程已创建。

SQL> GRANT EXECUTE ON P_TEST TO TEST;

授权成功。

SQL> CONN TEST/TEST
已连接。
SQL> CREATE TABLE T (ID NUMBER);

表已创建。

SQL> EXEC YANGTK.P_TEST

PL/SQL 过程已成功完成。

SQL> SELECT * FROM T;

        ID
----------
         1

SQL> CONN YANGTK/YANGTK
已连接。
SQL> DROP TABLE T PURGE;

表已删除。

SQL> SELECT OBJECT_NAME, OBJECT_TYPE, STATUS
  2  FROM USER_OBJECTS
  3  WHERE OBJECT_NAME = 'P_TEST';

OBJECT_NAME                    OBJECT_TYPE         STATUS
------------------------------ ------------------- -------
P_TEST                         PROCEDURE           INVALID

SQL> CONN TEST/TEST
已连接。
SQL> EXEC YANGTK.P_TEST
BEGIN YANGTK.P_TEST; END;

             *
第 1 行出现错误:
ORA-06550:
第 1 行, 第 14 列
:
PLS-00905:
对象 YANGTK.P_TEST 无效

ORA-06550:
第 1 行, 第 7 列:
PL/SQL: Statement ignored

虽然TEST用户执行YANGTK用户下的P_TEST过程,插入的是自己用户中的T表,但是如果存储过程的OWNER用户删除了过程依赖的表,即使其他用户下存储过程仍然可以执行,Oracle也会将存储过程置于INVALID状态,而且其他用户运行并不会导致存储过程成功编译,也就是说调用者存储过程依赖OWNER下的对象。

 

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

下一篇: 表列授权
请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1964
  • 访问量
    11077106