登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

飞哥的技术博客

世上无难事,只怕有心人!

 
 
 

日志

 
 
 
 

Oracle中加密PL/SQL源码 - 自由自在  

2009-06-04 09:25:24|  分类: Oracle |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Oracle中加密PL/SQL源码

主要是为了保护PL/SQL源代码,防止PL/SQL代码被非法使用。可以使用wrap工具或者DBMS_DDL子程序对PL/SQL源码进行加密。wrap工具加密单个源文件,如SQL*Plus脚本。DBMS_DDL子程序加密单个动态生成的PL/SQL单元,如一个CREATE PROCEDURE声明。加密的源文件可以移动,备份,可被SQL*Plus和Improt和Export工具处理,但在静态数据字典视图*_SOURCE中无法看到源码。

WRAP语法

wrap iname=input_file [oname=output_file]

可省略文件扩展名,如以下的命令是等同的:
wrap iname=/mydir/myfile
wrap iname=/mydir/myfile.sql
输出文件默认的扩展名为.plb,当然你也可以指定不同的文件名和扩展名。
wrap iname=/mydir/myfile
wrap主要是混淆PL/SQL语句的主体部分,如下CREATE语句可以被加密:

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_name

CREATE [OR REPLACE] TRIGGER语句不能被加密,但你可调用加密的过程。加密文件中除了语句头部和C风格(/*...*/)注释外,其它所有注释被删除。

输出的文件为文本文件,可以在SQL*Plus执行:

SQL> @myfile.plb;

DBMS_DDL子程序
DMBS_DDL包包含WRAP函数和CREATE_WRAPPED过程。CREATE_WRAPPED过程加密语句并创建PL/SQL单元。如下为使用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;

wind 发表于 2009年2月14日 23:08

相关日记

最新日记
[转]Linux下镜像NOD32病毒库方法

使用apache发布,病毒库镜像可使用如下方法,都...

Oracle中加密PL/SQL源码

主要是为了保护PL/SQL源代码,防止PL/SQL...

PL/SQL中报ORA-00942错误的解决

在PL/SQL Developer调试Proced...

Google Apps邮件客户端设置

前段时间申请开通了Google Apps服务,但一...

VMware虚拟网卡

VMware虚拟网卡为虚拟机,服务控制台和VMke...




引文来源  Oracle中加密PL/SQL源码 - 自由自在
  评论这张
 
阅读(590)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018