oracle如何加密數據,oracle如何加密數據庫中的字段

如何在oracle 10g r2中實現透明數據加密

設置加密密鑰:

在臺安等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供網站建設、成都網站設計 網站設計制作按需求定制制作,公司網站建設,企業(yè)網站建設,品牌網站建設,全網整合營銷推廣,外貿營銷網站建設,臺安網站建設費用合理。

Oracle 透明數據加密提供了實施加密所必需的關鍵管理基礎架構。 加密的工作原理是將明文數據以及秘密(稱作密鑰)傳遞到加密程序中。 加密程序使用提供的密鑰對明文數據進行加密,然后返回加密數據。 以往,創(chuàng)建和維護密鑰的任務由應用程序完成。 Oracle 透明數據加密通過為整個數據庫自動生成一個萬能密鑰解決了此問題。 在啟動 Oracle 數據庫時,管理員必須使用不同于系統(tǒng)口令或 DBA 口令的口令打開一個 Oracle Wallet 對象。 然后,管理員對數據庫萬能密鑰進行初始化。 萬能密鑰是自動生成的。

性能:

由于索引數據未被加密,因此加密通常會影響現有的應用程序索引。 Oracle 透明數據加密對與給定應用程序表關聯(lián)的索引值進行加密。 這意味著應用程序中的相等搜索對性能的影響很小,甚至沒有任何影響。 例如,假設應用程序 card_id存在一個索引,并且此應用程序執(zhí)行以下語句:

SQL Select cash from credit_card where card_id = '1025023590';

Oracle 數據庫將使用現有的應用程序索引,盡管 card_id信息已經在數據庫中加密。

準備用于加密的數據庫:

在本部分內容中,您將更新 sqlnet.ora、創(chuàng)建一個加密錢夾 (ewallet.p12)、打開此錢夾并為 TDE創(chuàng)建萬能密鑰。執(zhí)行以下操作:

1. 您需要更新 sqlnet.ora 文件以包含一個 ENCRYPTED_WALLET_LOCATION 條目。打開一個終端窗口,然后輸入以下命令:

cd $ORACLE_HOME/network/admin

gedit sqlnet.ora

將以下條目添加到文件末尾:

ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/opt/oracle/admin/test97/wallet/)))

如果不加這一項的話,則會提示下面錯誤:

SQL alter system set key identified by "hurray"

2 ;

alter system set key identified by "hurray"

*

ERROR at line 1:

ORA-28368: cannot auto-create wallet

/opt/oracle/admin/test97/wallet/ 目錄是用來存放生成的錢夾的。

可以為加密錢夾選擇任何目錄,但路徑不應指向在數據庫安裝過程中創(chuàng)建的標準模糊錢夾(cwallet.sso)。

2. 接下來,您需要打開錢夾并創(chuàng)建萬能加密密鑰。從終端窗口中,輸入以下命令:

connect / as sysdbaalter system set key identified by "welcome1";

此命令的作用為:

l 如果指定的目錄中不存在加密錢夾,則將創(chuàng)建加密錢夾 (ewallet.p12)、打開此錢夾并創(chuàng)建/重新創(chuàng)建 TDE 的萬能密鑰。

l 如果指定目錄中存在加密錢夾,則將打開此錢夾并創(chuàng)建/重新創(chuàng)建 TDE 的萬能密鑰。

之后,就可以測試數據了。

下面是實驗記錄:

alter system set key identified by "welcome1";

SQL conn dodd/dodd123

create table test (id number,credit_card_number varchar2(16) ENCRYPT NO SALT);

SQL insert into test values(1,'1231243242');

1 row created.

SQL insert into test values(2,'33245235');

SQL commit;

Commit complete.

SQL select * from test;

ID CREDIT_CARD_NUMB

---------- ----------------

1 1231243242

2 33245235

可見,數據查看是明文,因為這個時候,加密錢夾已經打開,數據可以解密。

這時,停止數據庫,再打開:

SQL shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL SQL startup

ORACLE instance started.

Total System Global Area 524288000 bytes

Fixed Size 1979968 bytes

Variable Size 138414528 bytes

Database Buffers 377487360 bytes

Redo Buffers 6406144 bytes

Database mounted.

Database opened.

SQL select * from dodd.test;

select * from dodd.test

*

ERROR at line 1:

ORA-28365: wallet is not open

SQL select id from dodd.test;

ID

----------

1

2

可以看到,因為數據庫重啟后,加密錢夾處于關閉狀態(tài),這時只要查詢到加密的列,會提示加密錢夾沒有打開。

如果用戶想打開錢夾,必須具有alter system權限。

下面打開wallet:

SQL conn / as sysdba

Connected.

SQL alter system set wallet open identified by "welcome1";

System altered.

SQL conn dodd/dodd123

Connected.

SQL select * from test;

ID CREDIT_CARD_NUMB

---------- ----------------

1 1231243242

