從ORALE 10GR2開始出現透明數據加密技術(Transparent Data Encryption,TDE)
TDE用來對數據加密,通常 SQL 執行的應用程序邏輯不需要進行更改,仍能正常運行。 換言之,應用程序可以使用同一語法將數據插入到應用程序表中,並且 Oracle 數據庫在將信息寫入磁盤之前將自動對數據進行加密。 隨後的選擇操作將透明地解密數據,因此應用程序將繼續正常地運行。 這一點很重要,因爲當前的應用程序通常期望未加密的應用程序數據。 顯示加密數據至少會使應用程序用戶迷惑不解,甚至還會破壞現有的應用程序。
設置加密密鑰:
Oracle 透明數據加密提供了實施加密所必需的關鍵管理基礎架構。加密的工作原理是將明文數據以及祕密(稱作密鑰)傳遞到加密程序中。加密程序使用提供的密鑰對明文數據進行加密,然後返回加密數據。以往,創建和維護密鑰的任務由應用程序完成。 Oracle 透明數據加密通過爲整個數據庫自動生成一個萬能密鑰解決了此問題。在啓動 Oracle 數據庫時,管理員必須使用不同於系統口令或 DBA 口令的口令打開一個 Oracle Wallet 對象。然後,管理員對數據庫萬能密鑰進行初始化。萬能密鑰是自動生成的。
準備用於加密的數據庫
在$ORACLE_HOME/network/admin中的sqlnet.ora中增加一個ENCRYPTED_WALLET_LOCATION條目。
ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/u01/oracle/product/11.2.0.1.0/wallet/)))
進入數據庫執行以下語句
alter system set key identified by "welcome"
如果提示以下錯誤,表示wallet沒有被自動創建出來,可能是因爲wallet目錄需要手工創建的原因
ORA-28368: cannot auto-create wallet
手工創建wallet目錄,並授予oracle用戶訪問權限。
alter system set key identified by "welcome"; SQL> conn hr/hr SQL> create table test (id number,credit_card_number varchar2(16) ENCRYPT NO SALT); SQL> insert into test values(1,'12312432'); 1 row created. SQL> insert into test values(2,'33245235'); SQL> commit; Commit complete. SQL> select * from test;
這個時候是可以看到被加密的數據的,當重啓後再次查詢加密數據就無法看到了。這個時候需要打開wallet纔可以查看加密數據
alter system set wallet open identified by "welcome1";
sys用戶的表不能被加密