oracle 加密
Wrap方式加密 Wrap的限制: 1.此方法对加密类似密码的东西,不是很安全。 2.加密后的文件对于一般人来说,是比较安全的,但是对于专业人士来说,也是形同虚设的。 3.不能加密触发器。 4.加密的过程中,是不会检查...
Wrap方式加密
Wrap的限制:
1.此方法对加密类似密码的东西,不是很安全。
2.加密后的文件对于一般人来说,是比较安全的,但是对于专业人士来说,也是形同虚设的。
3.不能加密触发器。
4.加密的过程中,是不会检查你的语法错误的,只是在编译的时候会检查。
5.他是向上兼容的,依赖于Oracle的版本,比如是8.1.5的加密文件,可以在8.1.6的版本上跑,但是
8.1.6版本的Oracle加密文件,在8.1.5上不一定能跑。
6.只能加密如下类型,不能加密匿名块
CREATE [OR REPLACE] FUNCTION function_name CREATE [OR REPLACE] PROCEDURE procedure_name CREATE [OR REPLACE] PACKAGE package_name CREATE [OR REPLACE] PACKAGE BODY package_name CREATE [OR REPLACE] TYPE type_name AS OBJECT CREATE [OR REPLACE] TYPE type_name UNDER type_name CREATE [OR REPLACE] TYPE BODY type_nameDBMS_DDL Subprograms方式加密
DBMS_DDL包含了加密存储过程,函数,类型说明,类型体,包说明,包体,此子程序提供了动态生成PLSQL单元的能力。其实内部就是一个WRAP函数和一个CREATE_WRAPPED存储过程。再加上一个异常处理的单元MALFORMED_WRAP_INPUT。
当然调用DBMS_DDL.CREATE_WRAPPED的时候必须保证你的本地没有生命这样的存储过程,或者你在调用的时候要加上SYS.DBMS_DDL
.WRAP
or SYS.DBMS_DDL
.CREATE_WRAPPED,这个时候就得有执行这两个存储过程的权限了。
DECLARE package_text VARCHAR2(32767); -- text for creating package spec & body FUNCTION generate_spec (pkgname VARCHAR2) RETURN VARCHAR2 AS BEGIN RETURN 'CREATE PACKAGE ' || pkgname || ' AS PROCEDURE raise_salary (emp_id NUMBER, amount NUMBER); PROCEDURE fire_employee (emp_id NUMBER); END ' || pkgname || ';'; END generate_spec; FUNCTION generate_body (pkgname VARCHAR2) RETURN VARCHAR2 AS BEGIN RETURN 'CREATE PACKAGE BODY ' || pkgname || ' AS PROCEDURE raise_salary (emp_id NUMBER, amount NUMBER) IS BEGIN UPDATE employees SET salary = salary + amount WHERE employee_id = emp_id; END raise_salary; PROCEDURE fire_employee (emp_id NUMBER) IS BEGIN DELETE FROM employees WHERE employee_id = emp_id; END fire_employee; 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; /DBMS_DDL Subprograms限制:
值得注意的是当你调用DBMS_SQL
.PARSE这个函数去解析
DBMS_DDL
.WRAP这个加密的结果的时候,传入的文本超多了32767 bytes,你就必须设置
LFFLG为FALSE,否则DBMS_SQL
.PARSE这个解析的结果将是混乱的
很赞哦! (1053)