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不封装触发器的源代码,如果想隐藏触发器的工作逻辑,可以在触发器中执行经过封装的存储过程,达到隐藏触发器代码的目的。
--完--