DBA_SOURCE数据字典看不见源代码 。 3. SQL*PLUS可以处理加密后的程序。 4. 导入导出工具也支持加密代码,你可以备份或者移动已经加密的存储过程。 对加密的一些提示: 1. 当加密一个包或者对象类型,只加密包体不加密声明。这就允许开发人员看见将要使用的包或类型的声明,但是看不到实现。 2. 加密后的源码不可以编辑,如果要修改可以编辑源代码,然后再加密。你也可以推迟加密操作到源代码最终被应用。 3. 为了确保所有重要的源代码都被加密,最好加密后在编辑器中查看确认。 加密方法的局限性: 1. 虽然加密帮助隐藏源程序的逻辑并且使解密变的异常困难,Oracle并不推荐使用该方法加密用户密码和表名。 加密PL/SQL代码不能绝对阻止一切试图查看源代码的操作。 2. 加密不支持触发器,为了隐藏一个触发器的工作,我们可以写一个one-line触发器来调用已经加密的存储过程。 3. 加密的过程并不会去检查PL/SQL代码中的语法或者语义上的错误,例如表或视图不存在。这些错误只有在编译或执行的时候才会检查被发现。 4. 被加密的PL/SQL程序不能导入到低版本的数据库中,Oracle支持是向上兼容,不支持向下兼容。例如,你能装载在V8.15上加密过的文件到 V8.16,但是反过来就不行! 5. 由于源代码是PL/SQL编译器解析,而不是SQL*PLUS,所以要使用wrap工具加密的PL/SQL代码中不能使用SQL*PLUS符号声明的替代变量。 6. 绝大多数的注释将在加密的文件中去处。See "Input and Output Files for the PL/SQL wrap Utility". 7.如果调用DBMS_SQL.PARSE方法解析已通过DBMS_DDL.WRAP加密的PL/SQL单元时遇到语句使用了超过32767的VARCHAR2文本类型 ,需要设置LFFLG参数为 FALSE。否则DBMS_SQL.PARSE往加密的单元中新增行将会破坏程序单元! 二、使用WRAP工具加密PL/SQL代码: wrap工具介绍: 1. warp只处理PL/SQL块,不会处理匿名块或者触发器或者非PL/SQL块。 2. 语法如下: wrap iname=input_file [oname=output_file] 注:等号左右不能有空格 input_file 是包含SQL语句的文件名,扩展名不写默认为.sql,也可以使用其他扩展格式: 例如: wrap iname=/mydir/myfile wrap iname=/mydir/myfile.sql wrap iname=/mydir/myfile.src output_file 是加密后生成的文件名,扩展名为.pld。也可以使用其他扩展格式: 例如: wrap iname=/mydir/myfile.sql oname=/mydir/myfile.plb wrap iname=/mydir/myfile oname=/yourdir/yourfile.out wrap使用案例: For example, assume that the wrap_test.sql file contains the following:
|
|