Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19001633
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: 数据库开发技术

2008-05-28 11:22:58

WRAP工具的使用(代码包装)

 
    通过使用wrap对创建的数据库源代码进行封装,隐藏源代码的目的。 请看以下测试:
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
 
C:\Documents and Settings\hawk>sqlplus /nolog
 
SQL*Plus: Release 10.1.0.2.0 - Production on 星期四 8月 10 21:36:47 2006
 
Copyright (c) 1982, 2004, Oracle. All rights reserved.
 
SQL> connect system/system@ora10g
已连接。
SQL> create or replace function get_sysdate return date
 2 as
 3 begin
 4      return sysdate;
 5 end;
 6 /
 
函数已创建。
 
SQL> select get_sysdate from dual;
 
GET_SYSDATE
--------------
10-8月 -06
 
SQL> select T.TEXT from all_source t where t.name='GET_SYSDATE';
 
TEXT
--------------------------------------------------------------------------------
 
function get_sysdate return date
as
begin
    return sysdate;
end;
 
SQL> drop function get_sysdate;
 
函数已删除。
 
SQL> exit
从 Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options 断开
 
--这里将创建函数的语句保存到d:\get_sysdate.sql.然后继续执行以下操作:
 
C:\Documents and Settings\hawk>wrap iname=d:\get_sysdate.sql oname=d:\test.sql
 
PL/SQL Wrapper: Release 10.1.0.2.0- Production on 星期四 8月 10 21:41:15 2006
 
Copyright (c) 1993, 2004, Oracle. All rights reserved.
 
Processing d:\get_sysdate.sql to d:\test.sql
 
C:\Documents and Settings\hawk>sqlplus /nolog
 
SQL*Plus: Release 10.1.0.2.0 - Production on 星期四 8月 10 21:41:19 2006
 
Copyright (c) 1982, 2004, Oracle. All rights reserved.
 
SQL> connect system/system@ora10g
已连接。
SQL> @d:\test.sql
 
函数已创建。
 
SQL> show errors
没有错误。
SQL> select get_sysdate from dual;
 
GET_SYSDATE
--------------
10-8月 -06
 
SQL> select text from all_source where name='GET_SYSDATE';
 
TEXT
--------------------------------------------------------------------------------
 
function get_sysdate wrapped
a000000
354
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
 
TEXT
--------------------------------------------------------------------------------
 
abcd
abcd
abcd
abcd
abcd
abcd
abcd
8
46 71
cftrC1IR/5jUgJf6jdTfMVZR0HIwg8eZgcfLCNL+Xri/svQoSnSfUnRSXOfAsr2ym16mA752
1pRTbnFVAHOOU46ppsVbXCfXQ/zB4NemptBF818=
 
--以上可以看出, 代码已经被做封装加密处理,看不到源代码。
 
SQL>
SQL>
SQL> exit
从 Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options 断开
 
C:\Documents and Settings\hawk>
 
注意:并不是所有的创建对象的语句都可以被封装,以下创建语句可以被封装:
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
其他的如创建表结构、建视图结构、创建触发器等创建语句都不可以被封装,wrap会将其原封不动地输出到输出文件中。
    封装包和类型的时候, 只封装包体,对象体,不封装包头和对象头
封装过程是不可逆的,如果需要修改封装的对象, 需要修改源代码,然后重新封装,再到数据库中编译。
Wrap不封装触发器的源代码,如果想隐藏触发器的工作逻辑,可以在触发器中执行经过封装的存储过程,达到隐藏触发器代码的目的。
 
--完--

阅读(524) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~