的动态设置Oracle中动态设置wrap的技巧(oracle中wrap)

动态设置Oracle中动态设置wrap的技巧

在Oracle数据库中,使用wrap可以对存储在数据库中的PL/SQL程序进行混淆保护,使得对源代码的潜在攻击者只能看到一些加密的二进制代码,而不能看到源代码。然而,在实际操作中,由于每次对PL/SQL程序进行变更或升级时都需要重新执行wrap命令,同时需要将wrap后的代码放入源代码所在的目录中,这样才能实现PL/SQL程序的加密保护。为了解决这个问题,本文将介绍如何在Oracle数据库中动态设置wrap。

动态设置wrap的技巧:

1. 创建包

创建一个包,其中定义两个过程:一个过程用于将代码wrap起来,另一个过程用于执行wrap后的代码。具体代码如下:

CREATE OR REPLACE PACKAGE test_wrap

IS

PROCEDURE do_wrap (p_name VARCHAR2, p_type VARCHAR2, p_owner VARCHAR2);

PROCEDURE do_execute (p_name VARCHAR2, p_owner VARCHAR2);

END;

CREATE OR REPLACE PACKAGE BODY test_wrap

IS

PROCEDURE do_wrap (p_name VARCHAR2, p_type VARCHAR2, p_owner VARCHAR2)

IS

v_sql VARCHAR2 (3000);

BEGIN

v_sql := ‘DECLARE v_code VARCHAR2 (32000); BEGIN DBMS_DDL.WRAP (v_code, :1, :2, :3); :4 := v_code; END;’;

EXECUTE IMMEDIATE v_sql

USING p_name,

p_type,

p_owner,

OUT NOCOPY v_wrapped;

/*

* write wrapped code to file (optional)

*/

END do_wrap;

PROCEDURE do_execute (p_name VARCHAR2, p_owner VARCHAR2)

IS

v_code VARCHAR2 (32000);

BEGIN

SELECT text INTO v_code

FROM dba_source

WHERE owner = p_owner

AND name = p_name

AND line = 1;

/*

* read wrapped code from file (optional)

*/

EXECUTE IMMEDIATE v_code;

END do_execute;

END;

通过以上代码可以看到,我们定义了do_wrap和do_execute两个过程来完成wrap和执行wrap后的代码的功能实现。

2. 设置Oracle环境变量

环境变量ORACLE_HOME、ORACLE_SID、LD_LIBRARY_PATH、LD_ASSUME_KERNEL是Oracle数据库运行所必须的环境变量。其中LD_ASSUME_KERNEL变量是用于在Oracle 9i和10g中确保正确设置Linux的kernal version。具体设置方法如下:

export ORACLE_HOME=/opt/oracle/product/10.2.0/db_1

export ORACLE_SID=orcl

export LD_LIBRARY_PATH=$ORACLE_HOME/lib

export LD_ASSUME_KERNEL=2.4.19

3. 调用包中的过程

调用包中的do_wrap和do_execute过程,分别实现wrap和执行wrap后的代码的功能实现。具体代码如下:

set serveroutput on;

declare

v_wrapped varchar2(32000);

begin

test_wrap.do_wrap(‘test’,’PROCEDURE’,’SCOTT’);

dbms_output.put_line(v_wrapped);

end;

执行以上代码,会将PROCEDURE test(SCOTT)的源代码wrap起来,并输出到终端窗口中。

总结:通过本文所介绍的动态设置wrap的技巧,可以实现对PL/SQL程序动态wrap的功能实现,从而简化了PL/SQL程序的维护、升级等工作,加强了PL/SQL程序的安全性和可靠性,提高了应用程序的可维护性及运行效率。同时,对于包含大量PL/SQL代码的应用程序,动态设置wrap还可以有效地防止源代码泄露,增强了应用程序的安全性。


数据运维技术 » 的动态设置Oracle中动态设置wrap的技巧(oracle中wrap)