TDE環境を構成して列暗号化を実行してみようぜ!!

※ここで記載した内容は独断と偏見に基づく個人の見解であり、実行しているコマンドや手順も必ずしも正しい手順ではありません。その為、あくまで参考程度にご覧頂ければと思います。

 

今日のテーマは「TDE環境を構成して列暗号化を実行してみようぜ!!」です。

 
(1)SQLNET.ORAを編集しウォレットのロケーションを指定します。
 [oracle@hoge admin]$ cd $ORACLE_HOME/network/admin
 [oracle@hoge admin]$ vi sqlnet.ora
 
 NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
 ADR_BASE = /opt/app/oracle
 ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/opt/app/oracle/product/11.2.0/dbhome_1)))
 
(2)上記の変更を反映させる為、リスナーの再起動を行います。
 [oracle@hoge admin]$ lsnrctl stop
 [oracle@hoge admin]$ lsnrctl start
 
(3)ウォレットの状態を確認してみましょう。
 SQL> select * from v$encryption_wallet;
 
 WRL_TYPE
 --------------------
 WRL_PARAMETER
 --------------------------------------------------------------------------------
 STATUS
 ------------------
 file
 /opt/app/oracle/product/11.2.0/dbhome_1
 CLOSED <-★
 
(4)マスター暗号鍵を作成します。
 SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "oracle";
 System altered.
 
(5)ウォレットの状態を確認してみましょう。
 SQL> select * from v$encryption_wallet;
 
 WRL_TYPE
 --------------------
 WRL_PARAMETER
 --------------------------------------------------------------------------------
 STATUS
 ------------------
 file
 /opt/app/oracle/product/11.2.0/dbhome_1
 OPEN <-★
 
(6)ウォレットは(1)の手順で指定したロケーションに作成されています
 [oracle@hoge dbhome_1]$ cd $ORACLE_HOME
 [oracle@hoge dbhome_1]$ ls -l ewallet*
 -rw-r--r-- 1 oracle oinstall 1573 10月 15 00:31 ewallet.p12 <-★
 
(7)orapkiコマンドでウォレットの中身を確認するとマスター暗号鍵やその履歴情報が格納されていることが確認出来ます。別途orapkiコマンドで証明書を格納することなどもできます。
 [oracle@hoge dbhome_1]$ orapki wallet display -wallet $ORACLE_HOME
 Oracle PKI Tool: バージョン11.2.0.1.0 - Production
 Copyright (c) 2004, 2009, Oracle and/or its affiliates. All rights reserved.
 
 ウォレット・パスワードを入力してください:
 
 Requested Certificates:
 Subject: CN=oracle
 User Certificates:
 Oracle Secret Storeエントリ:
 ORACLE.SECURITY.DB.ENCRYPTION.Aa/jngYPWU+0v8KbPdZWm8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 ORACLE.SECURITY.DB.ENCRYPTION.Aa4ut+DI3E8+vzAR7uAf7IMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 ORACLE.SECURITY.DB.ENCRYPTION.AainTOjpEk8kv+ge1HK0ntMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 ORACLE.SECURITY.DB.ENCRYPTION.AarmRRTpwU9bv/C5KqqkfEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 ORACLE.SECURITY.DB.ENCRYPTION.AaSRmegJck/Fv4H1kdNyp7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 ORACLE.SECURITY.DB.ENCRYPTION.AaVinRvIb0/dv0DzjbfY1g8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 Trusted Certificates:
 
(8)SCOTT先輩のDEPT表のDNAME列を暗号化してみましょう
 SQL>
 SQL> ALTER TABLE SCOTT.DEPT MODIFY (DNAME ENCRYPT NO SALT);
 
 Table altered.
 
(9)表定義を確認し、DNAME列が暗号化されていることを確認しましょう
 SQL> desc scott.dept
  Name Null? Type
  ----------------------------------------- -------- ----------------------------
  DEPTNO NOT NULL NUMBER(2)
  DNAME VARCHAR2(14) ENCRYPT <-★
  LOC VARCHAR2(13)
 
(10)ウォレットをクローズしましょう
 SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE IDENTIFIED BY oracle;
 
 System altered.
 
(11)ウォレットがクローズした状態で列暗号化が実施されている表にアクセスすると下記エラー
 SQL> select * from scott.dept;
 select * from scott.dept
 *
 ERROR at line 1:
 ORA-28365: wallet is not open
 
(12)明示的にウォレットをオープンしてあげると列暗号化が実施されている表へアクセスできます。
 SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "oracle";
 
 System altered.
 SQL>
 SQL> select * from scott.dept;
 
  DEPTNO DNAME LOC
 ---------- -------------- -------------
  10 ACCOUNTING NEW YORK
  20 RESEARCH DALLAS
  30 SALES CHICAGO
  40 OPERATIONS BOSTON