Oracle的存储过程加密(二)

2014-11-24 16:12:13 · 作者: · 浏览: 1
;
END ' || pkgname || ';';
END generate_body;
BEGIN
-- Generate package spec
package_text := generate_spec('emp_actions')
-- Create wrapped package spec
DBMS_DDL.CREATE_WRAPPED(package_text);
-- Generate package body
package_text := generate_body('emp_actions');
-- Create wrapped package body
DBMS_DDL.CREATE_WRAPPED(package_text);
END;
/
-- Invoke procedure from wrapped package
CALL emp_actions.raise_salary(120, 100);
当然调用DBMS_DDL.CREATE_WRAPPED的时候必须保证你的本地没有生命这样的存储过程,或者你在调用的时候要加上SYS.DBMS_DDL.WRAP or SYS.DBMS_DDL.CREATE_WRAPPED,这个时候就得有执行这两个存储过程的权限了。
加密完成之后,查询结果
SELECT text FROM USER_SOURCE WHERE name = 'EMP_ACTIONS';
TEXT
--------------------------------------------------------------------
PACKAGE emp_actions WRAPPED
a000000
1f
abcd
...
这样就成功加密了想要加密的东西。
DBMS_DDL Subprograms限制:
值得注意的是当你调用DBMS_SQL.PARSE这个函数去解析DBMS_DDL.WRAP这个加密的结果的时候,传入的文本超多了32767 bytes,你就必须设置LFFLG为FALSE,否则DBMS_SQL.PARSE这个解析的结果将是混乱的。
好了到此为止,我们的整个旅程就将结束了,东西说的不是很深,并且只是涉及到存储过程的加密,当然了,以此类推,如果你会了存储过程的加密方式,你也就会其他的加密了,知道这些已经够用了,毕竟不是每个项目都能用到此知识点。写的比较乱,主要是我防止日后再用到,能快速查出,备忘而已。