ソース・データベースのデータの暗号化

透過的データ暗号化(TDE)は、Oracle Databaseに保存されているデータを透過的に暗号化します。アプリケーションがSQLを使用してデータにアクセスする方法に影響を与えることなく、オペレーティング・システムからファイルに格納されているデータベース・データへの不正なアクセスを防止します。 TDEOracle Databaseと完全に統合されており、データベース・バックアップ全体(RMAN )、データ・ポンプ・エクスポート、アプリケーション表領域全体または特定の機密列を暗号化できます。暗号化されたデータは、表領域の記憶域ファイル、一時表領域、UNDO表領域、またはREDOログなどの他のファイルにあるかどうかにかかわらず、データベース内で暗号化されたままです。

障害時リカバリの場合、オンプレミスとOracle Cloud Infrastructureインスタンスのパスワードは同じである必要があります。そうでない場合は、sqlplusコマンドを使用してパスワードを更新します。

ソース・データベースでTDEが有効かどうかの判別

ソース・データベースで透過的データ暗号化(TDE)が有効になっていない場合、データベースをOracle Cloud Infrastructure (OCI)に移行するとき、または障害時リカバリ時にデータは暗号化されません。暗号化されていないデータを手動で暗号化する必要があります。OCIでは、新しいデータは自動的に暗号化されます。

  1. 表領域が暗号化されているかどうかを確認します。
    SQL> select tablespace_name, encrypted from dba_tablespaces;

    表領域が暗号化されていない場合、出力は次のようになります。

    TABLESPACE_NAME 	       		ENC
    ------------------------------ ---
    SYSTEM                          NO
    SYSAUX                          NO
    UNDOTBS1                        NO
    TEMP                            NO
    USERS			      NO
  2. ファイルシステム上の関連するデータベース・データ・ファイル(.dbf)を検索します。
    SQL> select TABLESPACE_NAME, FILE_NAME from dba_data_files;

    出力は次のようになります。

    TABLESPACE_NAME
    ------------------------------
    FILE_NAME
    
    SYSTEM
    /opt/oracle/oradata/ORCLCDB/system01.dbf
    
    SYSAUX
    /opt/oracle/oradata/ORCLCDB/sysaux01.dbf
    
    UNDOTBS1
    /opt/oracle/oradata/ORCLCDB/undotbs01.dbf
    
    USERS
    /opt/oracle/oradata/ORCLCDB/users01.dbf

ソース・データベースでのTDE暗号化の有効化

透過的データ暗号化(TDE)を使用すると、表および表領域に格納された機密データを暗号化できます。暗号化されたデータは、データにアクセスできるデータベース・ユーザーまたはアプリケーションに対して透過的に復号化されます。

  1. ソース・データベースの$ORACLE_BASEディレクトリに移動します。
    bash-4.2$ pwd
    /opt/oracle/admin/ORCLCDB
  2. walletというディレクトリを作成します。
    $ mkdir wallet
  3. 英数字が混在するセキュアなパスワードとともにウォレットを作成します。
    このステップでは、ウォレットを作成して開きます。データベースがオープンされた後は、ウォレットが明示的にクローズされるか、データベースが停止されるまで、ウォレットはオープンしたままになります。
    SQL> alter system set encryption key identified by "wallet_password";
  4. データベースの再起動後に、閉じたウォレットを再度開きます。
    SQL> alter system set wallet open identified by "wallet_password";
  5. 表領域を暗号化します。
    次のコードでは、AES-128暗号化を使用します。
    alter tablespace system encryption online using 'aes128' encrypt file_name_convert=('/opt/oracle/oradata/ORCLCDB/system01.dbf','/opt/oracle/oradata/ORCLCDB/system01_enc.dbf');
    
    alter tablespace sysaux encryption online using 'aes128' encrypt file_name_convert=('/opt/oracle/oradata/ORCLCDB/sysaux01.dbf','/opt/oracle/oradata/ORCLCDB/sysaux01_enc.dbf');
    
    alter tablespace undotbs1 encryption online using 'aes128' encrypt file_name_convert=('/opt/oracle/oradata/ORCLCDB/undotbs01.dbf','/opt/oracle/oradata/ORCLCDB/undotbs01_enc.dbf');
    
    alter tablespace users encryption online using 'aes128' encrypt file_name_convert=('/opt/oracle/oradata/ORCLCDB/users01.dbf','/opt/oracle/oradata/ORCLCDB/users01_enc.dbf');
    
  6. 表領域が暗号化されていることを確認します。
    SQL> select tablespace_name, encrypted from dba_tablespaces;

    出力は次のようになります。

    TABLESPACE_NAME 	       ENC
    ------------------------------ ---
    SYSTEM			    YES
    SYSAUX			    YES
    UNDOTBS1                       YES
    TEMP			      NO
    USERS			     YES
  7. ファイルシステム上の関連するデータベース・データ・ファイル(.dbf)が暗号化されていることを確認します。
    SQL> select TABLESPACE_NAME, FILE_NAME from dba_data_files;

    出力は次のようになります。

    TABLESPACE_NAME
    ------------------------------
    FILE_NAME
    
    SYSTEM
    /opt/oracle/oradata/ORCLCDB/system01_enc.dbf
    
    SYSAUX
    /opt/oracle/oradata/ORCLCDB/sysaux01_enc.dbf
    
    UNDOTBS1
    /opt/oracle/oradata/ORCLCDB/undotbs01_enc.dbf
    
    USERS
    /opt/oracle/oradata/ORCLCDB/users01_enc.dbf

