您好,欢迎访问一九零五行业门户网

Oracle中加密PL/SQL代码

加密一个pl/sql单元就是隐藏pl/sql代码的过程。可以使用oracle提供的wrap工具和dbms_ddl进行加密。wrap工具在命令行运行来处理一
下面不才根据oracle官方文档讲解一下如何加密pl/sql代码,希望大家共同学习:
主要内容包含以下三块:
一、什么叫加密(二进制文件的混淆技术混淆 obfuscation)?
加密一个pl/sql单元就是隐藏pl/sql代码的过程。可以使用oracle提供的wrap工具和dbms_ddl进行加密。
wrap工具在命令行运行来处理一个输入的sql 文件,例如sql*plus的安装脚本。dbms_ddl子程序加密单个动态生成的pl/sql 单元,例如一个‘create procedure’声明。
       加密的优点:
     1. 防止其他开发人员滥用你的应用或者商业竞争者偷看你的逻辑。
     2. 加密后即使通过user_source、all_source或者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 .
      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:
sql> conn hr/hr  已连接。      sql> conn hr/hr已连接。    pl/sql 过程已成功完成。加密过程如下:
1. 保存wraptest.sql文件到d盘根目录:
2.命令行中输入以下语句:
三、使用dbms_ddl子程序加密pl/sql代码:dbms_ddl子程序介绍:
dbms_dll包含wrap函数和create_wrapped存储过程来加密单独的pl/sql块,如包声明,包体,函数,存储过程,类型声明或者类型体。这些重载的子程序提供加密动态生成的pl/sql块的机制。
dbms_ddl子程序使用案例:
声明以下语句,并调用dbms_ddl进行加密:
查看user_source中 emp_actions包的源代码是否加密:...............
---------------------------------------------------
made by dylan.
其它类似信息

推荐信息