Oracle 儲存過程加密之wrap工具
《Oracle 儲存過程加密之wrap工具》
定場詩
道德三皇五帝,功名夏侯商周,五霸七雄鬧春秋,頃刻興亡過手,
青石几行名姓,北邙無數荒丘,前人播種後人收,說甚龍爭虎鬥。
引言:平時大家在做專案的時候,經常會遇到把Oracle儲存過程帶到專案現場來測試系統。這時如果想對自己的儲存過程進行保密,不使別人看到原始碼,就可以對已有的儲存過程進行加密保護。顧名思義,就是對Oracle儲存過程原始碼的加密。當然不是什麼時候都需要的,當有的專案對安全性要求比較高的時候可以採用,下面我就用案例來介紹這種加密方式和實驗結果。
實驗環境
作業系統版本
Red Hat Enterprise Linux Server release 6.5 (Santiago)
資料庫版本
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
資料庫例項名
shdb
wrap路徑
Oracle的oracle_home/bin目錄下有wrap 命令.
/opt/oracle/product/11.2.0/db_1/bin/wrap
實驗開始
1.建立一個sql檔案,在oracle使用者家目錄下建立
[oracle@zxt28 ~]$ vim leonarding.sql
create or replace procedure leo(i in number)
as
begin
dbms_output.put_line('input parameter: '||to_char(i));
end;
儲存&退出
[oracle@zxt28 ~]$ ll
total 3664228
drwxr-xr-x 7 oracle oinstall 4096 Aug 27 2013 database
drwxr-xr-x 2 oracle oinstall 4096 Jan 7 15:46 Desktop
-rw-r--r-- 1 oracle oinstall 128 Jan 14 16:49 leonarding.sql 已經生成
-rwxr-xr-x 1 root root 1395582860 Oct 17 2013 p13390677_linux-x86-64_11gR2040_database_1of2.zip
-rwxr-xr-x 1 root root 1151304589 Oct 17 2013 p13390677_linux-x86-64_11gR2040_database_2of2.zip
-rwxr-xr-x 1 root root 1205251894 Oct 16 2013 p13390677_linux-x86-64_11gR2040_grid.zip
2.Wrap方式加密
用法:
wrap的用法還是比較簡單的,一個命令就可以實現加密,以下是命令的格式
wrap iname=input_file [ oname=output_file ]
iname:指定的是原始檔
oname:指定的是轉換後加密檔案,oname選項可以省略如果省略wrap命令會自動生成檔名一模一樣的加密檔案,當然你也可以指定自己命名方式,如下所示
[oracle@zxt28 ~]$ wrap iname=leonarding.sql
PL/SQL Wrapper: Release 11.2.0.4.0- 64bit Production on Thu Jan 14 16:57:46 2016
Copyright (c) 1993, 2009, Oracle. All rights reserved.
Processing leonarding.sql to leonarding.plb 自動生成檔名一模一樣的加密檔案
[oracle@zxt28 ~]$ ll
total 3664232
drwxr-xr-x 7 oracle oinstall 4096 Aug 27 2013 database
drwxr-xr-x 2 oracle oinstall 4096 Jan 7 15:46 Desktop
-rw-r--r-- 1 oracle oinstall 322 Jan 14 16:57 leonarding.plb
-rw-r--r-- 1 oracle oinstall 128 Jan 14 16:49 leonarding.sql
此時檔案leonarding.plb的內容就是加密狀態,如下所示
[oracle@zxt28 ~]$ vim leonarding.plb
create or replace procedure leo wrapped
a000000
354
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
7
6f b6
nkxs9EzOsgeU6oDhPIYrMqr6O5cwg5nnm7+fMr2ywFyFodexpcOl0l6lmYEywLIlw4/AdCuP
wMAyW55SPqmpbbcguDSqEVpnEeMcL8b4MJK+J00Xi5SJpxaOFG9si+inGm+ko88RnCMuLuOq
NAMHC8hAsOjoDeGcCk+ZyF0G4Kam2x0svw==
自己指定加密檔案命名
[oracle@zxt28 ~]$ rm leonarding.plb
[oracle@zxt28 ~]$ wrap iname=leonarding.sql oname=leo.plb
PL/SQL Wrapper: Release 11.2.0.4.0- 64bit Production on Thu Jan 14 16:59:58 2016
Copyright (c) 1993, 2009, Oracle. All rights reserved.
Processing leonarding.sql to leo.plb
[oracle@zxt28 ~]$ ll
total 3664232
drwxr-xr-x 7 oracle oinstall 4096 Aug 27 2013 database
drwxr-xr-x 2 oracle oinstall 4096 Jan 7 15:46 Desktop
-rw-r--r-- 1 oracle oinstall 128 Jan 14 16:49 leonarding.sql
-rw-r--r-- 1 oracle oinstall 322 Jan 14 16:59 leo.plb
它預設輸出是原始檔名稱加上plb字尾,如果你要自己指定字尾名的話,也可以這樣寫,wrap iname=leonarding.sql oname=leo.out,當然只要加密之後的檔案能被Oracle正確解析就好了。linux是沒有副檔名概念的。
notes:如果你拿一個已經加密過的sql檔案,再次去用命令加密的話,得到的檔案實際上和原來的是一樣的,自己可以嘗試下。
3.編譯加密後的leo.plb儲存過程
[oracle@zxt28 ~]$ sqlplus shdb/shdb 登入資料庫
SQL*Plus: Release 11.2.0.4.0 Production on Thu Jan 14 17:24:18 2016
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SHDB@shdb> @/home/oracle/leo.plb 編譯儲存過程
Procedure created.
4.執行儲存過程leo
SHDB@shdb> set serveroutput on;
SHDB@shdb> exec leo(100);
input parameter: 100
PL/SQL procedure successfully completed.
SHDB@shdb> exec leo(200);
input parameter: 200
PL/SQL procedure successfully completed.
PL/SQL Developer中也是加密狀態,只能看到儲存過程名稱,看不到SQL語句
我們從資料字典中看看,也是看不到內容的對不!因此現在我們就可以大大方方的使用我們的儲存過程了。避免了資訊丟失風險。並且這個過程是不可逆的。
SQL> select name,text from user_source where type='PROCEDURE' and name='LEO';
NAME TEXT
------------------------------ ------------
LEO procedure leo wrapped
a000000
354
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
7
6c b2
qZ+TDoB6646qjalBmMEknutFrC4wg5nnm7+fMr2ywFyFodexpcOl0l6lmYEywLIlw4/AdCuP
wMAyW55SPqmpbbcguDSqEVpnEeMcL8b4MJK+J00Xi5SJpxaOFG9si+inGm+TPk2xd0bOxtoS
VzneMCcno8e+kr5U1bhSUn+mpn8cdlA=
PL/SQL Developer測試
SQL> exec leo(888);
input parameter: 888
PL/SQL procedure successfully completed
依舊那麼的順暢,依舊那麼的乾爽!!
小結
到此我們完全演繹了Oracle儲存過程wrap工具加密方法,其實Oracle還提供了DBMS_DDL Subprograms加密方法,DBMS_DDL包含了加密儲存過程,函式,型別說明,型別體,包說明,包體,此子程式提供了動態生成PL/SQL單元的能力。其實內部就是一個WRAP函式和一個CREATE_WRAPPED儲存過程。再加上一個異常處理的單元MALFORMED_WRAP_INPUT。
下面我們給出一些wrap工具注意事項
wrap的限制:
1.此方法不能對儲存過程名進行加密。
2.不能加密觸發器。
4.加密的過程中,是不會檢查你的語法錯誤的,在編譯的時候會檢查。
5.他是向上相容的,依賴於Oracle的版本,10g的可以在11g上跑,11g不可以在10g上跑,因為兩個用的不是一套加密演算法
6.只能加密如下型別,不能加密匿名塊
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
PDF版下載 Oracle 儲存過程加密之wrap工具.pdf
劉盛 Leonarding
2016.1.14
北京&winter
分享技術~成就夢想
Blog:
如果喜歡我的文章就請掃下面二維碼吧!關注微訊號:leonarding_public
在這裡你能得到技術、實事、熱點訊息等新興事物的思考和觀點,別的地方可能沒有的東西。我將為大家提供最新技術與資訊動態,傳遞正能量。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26686207/viewspace-1976943/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 加密儲存過程create_wrappedOracle加密儲存過程APP
- Oracle Pl/SQL 之 儲存過程OracleSQL儲存過程
- Oracle儲存過程Oracle儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- Oracle儲存過程-1Oracle儲存過程
- oracle的儲存過程Oracle儲存過程
- Oracle儲存過程例子Oracle儲存過程
- Oracle建立儲存過程Oracle儲存過程
- oracle plsql儲存過程OracleSQL儲存過程
- ORACLE 儲存過程示例Oracle儲存過程
- oracle 基礎溫習之 儲存過程Oracle儲存過程
- MySQL和Oracle對比之儲存過程MySqlOracle儲存過程
- MySQL之儲存過程MySql儲存過程
- 從sybase的儲存過程轉向oracle的儲存過程儲存過程Oracle
- 原創:oracle 儲存過程Oracle儲存過程
- oracle 儲存過程批次提交Oracle儲存過程
- oracle 儲存過程學習Oracle儲存過程
- [Flashback]Oracle flashback儲存過程Oracle儲存過程
- Oracle儲存過程學習Oracle儲存過程
- oracle的儲存過程格式Oracle儲存過程
- java 呼叫oracle 儲存過程JavaOracle儲存過程
- oracle--08儲存過程Oracle儲存過程
- MyBatis 示例之儲存過程MyBatis儲存過程
- [Q]怎麼樣加密儲存過程 zt加密儲存過程
- oracle儲存過程書寫格式Oracle儲存過程
- C#呼叫 oracle儲存過程C#Oracle儲存過程
- Oracle儲存過程基本語法Oracle儲存過程
- [Procedure]Oracle之分頁儲存過程Oracle儲存過程
- oracle 儲存過程遊標的使用Oracle儲存過程
- C#呼叫Oracle儲存過程C#Oracle儲存過程
- java中呼叫ORACLE儲存過程JavaOracle儲存過程
- 用java呼叫oracle儲存過程JavaOracle儲存過程
- Oracle 基礎 ----procedure(儲存過程)Oracle儲存過程
- Sqlsugar呼叫Oracle的儲存過程SqlSugarOracle儲存過程
- oracle父儲存過程呼叫子儲存過程procedure與輸出引數Oracle儲存過程
- 如何遷移RDS中的加密儲存過程加密儲存過程
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- Oracle工具——WRAPOracle