Oracle Wrap工具加密过程

Oracle提供Wrap工具,可以用于加密你的Package等.
不过需要注意的是,加密后的代码无法解密,你需要保管好你的源代码。

以下是个例子:

1.源代码

create or replace function get_rowid
(l_rowid in varchar2)
return varchar2
is
ls_my_rowid      varchar2(200);          
rowid_type       number;          
object_number    number;          
relative_fno     number;          
block_number     number;          
row_number       number;  
begin
dbms_rowid.rowid_info(l_rowid,rowid_type,object_number,relative_fno, block_number, row_number);          
ls_my_rowid := 'Object# is       :'||to_char(object_number)||chr(10)||
                 'Relative_fno is :'||to_char(relative_fno)||chr(10)||
                 'Block number is :'||to_char(block_number)||chr(10)||
                 'Row number is    :'||to_char(row_number);
return ls_my_rowid ;
end;          
/                      

 

 

2.代码功能测试

 

[oracle@jumper tools]$ sqlplus scott/tiger

SQL*Plus: Release 9.2.0.4.0 - Production on Mon Nov 15 21:56:36 2004

Copyright (c) 1982, 2002, Oracle Corporation.   All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production

SQL> @f_get_rowid

Function created.

SQL> select rowid from dept where deptno=10;

ROWID
------------------
AAABiPAABAAAFRSAAA

SQL> select get_rowid('AAABiPAABAAAFRSAAA') from dual;                               

GET_ROWID('AAABIPAABAAAFRSAAA')
------------------------------------------------------------------
Object# is       :6287
Relative_fno is :1
Block number is :21586
Row number is    :0


SQL> !
[oracle@jumper tools]$ ls
ct.sql   ddlt.sql   f_get_rowid.sql   getevent.sql                                

3.使用wrap加密及加密后的代码

 

[oracle@jumper tools]$ wrap iname=f_get_rowid.sql oname=f_get_rowid.plb

PL/SQL Wrapper: Release 9.2.0.4.0- Production on Mon Nov 15 21:59:39 2004

Copyright (c) Oracle Corporation 1993, 2001.   All Rights Reserved.

Processing f_get_rowid.sql to f_get_rowid.plb
     
[oracle@jumper tools]$ cat f_get_rowid.plb
create or replace function get_rowid wrapped
0
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
3
8
9200000
1
4
0
17
2 :e:
1FUNCTION:
1GET_ROWID:
1L_ROWID:
1VARCHAR2:
1RETURN:
1LS_MY_ROWID:
1200:
1ROWID_TYPE:
1NUMBER:
1OBJECT_NUMBER:
1RELATIVE_FNO:
1BLOCK_NUMBER:
1ROW_NUMBER:
1DBMS_ROWID:
1ROWID_INFO:
1Object# is       :::
1||:
1TO_CHAR:
1CHR:
110:
1Relative_fno is :::
1Block number is :::
1Row number is    :::
0