2 33245235

可以看到,加密錢夾打開后,數據可以被解密。

還有一條:sys用戶的表不能被加密。

可見:Oracle TDE是在數據層面上對表里的數據加密,而且不會影響數據庫現有的權限控制策略。

salt實際上就是在加密過程中引入一個隨機性。簡單的說,就是一般來說,同樣的明文產生同樣的密文,這樣就導致容易被解密者通過分析詞頻之類的方式(加解密我不太懂)來通過密文破解明文,如果指定salt,那么即使同樣的明文加密后的密文也是不一樣的。

no salt的話,自然就是相同的明文會產生相同的密文了。對于索引來說,要求no salt也就可以理解了

丟失ewallet加密錢夾的話,是不能再解密數據的。

Oracle 10gR2的 TDE 特性,對于防止機密信息的泄漏能起到事半功倍的作用!

如何利用Oracle自帶的MD5對數據進行加密

1、DBMS_OBFUSCATION_TOOLKIT.MD5是MD5編碼的數據包函數

CREATE OR REPLACE FUNCTION MD5(passwd IN VARCHAR2)

RETURN VARCHAR2

IS

retval varchar2(32);

BEGIN

retval := utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING = passwd)) ;

RETURN retval;

END;

select md5('123456') from dual;

MD5('123456')

e10adc3949ba59abbe56e057f20f883e

2、DES加密

create or replace function

encrypt_des(p_text varchar2, p_key varchar2) return varchar2 is

v_text varchar2(4000);

v_enc varchar2(4000);

raw_input RAW(128) ;

key_input RAW(128) ;

decrypted_raw RAW(2048);

begin

v_text := rpad( p_text, (trunc(length(p_text)/8)+1)*8, chr(0));

raw_input := UTL_RAW.CAST_TO_RAW(v_text);

key_input := UTL_RAW.CAST_TO_RAW(p_key);

dbms_obfuscation_toolkit.DESEncrypt(input = raw_input,key = key_input,encrypted_data =decrypted_raw);

v_enc := rawtohex(decrypted_raw);

dbms_output.put_line(v_enc);

return v_enc;

end;

DES加密:

update tb_salarysign_staff s set s.staffpwd =encrypt_des(s.staffpwd, 'test#5124*!de');

3、DES解密函數

create or replace function decrypt_des(p_text varchar2,p_key varchar2) return varchar2 is

v_text varchar2(2000);

begin

dbms_obfuscation_toolkit.DESDECRYPT(input_string = UTL_RAW.CAST_TO_varchar2(p_text),key_string =p_key, decrypted_string= v_text);

v_text := rtrim(v_text,chr(0));

dbms_output.put_line(v_text);

return v_text;

end;

DES解密:select decrypt_des(s.staffpwd, 'test#5124*!de') from tb_salarysign_staff s;

如何在Oracle SecureFiles中加密數據

用于加密非LOB字段的透明數據加密語法與在Oracle SecureFiles中啟用加密的語法完全相同。它們有一個重要的區(qū)別,非LOB字段可以使用NO SALT參數阻止TDE在加密數據之前先給數據添加一個隨機字符串。Oracle SecureFile LOB字段不支持NO SALT選項。我們可以使用數據字典視圖USER_ENCRYPTED_COLUMNS確定應該加密哪一些字段,以及這些字段的狀態(tài)。下面是一些ENCRYPT子句的例子:

CREATE TABLE tab_3DES (col1 CLOB ENCRYPT USING '3DES168')

LOB(col1) STORE AS SECUREFILE(

CACHE

NOLOGGING

);

使用默認加密算法(AES192)和一個密碼創(chuàng)建一個Oracle SecureFile LOB字段:

CREATE TABLE tab_enc_pw (col1 CLOB ENCRYPT IDENTIFIED BY badpassword)

LOB(col1) STORE AS SECUREFILE(

CACHE

);

使用AES256啟用LOB加密:

ALTER TABLE tab_nocrypt MODIFY

( col1 CLOB ENCRYPT USING 'AES256');

通過重新生成加密密鑰修改一個Oracle SecureFiles字段:

ALTER TABLE tab_3DES REKEY USING 'AES256';

Disable LOB encryption:

禁用LOB加密:

ALTER TABLE tab_enc_pw MODIFY

( col1 CLOB DECRYPT);

Oracle數據庫中存儲的大對象數據容量會繼續(xù)增長,但是存儲費用在不斷下降。其中有許多的敏感數據,如醫(yī)療記錄、員工數據和知識產權。能夠對這些信息進行加密,這是非常寶貴的,也可以避免在將來投入大量金錢和精力去實現安全性。

本文標題:oracle如何加密數據,oracle如何加密數據庫中的字段
網頁路徑:http://www.muchs.cn/article34/hssepe.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供微信公眾號、自適應網站、服務器托管、App設計做網站、網站建設

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網站建設公司