1. 程式人生 > >oracle儲存過程加密

oracle儲存過程加密

引言:平時大家在做專案的時候,經常會遇到把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使用者家目錄下建立

[[email protected] ~]$ vim leonarding.sql

create or replace procedure leo(i in number)

as

begin

     dbms_output.put_line('input parameter: '||to_char(i));

end;

儲存&退出

[[email protected] ~]$ 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命令會自動生成檔名一模一樣的加密檔案,當然你也可以指定自己命名方式,如下所示

[[email protected] ~]$ 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    自動生成檔名一模一樣的加密檔案

[[email protected] ~]$ 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的內容就是加密狀態,如下所示

[[email protected] ~]$ 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==

自己指定加密檔案命名

[[email protected] ~]$ rm leonarding.plb

[[email protected] ~]$ 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

[[email protected] ~]$ 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儲存過程

[[email protected] ~]$ 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

[email protected]> @/home/oracle/leo.plb                                 編譯儲存過程

Procedure created.

4.執行儲存過程leo

[email protected]> set serveroutput on;

[email protected]> exec leo(100);

input parameter: 100

PL/SQL procedure successfully completed.

[email protected]> 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

轉自:https://www.cnblogs.com/loong-hon/p/6705545.html

相關推薦

oracle儲存過程加密

引言:平時大家在做專案的時候,經常會遇到把Oracle儲存過程帶到專案現場來測試系統。這時如果想對自己的儲存過程進行保密,不使別人看到原始碼,就可以對已有的儲存過程進行加密保護。顧名思義,就是對Oracle儲存過程原始碼的加密。當然不是什麼時候都需要的,當有的專案對安全性

Oracle儲存過程的簡單舉例

一、建立測試資料 --建立測試資料: create table person(編號 number(10),姓名 varchar2(20),密碼 varchar2(20)); insert into person values(1,'xzw','888'); select * from p

Oracle儲存過程例項分析總結(程式碼)

1.儲存過程結構 1.1 第一個儲存過程 ? 1 2 3 4

java面試問題:oracle儲存過程(procedure)和函式(function)的區別

oracle儲存過程(procedure)和函式(function)的區別 儲存過程 函式 用於在資料庫中完成特定的操作或者任務(如插入、刪除等) 用於特定的資料(如選擇)

Oracle儲存過程基礎內容

1 基本語法 1.1 無參無變數 create or replace procedure firstPro as begin dbms_output.put_line('hello word, my name is stored procedure'); end;

oracle 儲存過程 例項 迴圈 給查詢賦值 遊標取值

CREATE OR REPLACE PROCEDURE p_updete_gs is     --僅供參考   i_jdid varchar(32);   i_ryid varchar(32);   cursor cur is --

C#呼叫ORACLE儲存過程返回結果集

Oracle中scott使用者下建立儲存過程: (注:從9i開始有了sys_refcursor這種型別,在以前的Oracle版本中需要使用REF CURSOR,並且還需放在一個程式包中) create or replace procedure sp_getdept (result

Oracle儲存過程學習筆記(一)

SQL是一種語言! 一、先看一部分基礎: 也可參考該文章:https://www.cnblogs.com/Singleorb/p/6217268.html; 1、語法  CREATE OR REPLACE PROCEDURE 儲存過程名字     (      引數1 IN NUMBER,

SQL SERVER儲存過程加密和安全上下文

對SQL Server 2008的安全入門略作小結,以作備忘。本文涉及兩個應用:儲存過程加密和安全上下文。 <一>儲存過程加密 SQL server,我已經成了儲存過程的忠實擁躉。在直接使用SQL語句還是儲存過程來處理業務邏輯時,我基本會毫不猶豫地選擇後者。 理由如下:

Oracle 儲存過程中傳送郵件,並支援使用者驗證 中文標題和內容

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

oracle 儲存過程 報 無效字元

lv_sql:='   insert into ETL_SUCESS_AMOUNT   select SEQ_OS_ETL_AMOUNTID.NEXTVAL AS AMOUNTID,1,AMOUNT_DATA,AMOUNT_HOUR,   serviceid,porta

Oracle儲存過程(1)

(一)儲存過程的基本語法   1  CREATE OR REPLACE PROCEDURE 儲存過程名   2  IS   3  BEGIN   4  

【學亮開講】Oracle儲存過程教學筆記(二)20181116

--帶出參的儲存過程的建立和呼叫 create or replace procedure pro_owners_add1 ( v_name varchar2,--名稱 v_addressid number,--地址編號 v_housenumber varchar2,--門牌號 v_wat

Oracle儲存過程的優化

Oracle儲存過程的優化措施 1、開發人員如果用到其他庫的Table或View,務必在當前庫中建立View來實現跨庫操作,最好不要直接使用“user_name.table_name”。 2、開發人員在提交前,必須已經分析過查詢計劃,做過自身的查詢優化檢查。 3.SQL的使用規範: 3.

Oracle儲存過程以及遊標

一.儲存過程 1、儲存過程定義 所謂儲存過程(Stored Procedure),就是一組用於完成特定資料庫功能的SQL語句集,該SQL語句集經過 編譯後儲存在資料庫系統中。在使用時候,使用者通過指定已經定義的儲存過程名字並給出相應的儲存過程引數 來呼叫並執行它,從而完成一個或一系列的資料庫

Oracle 儲存過程小結 遊標 ,隨機生成UUID(32位)

    業務需求:            今天領導要求後天批量插入修改資料,將A表中的資料一條條的插入到B表中,中間還夾雜這業務邏輯。  技術需求:      

oracle 儲存過程 傳送WebServie 請求

create or replace procedure CMS_TO_ESB_INTEGRAL is --呼叫ESB積分錯誤是重發介面 http_req utl_http.req; http_resp utl_http.resp; request_env clob; l_re

Oracle:儲存過程的使用

Oracle:儲存過程的使用 以sys身份登入,建立使用者c##zs,密碼111,分配dba角色 以c##zs身份登入,匯入資料表 編寫儲存過程,根據學生學號,查詢出學生所選課程成績等級, 列印結果示例: 1801001 張三 Oracle A 1801001 張三 Java C 參

oracle儲存過程把查詢到的值更新到別的表

create or replace procedure update_nst_t_Clime2 as cursor c_db is select * from NST_T_FRAME f