当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
Oracle中加密PL/SQL源码
发布时间:2010/10/15 10:02:12 来源:www.xue.net 编辑:城市总裁吧
     Oracle listener静态注册和动态注册,主要是为了保护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 oname=/yourdir/yourfile.out

  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;

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved