Oracle Wrap工具加密過程

來源:互聯網
上載者:User

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裡面調用這個過程。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.