0
0
83
2
0 a0 8d 8f a0 b0 3d b4
:2 a0 2c 6a a3 a0 51 a5 1c
81 b0 a3 a0 1c 81 b0 a3
a0 1c 81 b0 a3 a0 1c 81
b0 a3 a0 1c 81 b0 a3 a0
1c 81 b0 :2 a0 6b :6 a0 a5 57
a0 6e 7e :2 a0 a5 b b4 2e
7e a0 51 a5 b b4 2e 7e
6e b4 2e 7e :2 a0 a5 b b4
2e 7e a0 51 a5 b b4 2e
7e 6e b4 2e 7e :2 a0 a5 b
b4 2e 7e a0 51 a5 b b4
2e 7e 6e b4 2e 7e :2 a0 a5
b b4 2e d :2 a0 65 b7 a4
b1 11 68 4f 1d 17 b5
83
2
0 3 7 23 1f 1e 2b 1b
30 34 38 3c 59 44 48 4b
4c 54 43 75 64 68 70 40
8d 7c 80 88 63 a9 98 9c
a4 60 c1 b0 b4 bc 97 dd
cc d0 d8 94 c8 e4 e8 eb
ef f3 f7 fb ff 103 104 109
10d 112 115 119 11d 11e 120 121
126 129 12d 130 131 133 134 139
13c 141 142 147 14a 14e 152 153
155 156 15b 15e 162 165 166 168
169 16e 171 176 177 17c 17f 183
187 188 18a 18b 190 193 197 19a
19b 19d 19e 1a3 1a6 1ab 1ac 1b1
1b4 1b8 1bc 1bd 1bf 1c0 1c5 1c9
1cd 1d1 1d5 1d7 1db 1dd 1e9 1ed
1ef 1f0 1f9
83
2
0 1 a 2 d :2 2 :2 1 8
:3 1 e 17 16 :2 e :2 1 :3 d :2 1
:3 10 :2 1 :3 f :2 1 :3 f :2 1 :3 d 1
2 :2 d 18 20 2b 39 47 55
:3 2 11 24 26 2e :2 26 :2 11 3c
3e 42 :2 3e :2 11 45 3 :2 11 16
18 20 :2 18 :2 11 2d 2f 33 :2 2f
:2 11 36 3 :2 11 16 18 20 :2 18
:2 11 2d 2f 33 :2 2f :2 11 36 3
:2 11 16 18 20 :2 18 :2 11 :2 2 9
2 :9 1
83
4
0 :2 1 :5 2 :2 3
:2 1 :7 5 :5 6 :5 7
:5 8 :5 9 :5 a :b c
:11 d e :2 d :5 e
:2 d :5 e :2 d e
f :2 d :5 f :2 d
:5 f :2 d f 10
:2 d :5 10 :3 d :3 11
:2 b :7 1
1fb
4
:3 0 1 :3 0 2
:a 0 7e 1 :7 0
5 :2 0 3 4
:3 0 3 :7 0 5
4 :3 0 5 :3 0
4 :3 0 7 9
0 7e 2 a
:2 0 b 60 0
9 4 :3 0 7
:2 0 7 d f
:6 0 12 10 0
7c 0 6 :6 0
f 94 0 d
9 :3 0 14 :7 0
17 15 0 7c
0 8 :6 0 9
:3 0 19 :7 0 1c
1a 0 7c 0
a :6 0 13 c8
0 11 9 :3 0
1e :7 0 21 1f
0 7c 0 b
:6 0 9 :3 0 23
:7 0 26 24 0
7c 0 c :6 0
e :3 0 9 :3 0
28 :7 0 2b 29
0 7c 0 d
:6 0 f :3 0 2c
2d 0 3 :3 0
8 :3 0 a :3 0
b :3 0 c :3 0
d :3 0 15 2e
35 :2 0 7a 6
:3 0 10 :4 0 11
:2 0 12 :3 0 a
:3 0 1c 3a 3c
1e 39 3e :3 0
11 :2 0 13 :3 0
14 :2 0 21 41
43 23 40 45
:3 0 11 :2 0 15
:4 0 26 47 49
:3 0 11 :2 0 12
:3 0 b :3 0 29
4c 4e 2b 4b
50 :3 0 11 :2 0
13 :3 0 14 :2 0
2e 53 55 30
52 57 :3 0 11
:2 0 16 :4 0 33
59 5b :3 0 11
:2 0 12 :3 0 c
:3 0 36 5e 60
38 5d 62 :3 0
11 :2 0 13 :3 0
14 :2 0 3b 65
67 3d 64 69
:3 0 11 :2 0 17
:4 0 40 6b 6d
:3 0 11 :2 0 12
:3 0 d :3 0 43
70 72 45 6f
74 :3 0 37 75
0 7a 5 :3 0
6 :3 0 78 :2 0
7a 48 7d :3 0
7d 4c 7d 7c
7a 7b :6 0 7e
:2 0 2 a 7d
81 :3 0 80 7e
82 :8 0
53
4
:3 0 1 3 1
6 1 e 1
c 1 13 1
18 1 1d 1
22 1 27 6
2f 30 31 32
33 34 1 3b
2 38 3d 1
42 2 3f 44
2 46 48 1
4d 2 4a 4f
1 54 2 51
56 2 58 5a
1 5f 2 5c
61 1 66 2
63 68 2 6a
6c 1 71 2
6e 73 3 36
76 79 6 11
16 1b 20 25
2a
1
4
0
81
0
1
14
1
8
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0
3 1 0
22 1 0
2 0 1
c 1 0
13 1 0
27 1 0
18 1 0
1d 1 0
0

/                                    

4.测试加密后的代码

 