ソース・データベースでのウォレットの作成

セキュアなパスワードとともにウォレットを作成します。

  1. プライマリのオンプレミス・データベースのノード1で次のコマンドを実行してウォレットを作成します。
    SQL>
            ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/u01/app/oracle/admin/db1/wallet/' IDENTIFIED BY
            "wallet-password";
    ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE
            '/u01/app/oracle/admin/db1/wallet/' IDENTIFIED BY "wallet-password";
    SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE
            OPEN IDENTIFIED BY "wallet-password";
    SQL> ADMINISTER KEY MANAGEMENT SET
            KEY USING TAG 'master_key' IDENTIFIED BY "wallet-password” WITH BACKUP USING
            'masterbackup';
    SQL> SELECT KEY_ID,creation_time,activation_time,tag FROM V$ENCRYPTION_KEYS;
  2. 暗号化ウォレット・パラメータを表示します。
    SQL> select * from v$encryption_wallet;

    出力は次のようになります。

    WRL_TYPE
    --------------------
    WRL_PARAMETER
    --------------------------------------------------------------------------------
    STATUS       WALLET_TYPE    WALLET_OR KEYSTORE 
    FULLY_BAC
    ------------------------------ -------------------- --------- --------  ---------
        CON_ID
    ----------
    FILE
    /u01/app/oracle/admin/db1/wallet/
    OPEN       AUTOLOGIN    SINGLE    NONE     NO
  3. ウォレット・ロケーションを確認します。
    [oracle@exa11db01 wallet]$ ls -lrttotal

    出力は次のようになります。

    total 20
    -rw------- 1 oracle dba 2987 Feb  2 15:37 ewallet_2021020223374667_masterbackup.p12
    -rw------- 1 oracle dba 5419 Feb  2 15:37 ewallet.p12
    -rw------- 1 oracle dba 5464 Feb  2 15:37 cwallet.sso
  4. ウォレット・ファイルをオンプレミス・インスタンスの2番目のノードにコピーします。
    [oracle@exa11db01 wallet]$ scp *.* exa11db02:/u01/app/oracle/admin/db1/wallet/

    出力は次のようになります。

    cwallet.sso                                        100% 5464     8.7MB/s   00:00    
    ewallet_2021020223374667_masterbackup.p12          100% 2987    12.1MB/s   00:00    
    ewallet.p12                                         100% 5419    18.2MB/s   00:00 
  5. ノード1で、データベースのステータスを取得します。
    [oracle@exa11db01 db1]$ srvctl status database -d db1

    出力は次のようになります。

    Instance db11 is running on node exa11db01
    Instance db12 is running on node exa11db02
  6. ノード1で、データベースを停止して起動し、ウォレットの設定を完了します。
    [oracle@exa11db01 db1]$ srvctl stop database -d db1
    [oracle@exa11db01db1]$ srvctl start database -d db1
  7. 暗号化した表領域を作成します。
    次のコードでは、aes128暗号化を使用して暗号化された表領域を設定します。
    alter tablespace system encryption online using 'aes128' encrypt;
    alter tablespace sysaux encryption online using 'aes128' encrypt;
    alter tablespace undotbs1 encryption online using 'aes128' encrypt;
    alter tablespace undotbs2 encryption online using 'aes128' encrypt;
    alter tablespace users encryption online using 'aes128' encrypt;
  8. 表領域名およびdbfが暗号化されていることを確認します。
    SQL> select tablespace_name, encrypted from dba_tablespaces;

    暗号化されている場合、ファイルの順序番号は異なります。

バックアップ・データベースでのウォレットの作成

バックアップOracle Database Exadata Cloud Serviceの各ノードにウォレットを作成します。ウォレットは各ノードで同じである必要があります。

  1. OCIのバックアップ・データベースで、ウォレット・ファイルの場所を確認します。
    SQL> select * from V$ENCRYPTION_WALLET;
  2. ウォレット・ファイルをオンプレミス・ソース・データベースからクラウドのバックアップ・データベースにコピーします。
    [oracle@exa11db01 ~]$ scp -i FedExKey.ssh /u01/app/oracle/admin/db1/wallet/*.* 
    opc@10.255.195.131:/tmp/
  3. ウォレットがOracle Database Exadata Cloud Serviceのディレクトリに表示されることを確認します。
    [oracle@exacs82-vm3sv1 admin]$ cd /var/opt/oracle/dbaas_acfs/DB1/wallet_root/tde
    [oracle@exacs82-vm3sv1 tde]$ ls -lrt

    出力は次のようになります。

    total 72
    drwxr-xr-x 2 oracle oinstall 20480 Jan 23 13:50 Backup
    -rwxr-xr-x 1 oracle oinstall  5419 Feb  3 13:38 ewallet.p12
    -rwxr-xr-x 1 oracle oinstall  2987 Feb  3 13:38 ewallet_2021020223374667_masterbackup.p12
    -rw------- 1 oracle oinstall  5464 Feb  3 13:39 cwallet.sso
  4. ウォレット・ファイルを2番目のノードにコピーします。