尝试设置特定的安全测试用例。这个想法是创建一个可以使用select语句从PL/SQL调用的包。该包可以工作并创建表,但当我在Oracle SQL Developer中运行SELECT evil_pkg.CreateTab() FROM DUAL
时,我会得到
ORA-00904:"EVIL_PKG"。"CREATETB":无效标识符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;
包内的过程不能从SQL调用。
如果您将过程转换为函数(可能返回true或false或返回值),则可以从sql中调用该函数。
你也可以在这里看到讨论,以加深你的理解。