[oracle@jumper tools]$ exit
exit

SQL> drop function get_rowid;

Function dropped.

SQL> @f_get_rowid.plb

Function created.

SQL> select get_rowid('AAABiPAABAAAFRSAAA') from dual;

GET_ROWID('AAABIPAABAAAFRSAAA')
-----------------------------------------------------------------
Object# is       :6287
Relative_fno is :1
Block number is :21586
Row number is    :0


SQL>                         
            

本文作者:
eygle,Oracle技术关注者,来自中国最大的Oracle技术论坛itpub.
www.eygle.com是作者的个人站点.你可通过Guoqiang.Gai@gmail.com来联系作者.欢迎技术探讨交流以及链接交换.
原文出处:
http://www.eygle.com/faq/Use.Wrap.to.Encryption.You.Code.htm


=====================================
加密存储过程


当你创建过程或函数时,可先写将相关命令写入一SQL文件中,而后用WARP加密该文件,在SQL PLUS中执行该命令块,则创建的函数

或过程为加密的,本功能常用于商业加密

=================================
不知道哪位英雄用过oracle中的wrap加密工具?
我用
c:/>wrap iname=file1.sql
可就是出一行字。
还是不会用,

=============================
应该加一句c:/>set nls_language=US

==========================================

加密oracle存储过程

oracle提供了wrap工具来加密包括procedure、function、package等的PL/SQL源代码
wrap的执行在OS的命令行环境下
语法:wrap iname=input_file [oname=output_file]

限制:字符串、数字、变量名、表名、字段名被保留在加密文件中的,仅加密运算法则并限制被解密。所以,也就无法隐藏表名或者密码等
有些新的sql语法,需要指定选项edebug=wrap_new_sql,否则不能被支持

注意:
1、wrap只能检测出基本的语法错误,而由于不登录数据库所以无法检查出语义的错误
2、向上兼容,而不能向下兼容,即低版本加密的过程可以到高版本上编译,反之不行
3、加密package是仅加密package body,而不加密包声明
4、windows平台上执行时显示错误:kgepop: no error frame to pop to for error 1801
需要先定义 set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

举例:
源码
CREATE OR REPLACE PROCEDURE p_test
(
    i_var IN VARCHAR2,
    o_var OUT VARCHAR2
) IS
BEGIN
    o_var := i_var;
END p_test;
/


加密后的文件
CREATE OR REPLACE PROCEDURE p_test wrapped
0
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
3
7
9200000
1
4
0
5
2 :e:
1P_TEST:
1I_VAR:
1VARCHAR2:
1O_VAR:
1OUT:
0

0
0
1b
2
0 9a 8f a0 b0 3d 96 :2 a0
b0 54 b4 55 6a :2 a0 d b7
a4 a0 b1 11 68 4f 1d 17
b5
1b
2
0 3 1f 1b 1a 27 38 30
34 17 3f 2f 44 48 4c 50
54 2c 58 5c 60 62 6e 72
74 75 7e
1b
2
0 b 4 d :3 4 a e :2 4
:3 1 4 d 4 :2 1 5 :7 1
1b
4
0 1 :4 3 :5 4
2 :2 1 :3 7 :2 6
8 :7 1
80
4
:3 0 1 :a 0 16
1 :7 0 5 2c
0 :2 3 :3 0 2
:7 0 4 3 :3 0
a 15 0 7
5 :3 0 3 :3 0
4 :6 0 9 8
:3 0 b :2 0 16
1 c :2 0 4
:3 0 2 :3 0 e
f 0 11 :3 0
15 1 :4 0 15
14 11 12 :6 0
16 :2 0 1 c
15 19 :3 0 18
16 1a :8 0
c
4
:3 0 1 2 1
6 2 5 a
1 10
1
4
0
19
0
1
14
1
3
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0
1 0 1
6 1 0
2 1 0
0

/


加密文件名如果不指定的话,就是原文件主文件.plb
加密后使用 SQL> @加密文件名 编译到库中,查看的时候显示已经被加密
比如在pl/sql developer查看是显示 /* Source is wrapped */


====================================

WRAP只能加密过程/包/函数。如果要加密触发器,可以先写一个过程,加密这个过程,然后在TRIGGER里面调用这个过程。

转载于:https://www.cnblogs.com/nclly/archive/2009/10/20/1586927.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值