【VC++开源代码栏目提醒】:网学会员为需要VC++开源代码的朋友们搜集整理了使用Wrap加密,保护Oracle程序源代码 - 培训资料相关资料,希望对各位网友有所帮助!
存储过程、函数、包等结构表示了软件
系统的业务逻辑和领域逻辑。
将业务逻辑组织在数据层之上特别是数据库
软件中是一种比较传统和常见的做法。
虽然这种方式与时下流行的
设计理念有差异但是在实际
工作中却有着很多优势。
作为领域逻辑的代表具体的过程实现对软件企业来说是一笔重要的无形资产财富是需要额外进行保护的。
但是在Oracle中我们是可以直接的看到各种函数逻辑的实现。
所以我们需要一种手段保护在Oracle数据字典中保存的源
代码信息。
在Oracle中推出了Wrap技术既可以实现
代码的加密使用户不能够直接获取到程序
代码的DDL语句同时不会影响到
程序代码的执行。
在最新的Oracle版本中提供了两种方式进行Wrap加密。
1 Wrap命令行工具可以在命令行中实现源
代码文件的加密 2 Dbms_ddl包其中包括的方法也可以实现在PL/SQL中进行
代码的加密 非Wrap使用时的情况 首先我们可以查看在没有进行Wrap处理的时候Oracle如何进行源
代码保存。
演示
代码本文中将使用该段SP作为
演示内容。
SQL create or replace procedure p_wrap_test_nc 2 o_
vc_message out varchar2 3 is 4 begin 5 dbms_output.put_linewrap Test Procedure working 6 end p_wrap_test_nc 7 / Procedure created. 当没有进行Wrap处理的时候我们可以通过DBMS_METADATA和user_source等数据字典工具查看到源
代码。
SQL set serveroutput on size 10000 SQL exec dbms_output.put_linedbms_metadata.get_ddlobject_typePROCEDUREnameP_WRAP_TEST_NC CREATE OR REPLACE PROCEDURE SCOTT.P_WRAP_TEST_NC o_
vc_message out varchar2 is begin dbms_output.put_linewrap Test Procedure working end p_wrap_test_nc SQL 1 select linetext from user_source 2 where lowernamep_wrap_test_nc SQL / LINE TEXT ---------- ------------------------------------------------------------------------------- 1 procedure p_wrap_test_nc 2 o_
vc_message out varchar2 3 is 4 begin 5 dbms_output.put_linewrap Test Procedure working 6 end p_wrap_test_nc 6 rows selected. 使用Wrap命令行工具进行加密处理 使用Wrap命令行处理是比较传统的源
代码加密手段。
思路和过程如下 1. 将编写好并且调试好的程序保存为.sql源
代码文件保存在本地磁盘上 2. 通过命令行工具wrap将源
代码文件处理为加密过的文件通常为.plb格式。
此时的文件内容已经是加密过的 3. 在Oracle的命令行中执行处理过的加密文件。
Oracle可以将加密信息识别为正确的
代码信息并且将加密文保存在数据字典中 4. 开 下面进行过程演示。
首先将存储过程定义文件p_wrap_test_nc保存为.sql文件名称为p_wrap_test_nc.
sql之后进行处理。
Wrap工具有两个参数iname和oname。
Iname指定的进行处理的文件名称而oname指定的是处理后的输出文件。
//命令行处理 E:wrap inamep_wrap_test_nc.sql onamep_res_nc.plb PL/SQL Wrapper: Release10.2.0.1.0- Production on星期三5月 18 13:10:46 2011 Copyright c 1993 2004 Oracle. All rights reserved. Processing p_wrap_test_nc.sql to p_res_nc.plb 此时如果打开输出文件可以看到加密过的密文
代码。
create or replace procedure P_WRAP_TEST_NC wrapped a000000 93 ce bmPSrzSWJbvbB0IrfiI/oW92IYwg0zwfyisfI45kJpkzm6plaNJokfFPdh3plfljn9C1nb w3O1Zdpo9ZxuTivH2iNAtzHVSfeEjowmNvtLZd6IVzY9f4oEfz5krpcsJuGBN6u5IwMCeYI2 MTT9hjiE/3uwnVOQwJ1GSxTNNEpkte9Tuws/sGyFHlNX6DnVLtPv3Jz4d.... 接下来通过执行这些加密文件来创建对象。
//执行生成的
代码文件 SQL e:p_res_nc.plb Procedure created 之后通过执行存储过程来确定对象创建。
--执行成功 SQL set serveroutput on size 10000 SQL var x varchar2100 SQL exec P_WRAP_TEST_NC:x Wrap Test Procedure Working PL/SQL procedure successfully completed x --------- 说明数据库中已经建立了该对象可以执行成功。
接下来我们通过查看数据字典信息确定是否加密。
//获取源文件 SQL exec dbms_output.put_linedbms_metadata.get_ddlobject_type PROCEDUREname P_WRAP_TEST_NC CREATE OR REPLACE PROCEDURE SYS.P_WRAP_TEST_NC wrapped a000000 7 93 ce bmPSrzSWJbvbB0IrfiI/oW92IYwg0zwfyisfI45kJpkzm6plaNJokfFPdh3plfljn9C1nb w3O1Zdpo9ZxuTivH2iNAtzHVSfeEjowmNvtLZd6IVzY9f4oEfz5krpcsJuGBN6u5IwMCeYI2 MTT9hjiE/3uwnVOQwJ1GSxTNNEpkte9Tuws/sGyFHlNX6DnVLtPv3Jz4d 篇幅原因有省略…… PL/SQL procedure successfully completed //检查数据字典信息 SQL select linetext from user_source where nameP_WRAP_TEST_NC LINE TEXT ---------- -------------------------------------------------------------------------------- 1 procedure P_WRAP_TEST_NC wrapped bmPSrzSWJbvbB0IrfiI/oW92IYwg0zwfyisfI45kJpkzm6plaNJokfFPdh3plfljn9C1nb w3O1Zdpo9ZxuTivH2iNAtzHVSfeEjowmNvtLZd6IVzY9f4oEfz5krpcsJuGBN6u5IwMCeYI2 MTT9hjiE/3uwnVOQwJ1GSxTNNEpkte9Tuws/sGyFHlNX6DnVLtPv3Jz4d 结论使用Wrap命令行加密的原则就是将源
代码独立作为文件单独保存在数据字典中仅仅保存加密过的密文。
这样就剔除了Oracle数据库作为源
代码容器的作用也就防止业务逻辑和关键信息算法的丢失。
除了使用Wrap工具外还可以使用DBMS_DDL包进行处理。
这种方式就是在PL/SQL
代码中实现加密处理。
DBMS_DDL包有两个处理方法一个为Wrap的函数另 DBMS_DDL.Wrap函数是将一个字符串或者类似的结构体作为参数传入其中返回加密过的
代码信息。
但是wrap函数只是将
代码加密并不执行。