从SELECT执行包时ORA-00904

时间:2016-04-13 21:35:16

标签: oracle security plsql plsqldeveloper

尝试设置特定的安全测试用例。我们的想法是创建一个可以使用select语句从PL / SQL调用的包。该包工作并创建表,但是当我在Oracle SQL Developer中运行SELECT evil_pkg.CreateTab() FROM DUAL时,我得到了

  

ORA-00904:" EVIL_PKG"。" CREATETAB":无效的标识符   00904. 00000 - "%s:无效标识符"   *原因:
  *动作:行错误:41列:8

这有可能做到吗? 这里的目标是以这种特殊的方式执行包,而不仅仅是 执行包。

这是包裹:

--Specification
CREATE OR REPLACE PACKAGE evil_pkg AS
  PROCEDURE CreateTab;
END evil_pkg;
/

--Body 
CREATE OR REPLACE PACKAGE BODY evil_pkg AS

  PROCEDURE CreateTab
AS 

BEGIN 

 execute immediate 'CREATE TABLE my_evil_table (id number) ';

      COMMIT ; 

EXCEPTION 
        WHEN OTHERS THEN 
        DBMS_OUTPUT.PUT_LINE(SQLERRM);
        DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
        ROLLBACK;
        RAISE;

        END CreateTab;

END evil_pkg;

1 个答案:

答案 0 :(得分:1)

无法从SQL调用包内的过程。

如果将过程转换为函数(返回可能为true或false或返回值),则可以从sql调用。

您也可以在此处看到discussion以进一步理解。