9  他の Oracle機能で透過的データ暗号化を使用

Oracle Data Encryptionは、Oracle Data GuardやOracle Real Application ClustersなどのOracle機能とともに使用できます。

9.1 透過的データ暗号化とエクスポートおよびインポート操作との連携

Oracle Data Pumpによって、暗号化列を含む表をエクスポートおよびインポートしたり、ダンプ・セット全体を暗号化することができます。

9.1.1 暗号化データされたデータのエクスポートおよびインポートについて

暗号化列を持つ表のエクスポートとインポートには、Oracle Data Pumpを使用できます。

ソフトウェア・キーストアと外部キーストアのどちらについても、暗号化された列を含む表をエクスポートする必要がある場合には次の点が重要となります。

  • 転送中も機密データが解読されないように保つ必要があります。

  • 権限のあるユーザーは、宛先にインポートされたデータを復号化できる必要があります。

Oracle Data Pumpを使用して暗号化列を含む表をエクスポートおよびインポートする場合、ENCRYPTIONパラメータを使用してダンプ・ファイル・セットのデータを暗号化できるようにします。ENCRYPTIONパラメータには、次の値を指定できます。

  • ENCRYPTED_COLUMNS_ONLY: 暗号化列が暗号化された形式でダンプ・ファイル・セットに書き込まれます。

  • DATA_ONLY: すべてのデータが暗号化された形式でダンプ・ファイル・セットに書き込まれます。

  • METADATA_ONLY: すべてのメタデータがダンプ・ファイル・セットに暗号化された形式で書き込まれます。

  • ALL: すべてのデータとメタデータが暗号化された形式でダンプ・ファイル・セットに書き込まれます。

  • NONE: ダンプ・ファイル・セットに対して暗号化は使用されません。

9.1.2 暗号化された列のある表のエクスポートおよびインポート

ENCRYPTION=ENCRYPTED_COLUMNS_ONLY設定を使用して、暗号化された列のある表をエクスポートおよびインポートできます。

  1. 暗号化列を含む表のエクスポートを試行する前に、キーストアが開いていることを確認します。

    マルチテナント環境では、プラガブル・データベース(PDB)内のデータをエクスポートする場合、ウォレットがPDB内でオープン状態であることを確認します。rootにエクスポートする場合、ウォレットがroot内でオープン状態であることを確認します。

    キーストアが開いているかどうかを確認するには、V$ENCRYPTION_WALLETビューのSTATUS列を問い合せます。キーストアを開く必要がある場合は、次のSQL文を実行します。

    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN 
    IDENTIFIED BY software_keystore_password 
    [CONTAINER = ALL | CURRENT];
    

    software_keystore_password設定は、キーストアのパスワードです。キーストアが開いている必要があるのは、暗号化列の復号化にはTDE表キーを使用する必要があり、そのためにはTDEマスター暗号化キーへのアクセスが必要なためです。列は、エクスポートされる前にパスワードを使用して再暗号化されます。

  2. エクスポート・ダンプ・ファイル・セットの列データを暗号化する際に使用するパスワードを、ENCRYPTION_PASSWORDパラメータを使用して指定し、EXPDPコマンドを実行します。

    次に、employee_data表をエクスポートする例を示します。ENCRYPTION_PWD_PROMPT = YES設定によって、対話式でパスワードを求めるプロンプトの表示が可能となり、これは推奨されるセキュリティ上の措置となっています。

    expdp hr TABLES=employee_data DIRECTORY=dpump_dir
    DUMPFILE=dpcd2be1.dmp ENCRYPTION=ENCRYPTED_COLUMNS_ONLY
    ENCRYPTION_PWD_PROMPT = YES
    
    Password: password_for_hr
    
  3. エクスポートされたデータをターゲット・データベースにインポートするには、ENCRYPTION_PASSWORDパラメータによって設定されエクスポート操作に使用したものと同じパスワードを確実に指定してください。

    このパスワードは、データの復号化に使用されます。データは、ターゲット・データベースに生成された新しいTDE表キーを使用して再暗号化されます。ターゲット・データベースがTDEマスター暗号化キーにアクセスするためには、キーストアが開いている必要があります。次に、employee_data表をインポートする例を示します。

    impdp hr TABLES=employee_data DIRECTORY=dpump_dir 
    DUMPFILE=dpcd2be1.dmp 
    ENCRYPTION_PWD_PROMPT = YES
    
    Password: password_for_hr

9.1.3 Oracle Data Pumpを使用してダンプ・セット全体を暗号化

Oracle Data Pumpによって、透過的データ暗号化列のみではなく、ダンプ・セット全体を暗号化できます。

インポートでは、パスワードまたはキーストアTDEマスター暗号化キーのいずれかを使用してデータを復号化できます。パスワードを指定しなかった場合、データの復号化にはキーストアのTDEマスター暗号化キーが使用されます。ターゲット・データベースにおいて、キーストアが存在して開いている必要があります。この開いているキーストアは、ターゲット・データベースで列暗号化データを再暗号化する際にも必要です。

ENCRYPTION_MODE=TRANSPARENT設定を使用すると、キーストアに格納されているTDEマスター暗号化キーを使用してダンプ・ファイル・セットを透過的に暗号化できます。この場合、パスワードは不要です。キーストアは、ターゲット・データベースに存在して開かれている必要があり、インポート操作中に列暗号化メタデータを正常に復号化するためにソース・データベースのTDEマスター暗号化キーを含んでいる必要があります。

この開いているキーストアは、ターゲット・データベースで列暗号化メタデータを再暗号化する際にも必要です。キーストアがすでにターゲット・データベースに存在している場合には、ソース・データベースのキーストアから現在のTDEマスター暗号化キーをエクスポートし、ターゲット・データベースのキーストアインポートできます。

  • ENCRYPTION_MODEパラメータを使用して、暗号化モードを指定します。ENCRYPTION_MODE=DUALによって、キーストアに格納されているTDEマスター暗号化キーと指定したパスワードを使用してダンプ・セットが暗号化されます。

たとえば、二重暗号化モードを使用して、暗号化されたデータをエクスポートする場合、次のようにします。

expdp hr DIRECTORY=dpump_dir1 
DUMPFILE=hr_enc.dmp
ENCRYPTION=all 
ENCRYPTION_PASSWORD=encryption_password
ENCRYPTION_PWD_PROMPT=yes
ENCRYPTION_ALGORITHM=AES256 
ENCRYPTION_MODE=dual

Password: password_for_hr
Encryption Password: password_for_encryption

9.1.4 暗号化されたデータ・ディクショナリ・データでのOracle Data Pumpの使用

Oracle Data Pumpの操作では、暗号化されたパスワードおよびその他の暗号化されたデータが保護されます。

ソース・データベースでの固定ユーザー・データベース・パスワードの暗号化を有効にすると、Oracle Data Pumpエクスポート操作のダンプにより、データベース・リンクのパスワードの既知の無効なパスワードが格納されます。このパスワードは、エクスポート操作によってデータベースから抽出された暗号化パスワードのかわりに適用されています。「ORA-39395: 警告: インポート後、オブジェクト<データベース・リンク名>にパスワードの再設定が必要です」という警告メッセージが結果として表示されます。Oracle Database 18c以上のデータベースにデータをインポートした場合、無効なパスワードを持つデータベース・リンク・オブジェクトがターゲット・データベースに作成されたときにこの同じ警告が表示されます。これが発生すると、次のようにデータベース・リンクのパスワードをリセットする必要があります。

ALTER DATABASE LINK database_link_name CONNECT TO schema_name IDENTIFIED BY password;

データベース・リンクについての情報を検索するために、V$DBLINK動的ビューを問い合せることができます。

固定ユーザー・データベース・パスワードの暗号化がソース・データベースで無効になっている場合、Data Pumpに対する変更はありません。不明瞭化されたデータベース・リンクのパスワードは、以前のリリースと同様にエクスポートおよびインポートされます。

この場合、Oracleでは、次のことをお薦めします。

  • 不明瞭化されたデータベース・リンクのパスワードをさらに保護できるように、expdpコマンドでENCRYPTION_PASSWORDパラメータを設定します。

  • 画面にエコーされるのではなく、プロンプトから対話式にパスワードを入力できるように、ENCRYPTION_PWD_PROMPTパラメータをYESに設定します。

ENCRYPTION_PASSWORDENCRYPTION_PWD_PROMPTの両方のパラメータがインポート操作で使用できます。ENCRYPTION_PWD_PROMPTは、expdpおよびimpdpのコマンドライン・クライアントでのみ使用できるのに対して、ENCRYPTION_PASSWORDは、コマンドライン・クライアントとDBMS_DATAPUMP PL/SQLパッケージの両方で使用できます。

インポート操作時に、キーストアが開いているか閉じているかにより、暗号化パスワードが指定されている必要があるかどうかの動作が影響を受けます。キーストアがエクスポート操作中に開いていて、暗号化パスワードを指定した場合は、インポート操作中にパスワードを指定する必要はありません。キーストアがエクスポート操作中に閉じられている場合は、インポート操作中にパスワードを指定する必要があります。

9.2 透過的データ暗号化とOracle Data Guardとの連携

Oracle Data Guardプライマリ・データベースとセカンダリ・データベースは、TDEウォレットと外部キーストアの両方を共有できます。

9.2.1 Oracle Data Guardでの透過的データ暗号化の使用について

Oracle Data Guardでは、TDEウォレットと外部キーストアのどちらについても、透過的データ暗号化(TDE)がサポートされています。

プライマリ・データベースでTDEを使用する場合、Data Guard構成の各スタンバイ・データベースには、プライマリ・データベースからの暗号化キーストアのコピーが必要です。プライマリ・データベースでTDEマスター暗号化キーを再設定した場合は、そのTDEマスター暗号化キーが格納されているプライマリ・データベースから各スタンバイ・データベースにキーストアをコピーする必要があります。

次の点に注意してください。

  • ウォレットベースのTDEによるキー更新操作では、新しいTDEマスター暗号化キーがまだ使用可能でないため、スタンバイ・データベースでの管理リカバリ・プロセス(MRP)が失敗します。この問題を回避するには、set keyコマンドをcreate keyおよびuse keyコマンドに分割できます。各コマンドの後で、ウォレットをスタンバイ・データベースにコピーし、キーストアを強制的にオープンします。

  • データをスタンバイ・データベースに転送する場合、ログ・ファイル内の暗号化データは暗号化されたままです。暗号化データは転送中も暗号化されたままです。

9.2.2 Oracle Data Guard環境での表領域の暗号化

Oracle Data Guard環境でプライマリ・データベースとスタンバイ・データベースの表領域の暗号化を制御できます。

9.2.2.1 Oracle Data Guard環境での表領域の暗号化について

Oracle Data Guard環境では、オンプレミス環境およびOracle Cloud Infrastructure (OCI)環境についてプライマリ・データベースとスタンバイ・データベースの両方の表領域の自動暗号化を制御できます。

新しい表領域の暗号化を制御するには、TABLESPACE_ENCRYPTION初期化パラメータを設定します。

プライマリ・データベースを暗号化することをお薦めします。ただし、暗号化の要件はサイトによって異なる可能性があるため、TABLESPACE_ENCRYPTIONパラメータを使用して、オンプレミス環境とインクラウド環境の混合暗号化環境を構成できます。

TABLESPACE_ENCRYPTIONパラメータの使用については、次のことに注意してください。

  • REDO復号化は、REDOトランスポート・レベルで行われます。
  • Oracle Database 19.16以降では、透過的データ暗号化が含まれているAdvanced Security Option (ASO)ライセンスがない場合、Oracle Cloud Infrastructure (OCI)に暗号化されたスタンバイ・データベースを持つように、暗号化されていないオンプレミス・プライマリ・データベースを構成できます。ロール・トランジション後(計画済または計画外)でも、新しいオンプレミス・スタンバイ・データベースは暗号化されないままですが、OCIのプライマリ・データベースは暗号化されます。透過的データ暗号化(TDE)ライセンスがないハイブリッドOracle Data GuardというOracle Database製品管理のYouTubeビデオを参照してください。

    19.16より前のリリースでは、「分割TDE」デプロイメントの実装が複雑になり、プライマリ・データベースとスタンバイ・データベースに対する一定の手動操作が必要になり、暗号化されていないオンプレミス・データベースにはASOライセンスが必要になります。

  • 選択したENCRYPT_NEW_TABLESPACES設定がTABLESPACE_ENCRYPTION設定と競合する場合は、TABLESPACE_ENCRYPTIONが優先されます。
  • TABLESPACE_ENCRYPTIONはPDBではなくCDBルートで設定する必要があります。
  • OCIデータベースのデフォルトのTABLESPACE_ENCRYPTION設定はAUTO_ENABLEです。この設定は必須で、変更を加えても無視されます。
  • オンプレミス・データベースのデフォルトのTABLESPACE_ENCRYPTION設定はMANUAL_ENABLEです。

オンプレミス・データベースと、クラウド(ODBC)またはOracle Exadata Cloud (ExaCS)のOracle Databaseを使用するOracle Data Guard環境では、次のいずれかのシナリオで表領域の暗号化を構成できます。

  • クラウド・スタンバイ・データベースでは表領域を暗号化するが、オンプレミス・プライマリ・データベースでは暗号化しない: 暗号化されていないオンプレミス・プライマリ・データベースが、暗号化されていない表領域を作成したり、データ・ファイルを追加したり、表を更新する場合、REDOは暗号化されません。一方、暗号化されたクラウド・スタンバイ・データベースがREDOを適用する場合は、クラウドで表領域またはデータ・ファイルが作成され、ブロックが更新され、すべてが暗号化されていることを確認します。スイッチオーバー操作の後、暗号化されたクラウド・プライマリ・データベースが、暗黙的に暗号化された表領域またはデータ・ファイルを追加するか、表を更新すると、表領域が暗号化されます。暗号化されていないオンプレミス・スタンバイ・データベースはREDOを復号化し、暗号化されていない表領域またはデータ・ファイルを作成した後、ブロックがオンプレミスで暗号化されていないことを確認する必要があります。
  • クラウド・プライマリ・データベースでは表領域を暗号化するが、オンプレミス・スタンバイ・データベースでは暗号化しない: 暗号化されたクラウド・プライマリ・データベースが、暗黙的に暗号化された表領域を作成したり、データ・ファイルを追加したり、表を更新する場合、REDOも暗号化されます。暗号化されていないオンプレミス・スタンバイ・データベースは、REDOを復号化し、表領域およびデータ・ファイルが作成されているか、更新されたファイルがすべて暗号化されていないことを確認する必要があります。スイッチオーバー操作の後、暗号化されていないオンプレミス・プライマリ・データベースが、暗号化されていない表領域またはデータ・ファイルを追加するか、表を更新する場合、REDOは暗号化されません。暗号化されたクラウド・スタンバイ・データベースは、暗号化された表領域またはデータ・ファイルを追加した後、ブロックがクラウドで暗号化されていることを確認します。

たとえば、オンプレミス・データベースとOCIデータベースの両方を暗号化するというベスト・プラクティスに従った構成でTABLESPACE_ENCRYPTIONを使用する場合は、オンプレミス・データベースとOCIデータベースの両方についてTABLESPACE_ENCRYPTIONAUTO_ENABLEに設定します。また、ODBCまたはOracle ExaCSによるハイブリッド障害時リカバリ構成でオンプレミス・データベースが暗号化されない場合は、たとえば、TABLESPACE_ENCRYPTIONDECRYPT_ONLYに設定できます。OCIデータベースは、デフォルトでAUTO_ENABLEに設定されています。

透過的データ暗号化(TDE)ライセンスがないハイブリッドOracle Data Guardというビデオも参照してください。

9.2.2.2 Oracle Data Guard環境での表領域の暗号化の構成

表領域のハイブリッド暗号化を構成するには、TABLESPACE_ENCRYPTION初期化パラメータを設定する必要があります。

  1. SQL*Plusを使用してSYSDBA管理権限でプライマリまたはスタンバイ・データベース・インスタンスにログインします。
    マルチテナント環境では、このコマンドによりCDBルートにログインされます。このパラメータは、プラガブル・データベース(PDB)では設定できません。
  2. TABLESPACE_ENCRYPTION初期化パラメータを次のように設定します。
    ALTER SYSTEM SET TABLESPACE_ENCRYPTION = 'value' SCOPE = SPFILE SID = '*';

    この指定では、valueを次のいずれかの設定に置き換えます。

    • AUTO_ENABLEでは、データベースにOracle Advanced Securityのライセンスがある場合、すべての新しい表領域が暗号化されます。これはクラウド・データベースのデフォルト設定です。

      次の点に注意してください。

      • 既存の表領域が暗号化されていない場合、データベースはアラート・ログに警告を書き込みます。
      • 暗号化された表領域を、暗号化されていない表領域に変換することはできません。Oracle Database 19.16では、すべてのOracle Cloud Infrastructure (OCI)データベース(BaseDB、ExaDB-D、ExaDB-D@Azure、ExaDB-C@CおよびADB-C@Cを含む)で、暗号化された表領域を暗号化されていない表領域に変換することはできません。
      • クラウドではすべての表領域を暗号化する必要があるため、クラウド・データベースについてこのパラメータをDECRYPT_ONLYまたはMANUAL_ENABLEに設定しても無視され、クラウド・データベースは、設定がAUTO_ENABLEの場合と同様に動作します。
      • プライマリ・データベースでは、この設定によって新しい表領域が暗号化キーで暗号化されます。
      • スタンバイ・データベースでは、この設定によって新しい表領域にキーが追加され、すべてのブロックが暗号化されます。
    • DECRYPT_ONLYでは、新しい表領域が暗号化されません。この設定は、OCIの暗号化スタンバイ・データベースで保護するオンプレミス・プライマリ・データベースのTDEライセンスがない場合に使用します。ビデオ「透過的データ暗号化(TDE)ライセンスがないハイブリッドOracle Data Guard」を参照してください。この設定は、Advanced Security Optionがないサイト向けに設計されています。

      次の点に注意してください。

      • 既存の表領域が暗号化されている場合、データベースはアラート・ログに警告を書き込みます。
      • 暗号化されていない表領域を、暗号化された表領域に変更することはできません。
    • MANUAL_ENABLEでは、データベースにOracle Advanced Securityのライセンスがある場合、表領域を選択的に暗号化できます。これはオンプレミスのプライマリ・データベースとスタンバイ・データベースの両方のデフォルトで、以前のOracle Databaseリリースと同じ動作を使用します。

    Oracle Real Application Clusters (Oracle RAC)環境では、プライマリ・データベースのすべてのインスタンスおよびスタンバイ・データベースのすべてのインスタンスについてTABLESPACE_ENCRYPTIONを同じ値に設定します。デフォルト値はMANUAL_ENABLEであるため、Oracle Databaseの現在のリリースへのアップグレード中は、すべてのデータベース・インスタンスがロールオーバーおよびアップグレードされるまで、これらのデータベース・インスタンスのいずれについてもTABLESPACE_ENCRYPTIONを変更しないことをお薦めします。すべてのデータベース・インスタンスがアップグレードされたら、TABLESPACE_ENCRYPTIONパラメータを変更できます。

  3. TABLESPACE_ENCRYPTIONをどのように設定したかに応じて、次のことを行います。
    • TABLESPACE_ENCRYPTION=AUTO_ENABLE:
      • ルートのプライマリ・データベースでマスター暗号化キーを設定します(まだ行っていない場合)。
      • このルートに関連付けられているすべてのPDBでマスター暗号化キーを設定します(まだ行っていない場合)。
      • プライマリ・データベースからスタンバイ・データベースにウォレットをコピーします。
    • TABLESPACE_ENCRYPTION=DECRYPT: ルートのプライマリ・データベースおよびすべてのPDBでマスター暗号化キーを設定し、新しい表領域を作成する前にウォレットをスタンバイ・データベースにコピーします。

両方のデータベースがオンプレミスの場合、MANUAL_ENABLE設定とDECRYPT_ONLY設定のペアでプライマリとスタンバイの設定を指定できます。たとえば、スタンバイ・データベースについてMANUAL_ENABLEを設定し、プライマリ・データベースについてDECRYPT_ONLYを設定できます。DECRYPT_ONLY (プライマリ)とMANUAL_ENABLE (スタンバイ)のペアでは、TDEオフライン変換を使用して、スタンバイ上のデータベースを手動で暗号化する必要があります。

キー更新操作に関しては、次のことに注意してください。

  • TABLESPACE_ENCRYPTIONパラメータを変更しても、マスター・キーのローテーション操作には影響しません。

    プライマリ・データベースで表領域キーのローテーションが実行されると、スタンバイ・データベースも表領域のキーをローテーションしようとします。ただし、スタンバイ表領域が暗号化されておらず、キーがない場合は、再生成するキーがないため、エラーが生成されます。スタンバイ表領域が暗号化されていないが、DECRYPT_ONLY設定のためにプライマリからキーを継承した場合は、キーがローテーションされます。いずれの場合も、暗号化されていない表領域には影響しません。

  • マスター暗号化キーと表領域キーのローテーションはどちらも、プライマリ・データベースでのみ実行できます。

9.2.3 Oracle Data Guard環境でのTDEおよびOracle Key Vaultの構成

TDEウォレットおよびOracle Key Vaultと連携できるように、マルチテナント環境でOracle Data Guardを構成できます。

次のシナリオでは、フィジカル・スタンバイ・データベースが1つでシングル・インスタンスのマルチテナントOracle Data Guard環境でのOracle Key Vaultを使用した構成を示します。プライマリ・データベースおよびスタンバイ・データベースのバージョンはリリース19.6以降である必要があります。この手順を完了するには、各ステップを示されている順序で実行する必要があります。手順を完了すると、Oracle Data Guardでは、TDEキー管理にOracle Key Vaultのみが使用され、データベース・サーバー上にTDEウォレットはありません。プライマリ・データベースとスタンバイ・データベースの両方のアラート・ログをモニターすることをお薦めします。
  1. プライマリ・データベースとスタンバイ・データベースの両方で、opatch lspatchesコマンドを実行してパッチ・リリースを確認します。
    $ORACLE_HOME/OPatch/opatch lspatches

    次のような出力が表示されます。

    31281355;Database Release Update : 19.7.0.0.200414 (30869156)
    29585399;OCW RELEASE UPDATE 19.3.0.0.0 (29585399)
  2. データベース管理者がOracleデータベースをOracle Key Vaultに自動的に登録できるように、Oracle Key Vault管理者が準備したOracle Key Vaultデプロイメント・スクリプトをダウンロードします。
    Oracleデータベースをエンドポイントとして自動的に登録するスクリプトの作成方法の例は、Oracle Key Vault RESTfulサービス管理者ガイドを参照してください。デプロイメント・スクリプトは、データベース管理者がダウンロードできる共有ファイル・システムにあります。これらのデプロイメント・スクリプトには2つの異なるバージョンがあります。primary.zipファイルはプライマリ・データベース用で、secondary.zipファイルはすべてのスタンバイ・データベース用です。これらのスクリプトは、Oracle Data GuardまたはOracle RAC環境に使用できます。
    Oracle Key Vault管理者が準備してデプロイメント・スクリプトに追加する別のコンポーネントは、Oracle Key Vaultに接続するデプロイメント・スクリプトのすべての詳細を含む構成ファイルです。
  3. データベース管理者が共有の場所からダウンロードするためにOracle Key Vault管理者が作成した2つのデプロイメント・スクリプト(primary.zipおよびsecondary.zip)をコピーします。
    1. primary.zipファイルをプライマリ・データベースにコピーします。
      $ scp user@ip_address:/path/to/file/primary.zip .
    2. secondary.zipファイルをスタンバイ・データベースにコピーします。
      $ scp user@ip_address:/path/to/file/secondary.zip .
  4. それぞれのサーバーで、zipファイルを解凍します。
    $ unzip primary.zip
    
    $ unzip secondary.zip
  5. primary-run-me.shおよびsecondary-run-me.shスクリプトを実行します。これらのスクリプトには、Oracle Key VaultでRESTful APIが実行するコマンドが含まれています。
    Oracle Key Vault RESTfulサービスがこれらのコマンドを実行し、一意のウォレットおよびエンドポイント名でこのデータベースをOracle Key Vaultに登録します。
    1. プライマリ・データベース: たとえば:
      $ more primary-run-me.sh
      
      #!/bin/bash
      export EP_NAME=${ORACLE_SID^^}_on_$(hostname -s)
      export WALLET_NAME=${ORACLE_SID^^}
      curl -Ok --tlsv1.2 https://Oracle_Key_Vault_IP_address:5695/okvrestclipackage.zipp
      unzip -oj okvrestclipackage.zip lib/okvrestcli.jar -d ./lib
      cat > /home/oracle/deploy-primary.sh  << EOF
      #!/bin/bash
      mkdir -pv ${ORACLE_BASE}/product/okv
      okv manage-access wallet create --wallet ${WALLET_NAME} --unique FALSE
      okv admin endpoint create --endpoint ${EP_NAME} --description "$(hostname -f), $(hostname -i)" 
          --type ORACLE_DB --platform LINUX64 --subgroup "USE CREATOR SUBGROUP" --unique FALSE --strict-ip-check TRUE
      okv manage-access wallet set-default --wallet ${WALLET_NAME} --endpoint ${EP_NAME}
      expect << _EOF
          set timeout 120
          spawn okv admin endpoint provision --endpoint ${EP_NAME} --location ${ORACLE_BASE}/product/okv --auto-login FALSE
          expect "Enter Oracle Key Vault endpoint password: "
          send "change-on-install\r"
          expect eof
      _EOF
      EOF
    2. スタンバイ・データベース: たとえば:
      $ more secondary-run-me.sh
      
      $ more run-me.sh
      #!/bin/bash
      export EP_NAME=${ORACLE_SID^^}_on_$(hostname -s)
      export WALLET_NAME=${ORACLE_SID^^}
      curl -Ok --tlsv1.2 https://Oracle_Key_Vault_IP_address:5695/okvrestclipackage.zip
      unzip -oj okvrestclipackage.zip lib/okvrestcli.jar -d ./lib
      cat > /home/oracle/deploy-standby.sh << EOF
      #!/bin/bash
      okv admin endpoint create --endpoint ${EP_NAME} --description "$(hostname -f) $(hostname -i)" --subgroup "USE CREATOR SUBGROUP" --unique FALSE
      okv admin endpoint update --endpoint ${EP_NAME} --strict-ip-check TRUE
      okv manage-access wallet set-default --wallet ${WALLET_NAME} --endpoint ${EP_NAME}
      expect << _EOF
          set timeout 120
          spawn okv admin endpoint provision --endpoint ${EP_NAME} --location /etc/ORACLE/KEYSTORES/${ORACLE_UNQNAME^^}/okv --auto-login FALSE
          expect "Enter Oracle Key Vault endpoint password: "
          send "change-on-install\r"
          expect eof
      _EOF
      EOF
  6. プライマリ・データベースおよびスタンバイ・データベースで、次のディレクトリを作成します。
    たとえば:
    $ mkdir -pv /u01/opt/oracle/product/okv 
    $ mkdir -pv /u01/opt/oracle/product/tde 
    $ mkdir -pv /u01/opt/oracle/product/tde_seps

    ここでは次のように指定します。

    • /u01/opt/oracle/productディレクトリは、後のステップでWALLET_ROOTとして定義されます。
    • /u01/opt/oracle/product/okvは、Oracle Key Vaultクライアント・ソフトウェアのインストール・ディレクトリです。TDE_CONFIGURATIONパラメータの設定方法に応じて、Oracle Databaseはwallet_root/okv内のOracle Key Vaultクライアント・ソフトウェアを検索します。
    • /u01/opt/oracle/product/tdeには、将来のOracle Key Vaultパスワードのみを含む自動ログイン・ウォレットが格納され、自動ログインのOracle Key Vault構成が有効になります。Oracle Databaseでは、TDE_CONFIGURATIONの設定方法に応じて、TDEウォレットまたはOracle Key Vaultの自動オープン・ウォレットがwallet_root/tdeで検索されます。
    • /u01/opt/oracle/product/tde_sepsには、将来のOracle Key Vaultパスワードのみを含む自動ログイン・ウォレットが格納されます。これにより、SQL*PlusコマンドラインからOracle Key Vaultパスワードが非表示になり、場合によっては、Oracleデータベース管理者とOracle Key Vault管理者との間で義務の分離を強化するためにデータベース管理者にも非表示になる可能性があります。
  7. まず、プライマリ・データベースでRESTful APIを実行します。これは、スタンバイ・データベースのデプロイメント・スクリプトが、プライマリ・データベースのスクリプトによって作成されるOracle Key Vaultの共有仮想ウォレットの存在に依存するためです。
    • プライマリ・データベース:
      $ ./deploy-primary.sh
    • スタンバイ・データベース:
      $ ./deploy-standby.sh
  8. プライマリ・データベースおよびスタンバイ・データベースで、root.shスクリプトを実行してPKCS#11ライブラリをデプロイします。
    # /u01/opt/oracle/product/okv/bin/root.sh

    次の出力が表示されます。

    Creating directory: /opt/oracle/extapi/64/hsm/oracle/1.0.0/
    Copying PKCS library to /opt/oracle/extapi/64/hsm/oracle/1.0.0/
    Setting PKCS library file permissions
  9. プライマリ・データベースから、次にスタンバイの順で、okvutil changepwdコマンドを実行してインストールしたウォレットのパスワードを変更します。
    すべてのデータベース管理者が同じデプロイメント・スクリプトをダウンロードしたため、すべてのデータベースのパスワードがOracle Key Vaultで同じになります。このステップにより、各データベースが一意のパスワードを持つようになります。
    $ /u01/opt/oracle/product/okv/bin/okvutil changepwd -t wallet -l /u01/opt/oracle/product/okv/ssl/
    
    Enter wallet password: default_password
    Enter new wallet password: Oracle_Key_Vault_password
    Confirm new wallet password: Oracle_Key_Vault_password
    Wallet password changed successfully
  10. プライマリ・データベースおよびスタンバイ・データベースで、次の文を実行します。
    1. 次の文を実行して、Oracle Key Vaultパスワードをシークレットとして自動オープン・ウォレットに追加し、SQL*PlusコマンドラインのOracle Key VaultパスワードをEXTERNAL STOREに置き換えます。
      ADMINISTER KEY MANAGEMENT ADD SECRET 'Oracle_Key_Vault_password' 
      FOR CLIENT 'OKV_PASSWORD' 
      TO LOCAL AUTO_LOGIN KEYSTORE '/u01/opt/oracle/product/tde_seps';
      
    2. 次の文を実行して、Oracle Key Vaultパスワードをシークレットとして自動オープン・ウォレットに追加し、自動オープンのOracle Key Vaultを有効にします。
      ADMINISTER KEY MANAGEMENT ADD SECRET 'Oracle_Key_Vault_password' 
      FOR CLIENT 'OKV_PASSWORD' 
      TO LOCAL AUTO_LOGIN KEYSTORE '/u01/opt/oracle/product/tde';
      

      Oracle Databaseリリース19.13より前のリリースを使用している場合は、OKV_PASSWORDではなく、HSM_PASSWORDを使用してください。

    3. 必要に応じて、パッチ30398099がインストールされている場合は、データベースのデフォルト・アルゴリズムをAES128からAES192またはAES256に変更します。
      パッチ30398099は、Oracle Databaseリリース19c (19.11)の2021年4月のリリース更新に統合されているため、この機能は追加のパッチなしで使用できます。次のパラメータの前にアンダースコアがあることに注意してください。
      ALTER SYSTEM SET "_tablespace_encryption_default_algorithm" = 'AES256' SCOPE = BOTH;
      
    4. 使用しているOracle Database 19cのリリースに応じて、常に新しい表領域を暗号化するようにプライマリ・データベースとスタンバイ・データベースを構成します。
      • Oracle Database 19.16以降については、次のALTER SYSTEM文を実行します。
        ALTER SYSTEM SET TABLESPACE_ENCRYPTION = 'value' SCOPE = SPFILE SID = '*';
      • Oracle Database 19.15以前については、次のALTER SYSTEM文を実行します。
        ALTER SYSTEM SET ENCRYPT_NEW_TABLESPACES = ALWAYS SCOPE = BOTH SID = '*';
    5. プライマリ・データベースおよびスタンバイ・データベースで、WALLET_ROOT静的初期化パラメータを定義します。
      ALTER SYSTEM SET WALLET_ROOT = '/u01/opt/oracle/product' SCOPE = SPFILE;
    6. 前述のALTER SYSTEM SET WALLET_ROOTおよびALTER SYSTEM SET TABLESPACE_ENCRYPTION文が有効になるように、プライマリ・データベースとスタンバイ・データベースを再起動します。
    7. データベースの再起動後、Oracle Key Vaultを最初のキーストアとして使用し、WALLET_ROOT/tdeの自動オープンTDEウォレットをセカンダリTDEウォレットとして使用するようにTDEを構成します。
      プライマリ・データベースおよびスタンバイ・データベースの両方で次の文を実行します。
      ALTER SYSTEM SET TDE_CONFIGURATION = "KEYSTORE_CONFIGURATION=OKV|FILE" SCOPE = BOTH;
      
  11. プライマリ・データベースで、最初のTDEマスター暗号化キーをOracle Key Vaultに作成します。
    スタンバイ・データベースのalert.logを確認します。スタンバイ・データベースはOracle Key Vaultの共有仮想ウォレットで正しいマスター・キーを検出するため、管理リカバリ・プロセス(MRP)は停止しないでください。
    1. プライマリ・ルート・コンテナ: 最初のマスター暗号化キーを設定します。

      TDE構成を変更しないすべてのADMINISTER KEY MANAGEMENT文では、パスワードはEXTERNAL STOREに置き換えられます。これにより、Oracle Key Vault管理者はOracle Key Vaultパスワードをデータベース管理者と共有する必要がなくなるため、データベース管理者とOracle Key Vault管理者の業務を分離できます。

      sqlplus sys as syskm
      Enter password: password
      
      ADMINISTER KEY MANAGEMENT SET KEY FORCE KEYSTORE IDENTIFIED BY EXTERNAL STORE CONTAINER = CURRENT;
    2. すべてのプライマリPDB: オープンしているPDBごとに最初のタグ付きマスター・キーを設定します。PDBキーにタグを付ける利点は、後で特定のPDBに属するものと簡単に識別できることです。
      SELECT ' ADMINISTER KEY MANAGEMENT SET KEY 
      USING TAG '''||UPPER(SYS_CONTEXT('USERENV', 'CON_NAME'))||' '||TO_CHAR (SYS_EXTRACT_UTC (SYSTIMESTAMP), 
      'YYYY-MM-DD HH24:MI:SS"Z"')||''' FORCE KEYSTORE IDENTIFIED BY EXTERNAL STORE;' 
      AS "SET KEY COMMAND" FROM DUAL;
    3. このSELECT文の生成済出力を実行します。
      たとえば:
      ADMINISTER KEY MANAGEMENT SET KEY 
      USING TAG 'pdb_name date time' 
      FORCE KEYSTORE IDENTIFIED BY EXTERNAL STORE;
  12. ルート・コンテナで次のステップを実行します。
    1. CDB$ROOTUSERSSYSTEMおよびSYSAUX表領域を暗号化します。
      たとえば:
      ALTER TABLESPACE USERS ENCRYPTION ONLINE [USING 'AES256'] ENCRYPT;
      ALTER TABLESPACE SYSAUX ENCRYPTION ONLINE [USING 'AES256'] ENCRYPT;
      ALTER TABLESPACE SYSTEM ENCRYPTION ONLINE ENCRYPT;

      SYSTEM表領域は、デフォルト・アルゴリズム(ステップ10cで変更されていない場合はAES128)でのみ暗号化できます。

    2. スタンバイ・データベースのalert.logをよく見て、そこにあるUSERS表領域も暗号化されていることを確認します。
  13. PDB表領域を暗号化します:
    1. PDB内のUSERSSYSTEMSYSAUXおよびすべてのアプリケーション表領域を暗号化します。
      暗号化された表領域のデータは、TEMPまたはUNDOに書き込まれる前に追跡され、自動的に暗号化されるため、TEMPおよびUNDO表領域の暗号化はオプションです。
      ALTER TABLESPACE USERS ENCRYPTION ONLINE [USING 'algorithm'] ENCRYPT;
      ALTER TABLESPACE SYSTEM ENCRYPTION ONLINE ENCRYPT;
      ALTER TABLESPACE SYSAUX ENCRYPTION ONLINE [USING 'algorithm'] ENCRYPT;

      SYSTEM表領域は、データベースのデフォルト・アルゴリズム(プライマリ・データベースおよびスタンバイ・データベースで実行した前のステップで変更されていないかぎりAES128)でのみ暗号化できます。SYSTEM表領域を別のアルゴリズムで暗号化する場合は、SYSTEM表領域のキーを再設定できます。次に例を示します。

      ALTER TABLESPACE SYSTEM ENCRYPTION ONLINE USING 'any_supported_algorithm' REKEY;

      スタンバイ・データベースのalert.logをよく見て、暗号化およびキー更新操作がそこにも適用されていることを確認します。

    2. オプションで、UNDOおよびTEMP表領域を暗号化します。
      たとえば、UNDOTBS1という名前のUNDO表領域を暗号化するには:
      ALTER TABLESPACE UNDOTBS1 ENCRYPTION ONLINE [USING 'algorithm'] ENCRYPT;

      ALTER TABLESPACE文を使用して既存のTEMP表領域を暗号化することはできません。TEMP表領域を暗号化するには、新しい表領域を作成して暗号化する必要があります。最初に、元のTEMP表領域の作成に使用されたDDLを抽出します。

      SELECT DBMS_METADATA.GET_DDL ('TABLESPACE', 'TEMP') FROM DBA_TEMP_FILES;

      一時ファイルおよび表領域の名前が別になるよう出力を変更します。たとえば:

      CREATE TEMPORARY TABLESPACE "TEMP_ENC" 
      TEMPFILE '/u01/opt/oracle/oradata/${ORACLE_SID}/${PDB-NAME}/temp01_enc.dbf' 
      SIZE 146800640 AUTOEXTEND ON NEXT 655360 
      MAXSIZE 32767M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1048576 
      ENCRYPTION [USING 'algorithm'] ENCRYPT;

      デフォルト以外のアルゴリズムを適用する必要がある場合にのみ、ENCRYPTION [USING 'algorithm'] ENCRYPT句を追加する必要があります。ENCRYPTION [USING 'algorithm'] ENCRYPT句を省略すると、デフォルトのアルゴリズムでTEMP表領域が自動的に暗号化されます。

      次に、この新しい暗号化されたTEMP表領域をこのPDBのデフォルトの一時表領域にし、古いクリアテキストのTEMP表領域を削除します。

      ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP_ENC;
      DROP TABLESPACE TEMP INCLUDING CONTENTS AND DATAFILES;
  14. オプションで、プライマリ・データベースPDBで表領域および表を作成します。
    プライマリ・データベースで表領域を作成する場合、その文で暗号化キーワードを使用しません。データベースのデフォルト・アルゴリズムをAES128からAES192またはAES256に変更した場合、前のステップでデータベース・デフォルト・アルゴリズムが変更されていなければ、デフォルトでAES128で暗号化されます。
    CREATE TABLESPACE protected DATAFILE SIZE 50M;
    
    CREATE TABLE SYSTEM.TEST TABLESPACE protected 
    AS SELECT * FROM DBA_OBJECTS;
  15. 暗号化された表領域に格納されている表から選択できることを確認します。
    SELECT COUNT(*), OWNER FROM SYSTEM.TEST 
    GROUP BY OWNER 
    ORDER BY 1 DESC;
  16. プライマリ・データベースおよびスタンバイ・データベースで、次の文をルートで実行します:
    SELECT c.name AS PDB_NAME, t.name 
    AS TBS_NAME, e.ENCRYPTIONALG 
    AS ALG, e.STATUS from v$tablespace t, v$encrypted_tablespaces e, v$containers c 
    WHERE e.ts# = t.ts# AND e.con_id = t.con_id and e.con_id = c.con_id order by e.con_id, t.name;
    
    PDB_NAME        TBS_NAME        ALG     STATUS
    --------------- --------------- ------- -------------------------
    CDB$ROOT        SYSAUX          AES256  NORMAL
    CDB$ROOT        SYSTEM          AES256  NORMAL
    CDB$ROOT        USERS           AES256  NORMAL
    FINPDB19C       PROTECTED01     AES256  NORMAL
    FINPDB19C       SYSAUX          AES256  NORMAL
    FINPDB19C       SYSTEM          AES256  NORMAL
    FINPDB19C       USERS           AES256  NORMAL

    TEMP表領域はスタンバイ・データベースの出力にはリストされません。

  17. オプションで、構成を検証します。
    1. プライマリ・データベースとスタンバイ・データベース間でOracle Data Guardスイッチオーバーを実行します。
      Oracle Data Guard概要および管理を参照してください。
      新しいプライマリ・データベースで次のステップを実行します。
    2. PDBの暗号化された表から選択します。
      Oracle Key Vaultへの自動オープン接続があるため、次の問合せではOracle Key Vaultパスワードを入力する必要がありません。
      SELECT COUNT(*), OWNER FROM SYSTEM.TEST 
      GROUP BY OWNER 
      ORDER BY 1 DESC;
      
      24 rows selected.
    3. PDBのキーを更新します。
      SELECT ' ADMINISTER KEY MANAGEMENT SET KEY 
      USING TAG '''||UPPER(SYS_CONTEXT('USERENV', 'CON_NAME'))||' '||TO_CHAR (SYS_EXTRACT_UTC (SYSTIMESTAMP), 
      'YYYY-MM-DD HH24:MI:SS"Z"')||''' 
      FORCE KEYSTORE 
      IDENTIFIED BY EXTERNAL STORE;' 
      AS "RE-KEY COMMAND" FROM DUAL;
    4. このSELECT文の生成済出力を実行します。
      たとえば:
      ADMINISTER KEY MANAGEMENT SET KEY 
      USING TAG 'pdb_name date time' 
      FORCE KEYSTORE IDENTIFIED BY EXTERNAL STORE;
    5. Oracle Data Guardスイッチオーバーをさらに実行します。
      Oracle Data Guard概要および管理を参照してください。
    6. PDBの暗号化された表から選択します。
      Oracle Key Vaultへの自動オープン接続があるため、次の問合せではOracle Key Vaultパスワードを入力する必要がありません。
      SELECT COUNT(*), OWNER FROM SYSTEM.TEST 
      GROUP BY OWNER 
      ORDER BY 1 DESC;
      
      24 rows selected.
    7. PDBのキーを更新します。
      SELECT ' ADMINISTER KEY MANAGEMENT SET KEY 
      USING TAG '''||UPPER(SYS_CONTEXT('USERENV', 'CON_NAME'))||' '||TO_CHAR (SYS_EXTRACT_UTC (SYSTIMESTAMP), 
      'YYYY-MM-DD HH24:MI:SS"Z"')||''' 
      FORCE KEYSTORE 
      IDENTIFIED BY EXTERNAL STORE;' 
      AS "RE-KEY COMMAND" FROM DUAL;
    8. このSELECT文の生成済出力を実行します。
      たとえば:
      ADMINISTER KEY MANAGEMENT SET KEY 
      USING TAG 'pdb_name date time' 
      FORCE KEYSTORE IDENTIFIED BY EXTERNAL STORE;

9.2.4 Oracle Data Guardでのウォレットベースの透過的データ暗号化の構成

Oracle Data Guard環境でウォレットベースの透過的データ暗号化(TDE)を構成できます。

次のシナリオは、1つのフィジカル・スタンバイ・データベースを備えた単一インスタンスのマルチテナントOracle Data Guard環境で、ソフトウェア・キーストアベースのTDEを構成する方法を示しています。プライマリ・データベースおよびスタンバイ・データベースのバージョンはリリース19.6以降である必要があります。この手順を完了するには、各ステップを示されている順序で実行する必要があります。この構成が完了したら、プライマリ・データベースとスタンバイ・データベースをソフトウェア・キーストアからOracle Key Vaultに移行できます。プライマリ・データベースとスタンバイ・データベースの両方のアラート・ログをモニターすることをお薦めします。
  1. プライマリ・データベースおよびスタンバイ・データベースで、ソフトウェア・キーストアベースのTDE構成に必要なディレクトリを作成します。
    たとえば:
    # mkdir -pv /etc/ORACLE/KEYSTORES/finance/tde_seps
    # cd /etc
    # chown -Rv oracle:oinstall ./ORACLE
    # chmod -Rv 700 ./ORACLE
  2. プライマリ・データベースおよびスタンバイ・データベースのCDBルートで、ALTER SYSTEM権限を持つユーザーとして、SQL*Plusで次の文を実行して適切なパラメータを設定します。
    ALTER SYSTEM SET TABLESPACE_ENCRYPTION = AUTO_ENABLE SCOPE = SPFILE; --Oracle Database 19.16 or later
    ALTER SYSTEM SET ENCRYPT_NEW_TABLESPACE = ALWAYS SCOPE = BOTH; --Before release 19.16
    ALTER SYSTEM SET WALLET_ROOT = '/etc/ORACLE/KEYSTORES/$ORACLE_SID' SCOPE = SPFILE;
  3. プライマリ・データベースとスタンバイ・データベースを再起動します。
  4. プライマリ・データベースおよびスタンバイ・データベースで次のパラメータを設定します:
    ALTER SYSTEM SET "_TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM" = 'AES256' SCOPE = BOTH;
    ALTER SYSTEM SET TDE_CONFIGURATION = "KEYSTORE_CONFIGURATION=FILE" SCOPE = BOTH;
  5. 表領域暗号化を構成します。
    1. プライマリ・データベースで、SYSKM権限を持つユーザーとして、パスワードで保護された(ローカル)自動オープン・ソフトウェア・キーストアを作成します。
      このキーストアを作成すると、Oracle DatabaseによってWALLET_ROOT/tdeディレクトリが自動的に作成されます。
      ADMINISTER KEY MANAGEMENT CREATE KEYSTORE IDENTIFIED BY tde_software_keystore_password;
      ADMINISTER KEY MANAGEMENT CREATE LOCAL AUTO_LOGIN KEYSTORE FROM KEYSTORE IDENTIFIED BY tde_software_keystore_password;
    2. 別の(ローカル)自動オープン・ウォレットでTDEウォレット・パスワードを非表示にし、プライマリおよびスタンバイ・データベースのTDE構成を変更しないADMINISTER KEY MANAGEMENTコマンドのキーストア・パスワードをEXTERNAL STOREに置き換えることで、義務の分離を有効にします:
      ADMINISTER KEY MANAGEMENT ADD SECRET 'tde_software_keystore_password' 
      FOR CLIENT 'TDE_WALLET'  
      TO LOCAL AUTO_LOGIN KEYSTORE '/etc/ORACLE/KEYSTORES/finance/tde_seps';
  6. プライマリ・データベースのCDB$ROOTコンテナに最初のキーを設定します。
    ADMINISTER KEY MANAGEMENT SET KEY FORCE KEYSTORE IDENTIFIED BY EXTERNAL STORE WITH BACKUP CONTAINER = CURRENT;
  7. 開いている各プライマリPDBにログインし、このコマンドの出力を実行して、最初のタグ付きキーを設定します。
    SELECT 'ADMINISTER KEY MANAGEMENT SET KEY USING TAG 
    '''||UPPER(SYS_CONTEXT('USERENV', 'CON_NAME'))||' '||TO_CHAR 
    (SYS_EXTRACT_UTC (SYSTIMESTAMP), 'YYYY-MM-DD HH24:MI:SS"Z"')||''' 
    FORCE KEYSTORE IDENTIFIED BY EXTERNAL STORE 
    WITH BACKUP;' AS "SET KEY COMMAND";
  8. プライマリ・データベースからスタンバイ・データベースにソフトウェア・キーストアをコピーします。
    プライマリのローカル自動オープン・ソフトウェア・キーストアはスタンバイで開くことができないため、コピー・プロセスから除外されます。たとえば:
    $ rsync -rvpt --exclude '*.sso' /etc/ORACLE/KEYSTORES/finance/tde/ standby_host:/etc/ORACLE/KEYSTORES/finance/tde/
  9. スタンバイのCDBルートで、SYSKM管理権限を持つユーザーとして、ローカル自動ログイン・ソフトウェア・キーストアを作成します:
    ADMINISTER KEY MANAGEMENT CREATE LOCAL AUTO_LOGIN KEYSTORE 
    FROM KEYSTORE IDENTIFIED BY tde_keystore_password;
  10. ALTER TABLESPACE権限を持つユーザーとして、ルート・コンテナ・データベースのSYSTEMSYSAUXおよびUSERS表領域を暗号化します。
    ALTER TABLESPACE USERS ENCRYPTION ONLINE ENCRYPT;
    ALTER TABLESPACE SYSTEM ENCRYPTION ONLINE ENCRYPT;
    ALTER TABLESPACE SYSAUX ENCRYPTION ONLINE ENCRYPT;
  11. ALTER TABLESPACE権限を持つユーザーとして、SYSTEMSYSAUXUSERSおよびPDBのすべての機密アプリケーション表領域を暗号化します。
    ALTER TABLESPACE USERS ENCRYPTION ONLINE ENCRYPT;
    ALTER TABLESPACE SYSTEM ENCRYPTION ONLINE ENCRYPT;
    ALTER TABLESPACE SYSAUX ENCRYPTION ONLINE ENCRYPT;
  12. オプションで、プライマリPDBのUNDOおよびTEMP表領域を暗号化します。
    1. 次のALTER TABLESPACE文を実行します:
      ALTER TABLESPACE UNDOTBS1 ENCRYPTION ONLINE ENCRYPT;
    2. 元のTEMP表領域に適用されたものと同じパラメータを使用して、暗号化された新しいTEMP表領域を作成します。
      ALTER TABLESPACE文を使用して既存のTEMP表領域を暗号化することはできないため、新しい表領域を作成する必要があります。

      最初に、元のTEMP表領域の作成に使用されたDDLを抽出します。

      SELECT DBMS_METADATA.GET_DDL ('TABLESPACE', 'TEMP') FROM DBA_TEMP_FILES;

      次に、一時ファイルおよび表領域の名前が別になるよう出力を変更します。たとえば:

      CREATE TEMPORARY TABLESPACE "TEMP_ENC"
      TEMPFILE '/u01/opt/oracle/oradata/${ORACLE_SID}/${PDB-NAME}/temp01_enc.dbf'
      SIZE 146800640 AUTOEXTEND ON NEXT 655360
      MAXSIZE 32767M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1048576 
    3. 暗号化された新しいTEMP表領域をデフォルトのTEMP表領域にします:
      ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP_ENC;
    4. 古いクリアテキストのTEMP表領域を削除します。
      DROP TABLESPACE TEMP INCLUDING CONTENTS AND DATAFILES;
    5. 新しいTEMP表領域の名前を変更します。
      ALTER TABLESPACE TEMP_ENC RENAME TO TEMP;
  13. 必要に応じて、小さいサンプル表領域(ENCRYPTION構文が指定されていない場合でもAES256で暗号化される)を作成し、この暗号化されたサンプル表領域にDBA_OBJECTS表のコピーを作成します。
    CREATE TABLESPACE PROTECTED DATAFILE SIZE 50M;
    CREATE TABLE SYSTEM.TEST TABLESPACE PROTECTED AS SELECT * FROM DBA_OBJECTS;
  14. 必要に応じて、DBA_OBJECTS表の暗号化されたコピーから選択します。
    たとえば:
    SELECT OWNER, COUNT(*) FROM SYSTEM.test GROUP BY OWNER ORDER BY 2 DESC;
    
    24 rows selected.
  15. プライマリ・データベースおよびスタンバイ・データベースのCDBルートに接続し、確認します。
    SELECT C.NAME AS PDB_NAME, T.NAME AS TBS_NAME, E.ENCRYPTIONALG AS ALG, E.STATUS 
    FROM V$TABLESPACE T, V$ENCRYPTED_TABLESPACES E, V$CONTAINERS C 
    WHERE E.TS# = T.TS# AND E.CON_ID = T.CON_ID AND E.CON_ID = C.CON_ID ORDER BY E.CON_ID, T.NAME;

    次のような出力が表示されます。

    PDB_NAME        TBS_NAME        ALG     STATUS
    --------------- --------------- ------- -------------------------
    CDB$ROOT        SYSAUX          AES256  NORMAL
    CDB$ROOT        SYSTEM          AES256  NORMAL
    CDB$ROOT        USERS           AES256  NORMAL
    FINPDB19C       PROTECTED01     AES256  NORMAL
    FINPDB19C       SYSAUX          AES256  NORMAL
    FINPDB19C       SYSTEM          AES256  NORMAL
    FINPDB19C       USERS           AES256  NORMAL

    スタンバイにはTEMP表領域がないため、ここにはリストされません。

  16. SYSDG管理権限を持つユーザーとして、スタンバイのdgmgrlユーティリティに接続します。
  17. スイッチオーバー操作を実行します。
    DGMGRL> switchover to '<standby_db_name>' wait 5;
  18. 自動オープン・ソフトウェア・キーストア機能を確認するには、ロール切替え後に、新しいプライマリ・データベースの暗号化されたデータ(PDBのDBA_OBJECTS表のコピーなど)から選択します。
    たとえば:
    SELECT OWNER, COUNT(*) FROM SYSTEM.test GROUP BY OWNER ORDER BY 2 DESC;
    
    24 rows selected.
  19. キーを作成して使用することをお薦めします。これにより、不明なTDEマスター暗号化キーが原因で、スタンバイ・データベースの管理リカバリ・プロセスが中断することはなくなります。新しいプライマリPDBで、次の文を実行します:
    ADMINISTER KEY MANAGEMENT CREATE KEY FORCE KEYSTORE IDENTIFIED BY EXTERNAL STORE WITH BACKUP;
  20. ローカル自動オープン・キーストアを除くソフトウェア・キーストアをスタンバイにコピーし、スタンバイ側で古いローカル自動オープン・キーストアを自動的に削除します。
    たとえば:
    $ rsync -rvpt --exclude '*.sso' --delete-excluded /etc/ORACLE/KEYSTORES/finance/tde/ standby-host:/etc/ORACLE/KEYSTORES/finance/tde/
  21. 必要なときに新しいキーをスタンバイ・データベースでただちに使用できるように、スタンバイで、更新されたパスワードで保護されたキーストアからローカル自動オープン・ソフトウェア・キーストアを再作成します。
    ADMINISTER KEY MANAGEMENT CREATE LOCAL AUTO_LOGIN KEYSTORE 
    FROM KEYSTORE IDENTIFIED BY tde_keystore_password;
  22. 次のコマンドの出力を実行します。
    SELECT ' ADMINISTER KEY MANAGEMENT 
    USE KEY '''||KEY_ID||''' 
    USING TAG '''||SYS_CONTEXT('USERENV', 'CON_NAME')||' '||
    TO_CHAR (SYS_EXTRACT_UTC (SYSTIMESTAMP), 'YYYY-MM-DD HH24:MI:SS"Z"')||''' 
    FORCE KEYSTORE IDENTIFIED BY EXTERNAL STORE 
    WITH BACKUP;' AS "USE KEY COMMAND" 
    FROM V$ENCRYPTION_KEYS  
    WHERE TAG IS NULL;

    USE KEY句では、ソフトウェア・キーストアのアソシエーションが更新されるため、更新されたパスワードで保護されたウォレットがスタンバイにコピーされます。この場合、ローカル自動オープン・ソフトウェア・キーストアが再度除外され、受信スタンバイ側で古いローカル自動オープン・キーストアが削除されます。たとえば、次のコマンドを使用します。

    $ rsync -rvpt --exclude '*.sso' --delete-excluded /etc/ORACLE/KEYSTORES/finance/tde/ standby-host:/etc/ORACLE/KEYSTORES/finance/tde/
    
  23. プライマリのCDBルートで、ローカル自動ログイン・ソフトウェア・キーストアを再作成します。
    ADMINISTER KEY MANAGEMENT CREATE LOCAL AUTO_LOGIN KEYSTORE FROM KEYSTORE IDENTIFIED BY tde_keystore_password;
  24. dgmgrlユーティリティを使用して、スタンバイへのスイッチオーバー操作を実行します。
    たとえば:
    DGMGRL> switchover to '<standby_db_name>' wait 5;
  25. 必要に応じて、自動オープン機能を確認するには、暗号化された表(DBA_OBJECTS表のコピーなど)から選択します。
    SELECT OWNER, COUNT(*) FROM SYSTEM.test GROUP BY OWNER ORDER BY 2 DESC;
    
    24 rows selected.

9.2.5 Oracle Data Guard環境でのTDEウォレットのOracle Key Vaultへの移行

Oracle Data Guard環境でTDEウォレットベースの透過的データ暗号化(TDE)を構成した後は、停止時間なしでプライマリ・データベースとスタンバイ・データベースをOracle Key Vaultに移行できます。

次のシナリオは、プライマリ・データベースとスタンバイ・データベースごとに1つのエンドポイントを構成し、TDEウォレットからOracle Key Vaultにプライマリ・データベースとスタンバイ・データベースを移行する方法を示しています。このシナリオでは、1つのフィジカル・スタンバイ・データベースを備えた単一インスタンスのマルチテナントOracle Data Guard環境を使用します。プライマリ・データベースおよびスタンバイ・データベースのバージョンはリリース19.6以降である必要があります。この手順を完了するには、各ステップを示されている順序で実行する必要があります。Oracle Key Vault管理者がこれらのファイルを作成する方法は、『Oracle Key Vault RESTfulサービス管理者ガイド』を参照してください。このファイルは、データベース管理者が後でOracle Key Vaultにデータベースを自動的にオンボーディングする際に使用されます。
  1. プライマリ・デプロイメント・スクリプトをプライマリ・データベース・ホストにコピーします。
    たとえば:
    $ rsync -v 192.168.1.29:/directory_on_shared_server/OKVdeploy-DG-primary.tgz .
  2. セカンダリ・デプロイメント・スクリプトをすべてのスタンバイ・データベース・ホストにコピーします。
    たとえば:
    $ rsync -v 192.168.1.29:/directory_on_shared_server/OKVdeploy-DG-standby.tgz .
  3. プライマリおよびスタンバイ・データベース・ホストで、アーカイブを抽出します。
    $ tar -xzvf OKVdeploy-DG*
  4. プライマリ・データベースで、primary-run-me.shスクリプトを実行します。
    このスクリプトは、デプロイメント・スクリプト(okv-ep.sh)を作成します。このスクリプトには、プライマリ・データベース用にOracle Key Vaultで作成されるウォレットおよびエンドポイントの一意の名前が含まれます。
    $ /primary-run-me.sh 
    
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100 3750k  100 3750k    0     0  13.5M      0 --:--:-- --:--:-- --:--:-- 13.5M
    Archive:  okvrestclipackage.zip
      inflating: ./lib/okvrestcli.jar    
    #!/bin/bash
    mkdir -pv /etc/ORACLE/KEYSTORES/finance/okv
    okv manage-access wallet create --wallet FINANCE --unique FALSE
    okv admin endpoint create --endpoint FINANCE_on_SanDiego --description "SanDiego.us.oracle.com, 192.168.56.193" 
      --subgroup "USE CREATOR SUBGROUP" --unique FALSE --strict-ip-check TRUE
    okv manage-access wallet set-default --wallet FINANCE --endpoint FINANCE_on_SanDiego
    expect << _EOF
        set timeout 120
        spawn okv admin endpoint provision --endpoint FINANCE_on_SanDiego --location /etc/ORACLE/KEYSTORES/finance/okv --auto-login FALSE
        expect "Enter Oracle Key Vault endpoint password: "
        send "change-on-install\r"      
        expect eof
    _EOF
  5. スタンバイ・データベースで、secondary-run-me.shスクリプトを実行します。
    このスクリプトは、デプロイメント・スクリプト(okv-ep.sh)を作成します。このスクリプトには、スタンバイ・データベース用にOracle Key Vaultで作成されるエンドポイントの一意の名前が含まれます。スタンバイ・エンドポイントでは、プライマリ・ウォレットがデフォルトのウォレットとして使用されるため、プライマリ・データベースとスタンバイ・データベースは同じキー・データにアクセスできます。
    $ ./secondary-run-me.sh 
    
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100 3750k  100 3750k    0     0  16.0M      0 --:--:-- --:--:-- --:--:-- 16.1M
    Archive:  okvrestclipackage.zip
      inflating: ./lib/okvrestcli.jar    
    #!/bin/bash
    mkdir -pv /etc/ORACLE/KEYSTORES/finance/okv
    okv admin endpoint create --endpoint FINANCE_on_Phoenix 
      --description "Phoenix.us.oracle.com, 192.168.56.194" 
      --subgroup "USE CREATOR SUBGROUP" 
      --unique FALSE
      --strict-ip-check TRUE
    okv manage-access wallet set-default --wallet FINANCE --endpoint FINANCE_on_Phoenix
    expect << _EOF
        set timeout 120
        spawn okv admin endpoint provision --endpoint FINANCE_on_Phoenix --location /etc/ORACLE/KEYSTORES/finance/okv --auto-login FALSE
        expect "Enter Oracle Key Vault endpoint password: "
        send "change-on-install\r"      
        expect eof
    _EOF
  6. プライマリ・データベース・ホストで、okv-ep.shスクリプトを実行します。
    このスクリプトは、Oracle Key Vaultのプライマリ・データベース用のウォレットおよびエンドポイントを作成します。これにより、ウォレットがそのエンドポイントのデフォルト・ウォレットになります。次のokv admin endpoint provisionコマンドは、Oracle Key Vaultエンドポイント・ソフトウェアをダウンロードして既存のディレクトリWALLET_ROOT/okvにインストールします。
    $ ./deploy-OKV.sh
    
    {
      "result" : "Success",
      "value" : {
        "status" : "PENDING",
        "locatorID" : "87E59AAD-0AAA-4AE8-ADCE-01D283ECE9C4"
      }
    }
    {
      "result" : "Success",
      "value" : {
        "status" : "PENDING",
        "locatorID" : "D13CC460-7BFB-451D-9998-DA387FC45783"
      }
    }
    {
      "result" : "Success"
    }
    spawn okv admin endpoint provision --endpoint finance_on_SanDiego --location /etc/ORACLE/KEYSTORES/finance/okv --auto-login FALSE
    Enter Oracle Key Vault endpoint password: 
    {
      "result" : "Success"
    }
  7. スタンバイ・データベース・ホストで、okv-ep.shスクリプトを実行します。
    このスクリプトは、Oracle Key Vaultのスタンバイ・データベース用のエンドポイントを作成します。これにより、プライマリ・ウォレットがそのエンドポイントのデフォルト・ウォレットになります。次のokv admin endpoint provisionコマンドは、Oracle Key Vaultエンドポイント・ソフトウェアをダウンロードして既存のディレクトリWALLET_ROOT/okvにインストールします。
    $ ./deploy-OKV.sh
    
    {
      "result" : "Success",
      "value" : {
        "status" : "PENDING",
        "locatorID" : "4208FBB5-5FD4-47EE-B3DB-FA8277BAFB84"
      }
    }
    {
      "result" : "Success"
    }
    spawn okv admin endpoint provision --endpoint finance_on_Phoenix --location /etc/ORACLE/KEYSTORES/finance/okv --auto-login FALSE
    Enter Oracle Key Vault endpoint password: 
    {
      "result" : "Success"
    }
  8. プライマリおよびスタンバイ・データベース・ホストで、WALLET_ROOT/okv/binroot.shスクリプトを実行します。
    このスクリプトは、PKCS#11ライブラリを正しい宛先ディレクトリにデプロイします。
    $ sudo /etc/ORACLE/KEYSTORES/finance/okv/bin/root.sh
  9. プライマリ・データベースおよびスタンバイ・データベースで、デフォルトのパスワードをデータベース管理者が知らない強力なパスワードに変更します。
    このパスワードは、デプロイメント・スクリプトを使用したすべてのデータベースで同じです。
    $ /etc/ORACLE/KEYSTORES/finance/okv/bin/okvutil changepwd -l /etc/ORACLE/KEYSTORES/finance/okv/ssl/ -t wallet
    
    Enter wallet password: current_endpoint_password
    Enter new wallet password: new_endpoint_password
    Confirm new wallet password: new_endpoint_password
    Wallet password changed successfully
  10. オプションで、エンドポイント・パラメータを更新します。
    このステップおよび次の2つのステップはオプションです。デフォルトでは、永続キャッシュはパスワードで保護されたウォレットで、前のステップのエンドポイント・パスワードで保護されます。ステップ1011および12で変更すると、永続キャッシュはランダム・パスワードで保護されます。これは、データベースの停止後に永続キャッシュが期限切れになり、データベースの再起動後に再構築する必要があることを意味します。また、永続キャッシュの有効期限は4時間に変更されますが、永続キャッシュのリフレッシュ期間は21日に延長されます。
    
    $ okv admin endpoint update --generate-json-input | jq '.service.options 
    |= ({endpoint} | .endpointConfiguration 
    |= (.expirePkcs11PersistentCacheOnDatabaseShutdown = "TRUE" | .pkcs11PersistentCacheRefreshWindow = "P21D" | .pkcs11PersistentCacheTimeout = "PT4H"))' 
    > ./update-endpoint.json; more ./update-endpoint.json
    
    {
      "service": {
        "category": "admin",
        "resource": "endpoint",
        "action": "update",
        "options": {
          "endpoint": "#VALUE",
          "endpointConfiguration": {
            "expirePkcs11PersistentCacheOnDatabaseShutdown": "TRUE",
            "pkcs11PersistentCacheRefreshWindow": "P21D",
            "pkcs11PersistentCacheTimeout": "PT4H"
          }
        }
      }
    }
  11. 必要に応じて、プライマリで、プライマリ・データベースとスタンバイ・データベースの両方のエンドポイントのステータスを確認します。
    たとえば、finance_on_SanDiegoというエンドポイントがあるプライマリ、およびfinance_on_Phoenixというエンドポイントがあるスタンバイの場合は、次のようにして確認します。
    $ okv admin endpoint check-status --endpoint finance_on_SanDiego
    $ okv admin endpoint check-status --endpoint finance_on_Phoenix
  12. 両方のエンドポイントがアクティブになったら、update-endpoint.jsonファイルを適用して再利用し、プライマリ・データベースとスタンバイ・データベースのすべてのエンドポイントを更新します。
    $ okv admin endpoint update --from-json ./update-endpoint.json --endpoint finance_on_SanDiego
    $ okv admin endpoint update --from-json ./update-endpoint.json --endpoint finance_on_Phoenix
  13. プライマリ・データベース・ホストで、TDEウォレットからOracle Key Vaultの仮想ウォレットに、現行およびリタイア済のマスター暗号化キーをアップロードします。
    たとえば:
    $ /etc/ORACLE/KEYSTORES/finance/okv/bin/okvutil upload -l /etc/ORACLE/KEYSTORES/finance/tde/ -t wallet -g FINANCE -v 3
  14. プライマリのルートで、SQL*Plusを使用して、ステップ9のOracle Key VaultパスワードをTDEウォレットに追加することで自動オープンOracle Key Vault接続を有効にします。
    ADMINISTER KEY MANAGEMENT ADD SECRET 'Oracle_Key_Vault_password' FOR CLIENT 'OKV_PASSWORD'
    FORCE KEYSTORE IDENTIFIED BY EXTERNAL STORE WITH BACKUP;
  15. 更新されたTDEウォレットをプライマリ・データベース・ホストからスタンバイ・データベース・ホストにコピーします(ローカル自動ログインTDEウォレットを除外し、スタンバイ側の古いローカル自動ログインTDEウォレットを削除します)。
    たとえば:
    $ rsync -rvpt --exclude '*.sso' --delete-excluded /etc/ORACLE/KEYSTORES/finance/tde/ standby-host:/etc/ORACLE/KEYSTORES/finance/tde/
  16. スタンバイのCDBルートで、SQL*Plusを使用して、ローカル自動ログインTDEウォレットを再作成して閉じます。
    ADMINISTER KEY MANAGEMENT CREATE LOCAL AUTO_LOGIN KEYSTORE 
    FROM KEYSTORE IDENTIFIED BY TDE_wallet_password;
    ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE CONTAINER = ALL;

    この段階で、プライマリ・データベースとスタンバイ・データベースをOracle Key Vaultに移行する準備が整います。

  17. プライマリ・データベースおよびスタンバイ・データベースで、TDE_CONFIGURATION動的パラメータをOKV|FILEに変更します。
    ALTER SYSTEM SET TDE_CONFIGURATION = "KEYSTORE_CONFIGURATION=OKV|FILE" SCOPE = BOTH;
  18. ADMINISTER KEY MANAGEMENT...MIGRATEコマンドを実行します。
    このコマンドは、TDEウォレットの最新のキーを使用してデータ暗号化キーを復号化し、Oracle Key Vaultで作成された新しいTDEマスター暗号化キーを使用して再暗号化します。これがコンテナ・データベースの場合、開いている各PDBはこれらのステップを実行します。これによって停止時間は発生しません。この操作では、PDBごとに約10秒から15秒かかります。
    ADMINISTER KEY MANAGEMENT SET KEY 
    IDENTIFIED BY "Oracle_Key_Vault_password" 
    FORCE KEYSTORE MIGRATE USING "TDE_wallet_password";
  19. Oracle Key Vaultパスワードを追加し、ローカル自動ログイン・ウォレットから古いTDEウォレット・パスワードを削除して、SQL*plusコマンドラインのTDEウォレット・パスワードをEXTERNAL STOREに置換できるようにします。
    ADMINISTER KEY MANAGEMENT ADD SECRET 'Oracle_Key_Vault_password' 
    FOR CLIENT "OKV_PASSWORD" 
    TO LOCAL AUTO_LOGIN KEYSTORE '/etc/ORACLE/KEYSTORES/finance/tde_seps';
    
    ADMINISTER KEY MANAGEMENT DELETE SECRET FOR CLIENT 'TDE_WALLET' 
    FROM LOCAL AUTO_LOGIN KEYSTORE '/etc/ORACLE/KEYSTORES/finance/tde_seps';
  20. プライマリ・データベースとスタンバイ・データベースがOracle Key Vaultに移行されたので、古いウォレットを削除します(ステップ13でOracle Key Vaultにキーをアップロードした場合のみ)。
    $ rm -v /etc/ORACLE/KEYSTORES/finance/tde/*
  21. プライマリ・データベースおよびスタンバイ・データベースで、Oracle Key Vaultパスワードのみを含むローカル自動ログインTDEウォレットをWALLET_ROOT/tdeに作成して、自動ログインOracle Key Vault構成を有効にします。
    たとえば:
    ADMINISTER KEY MANAGEMENT ADD SECRET 'Oracle_Key_Vault_password' 
    FOR CLIENT 'OKV_PASSWORD' TO LOCAL AUTO_LOGIN KEYSTORE '/etc/ORACLE/KEYSTORES/finance/tde';
    
  22. 各PDBに関連付けられているキーごとにタグを作成します。
    移行中、Oracle Key Vaultにより、各PDBの新しいキーが作成されますが、タグはありません。タグを作成することで、どのキーがどのPDBに属しているかを簡単に見つけることができます。各キーには、PDB名に一致するタグとタイムスタンプを指定する必要があります。
    SELECT ' ADMINISTER KEY MANAGEMENT SET TAG '''||SYS_CONTEXT('USERENV', 'CON_NAME')||' '||TO_CHAR (SYS_EXTRACT_UTC (ACTIVATION_TIME), 
    'YYYY-MM-DD HH24:MI:SS"Z"')||''' FOR '''||KEY_ID||'''
    FORCE KEYSTORE IDENTIFIED BY EXTERNAL STORE;' AS "SET TAG COMMAND"
    FROM V$ENCRYPTION_KEYS
    WHERE CREATOR_PDBNAME = SYS_CONTEXT('USERENV', 'CON_NAME')
    ORDER BY CREATION_TIME DESC FETCH FIRST 1 ROWS ONLY; 

9.2.6 Oracle Data Guard環境での暗号化PDBの分離

Oracle Data Guard環境内の分離PDBには、構成を手動で実行する必要があります。

これは、プライマリで実行されるADMINISTER KEY MANAGEMENTコマンドがスタンバイに影響しないためです。まず、プライマリ・データベースでPDBを分離します。ADMINISTER KEY MANAGEMENT ISOLATE KEYSTOREコマンドは、PDBのTDE_CONFIGURATIONパラメータをFILEに変更し、統合モードのウォレットから新しく作成された分離モードのウォレットにキーを移動するなど、必要な分離タスクを実行します。次に、分離プロセスを完了するために、スタンバイでこれらの同じタスクを手動で実行する必要があります。
  1. まだ実行していない場合は、プライマリ・データベースのCDBルートにログインし、PDBを分離します。
    ADMINISTER KEY MANAGEMENT ISOLATE KEYSTORE 
    IDENTIFIED BY "new_isolated_pdb_keystore_password" 
    FROM ROOT KEYSTORE 
    IDENTIFIED BY "root_keystore_password"
    EXTERNAL STORE WITH BACKUP;
  2. スタンバイ・データベースが構成されているサーバーにログインします。
  3. PDBのディレクトリ($WALLET_ROOT/pdb_guid/tde/など)があることを確認します。
  4. ALTER SYSTEM権限を持つユーザーとしてPDBに接続します。
  5. このPDBのKEYSTORE_CONFIGURATIONパラメータを設定します。
    ALTER SYSTEM SET TDE_CONFIGURATION="KEYSTORE_CONFIGURATION=FILE" SCOPE=BOTH;
  6. コマンドラインで、CDBルートから、ウォレット(.p12および.sso)をプライマリ・データベースからスタンバイにコピーし、このウォレットを$WALLET_ROOT/pdb_guid/tde/ディレクトリに配置します。
  7. CDBルートのウォレットを閉じ、再度開きます。
    ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE 
    FORCE KEYSTORE IDENTIFIED BY root_wallet_password;
    
    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN 
    FORCE KEYSTORE IDENTIFIED BY root_wallet_password;
  8. PDBに接続します。
  9. PDBでウォレットを開きます。
    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN 
    FORCE KEYSTORE IDENTIFIED BY pdb_wallet_password;

9.3 透過的データ暗号化とOracle Real Application Clustersとの連携

Oracle Real Application Clusters (Oracle RAC)ノードでは、TDEウォレットと外部キーストアの両方を共有できます。

9.3.1 Oracle Real Application Clustersでの透過的データ暗号化の使用について

Oracleは、Oracle Real Application Clusters (Oracle RAC)の共有TDEウォレット、つまり、クラスタ・インスタンス間で共有されるOracle Key Vault内の共通の仮想ウォレットを必要とします。

Oracle Key Vaultを使用するTDE構成では、データベースの各インスタンスから外部キー・マネージャへのネットワーク接続が使用されます。Oracle Key Vaultでは、Oracle RAC対応データベースのインスタンスごとに1つのエンドポイントを作成し、Oracle RAC対応データベースごとに1つの仮想ウォレットを作成する必要があります。次に、その仮想ウォレットを、そのデータベースに属するすべてのエンドポイントのデフォルト・ウォレットにします。Oracle RAC対応のData Guard構成では、すべてのインスタンス(プライマリおよびすべてのスタンバイ・データベース)で1つの仮想ウォレットが共有されます。この構成では、関連するすべてのインスタンスが自動的に同期されるため、キー設定操作とキー更新操作は完全に透過的に行われます。これにより、クラスタ内のその他の各ノードにTDEウォレットを手動でコピーする必要がなくなります。

Oracleでは、Oracle RACノードごとの個別のTDEウォレットの使用はサポートされていません。かわりに、Oracle RAC環境でTDE用の共有ウォレットを使用してください。これによってすべてのインスタンスが、同じ共有TDEウォレットにアクセスできます。対象の環境でOracle Automatic Storage Management Cluster File System (Oracle ACFS)を使用している場合は、これが共有ウォレットの推奨される場所です。Oracle ACFSを使用できない場合は、Oracle Automatic Storage Management (Oracle ASM)でウォレットを直接共有する(+DATA/$ORACLE_UNQNAME/WALLETSなど)という方法もあります。

キーストア操作(キーストアの開閉、TDEマスター暗号化キーのキー更新など)は、任意の1つのOracle RACインスタンスで実行可能です。内部的には、Oracleデータベースにより、各Oracle RACノードでキーストアのコンテキストが同期されます。こうすることで、キーストア操作の結果が、クラスタ内の他のすべてのOracle RACインスタンスに表示されます。同様に、TDEマスター暗号化キーのキー更新操作が実行されると、新しいキーが各Oracle RACインスタンスで使用可能になります。TDEマスター暗号化キーのエクスポート、キーストアのパスワードのローテーション、キーストアのマージ、キーストアのバックアップを含む他のキーストア操作なども、1つのインスタンスのみから実行できます。

共有ファイル・システムを使用する場合は、次のようにすべてのOracle RACインスタンスのWALLET_ROOT静的システム・パラメータが同じ共有TDEウォレットの場所を指していることを確認します:

ALTER SYSTEM SET WALLET_ROOT = '+DATA/$ORACLE_UNQNAME' SCOPE = SPFILE SID ='*'; 

ALTER SYSTEM SET TDE_CONFIGURATION = "KEYSTORE_CONFIGURATION=FILE" SCOPE = BOTH SID = '*';

ノート:

  • ENCRYPTION_WALLET_LOCATIONパラメータが設定されている場合、このパラメータは非推奨となったことに注意してください。かわりに、WALLET_ROOT静的初期化パラメータおよびTDE_CONFIGURATION動的初期化パラメータを使用することをお薦めします。
  • Oracle Real Application Clusters (Oracle RAC)インスタンスごとの個別のウォレットでのTDEマスター暗号化キーの格納はサポートされていません。かわりに、オンプレミスまたはクラウドベースのデータベース・デプロイメント、Oracle Automatic Storage Management (Oracle ASM)またはOracle ASM Cluster File System (Oracle ACFS)間の集中キー管理用のOracle Key Vaultを使用してローカル共有ウォレットを提供します。

9.3.2 Oracle Real Application ClustersにおけるOracle Key Vault用のTDEの構成

暗号化されたOracle Real Application Cluster (Oracle RAC)データベース・インスタンスは、Oracle Key Vaultによって提供される一元化されたキー管理に移行できます。移行プロセスは自動化されており、Oracle Exadata Database Service on Cloud@CustomerおよびOracle Autonomous Database on Dedicated Exadata Infrastructureのプロビジョニング・ワークフローと統合されています。

次のシナリオでは、マルチテナント2ノードOracle RAC構成があると想定しています。この手順では、示されている順序で次のステップを実行する必要があります。この手順を完了すると、Oracle RAC環境では、透過的データ暗号化のキー管理のためにOracle Key Vaultのみが使用されます。この手順では、Oracle Databaseリリース19cの2020年1月(19.6)以降のアップグレードがインストール済であることを前提としています。
開始する前に、実行中のOracle RACデータベースのアラート・ログを監視します。デフォルトのOracle Databaseリリース19cインストールに含まれているJavaバージョンを使用すると、RESTfulサービスを備えたOracle Key Vaultクライアントをインストールできます。
  1. データベース管理者がOracleデータベースをOracle Key Vaultに自動的に登録できるように、Oracle Key Vault管理者が準備したOracle Key Vaultデプロイメント・スクリプトをダウンロードします。
    Oracleデータベースをエンドポイントとして自動的に登録するスクリプトの作成方法の例は、Oracle Key Vault RESTfulサービス管理者ガイドを参照してください。デプロイメント・スクリプトは、データベース管理者がダウンロードできる共有ファイル・システムにあります。これらのデプロイメント・スクリプトには2つの異なるバージョンがあります。1つのスクリプトは最初のノード(このプロシージャではリード・ノードと呼ばれます)のみを対象とし、もう1つのスクリプトはその他のすべてのノード(このプロシージャではセカンダリ・ノードと呼ばれます)を対象としています。これらのスクリプトは、Oracle RACまたはOracle Data Guard環境に使用できます。
    Oracle Key Vault管理者が準備してデプロイメント・スクリプトに追加する別のコンポーネントは、Oracle Key Vaultに接続するデプロイメント・スクリプトのすべての詳細を含む構成ファイルです。
  2. データベース管理者が共有の場所からダウンロードするためにOracle Key Vault管理者が作成した2つのデプロイメント・スクリプト(primary.zipおよびsecondary.zip)をコピーします。
    1. primary.zipファイルをリード・ノードにコピーします。
      $ scp user@ip_address:/path/to/file/primary.zip .
    2. secondary.zipファイルを各セカンダリ・ノードにコピーします。
      $ scp user@ip_address:/path/to/file/secondary.zip .
  3. zipファイルを解凍します。
    1. リード・ノード: primary.zipファイルを解凍します。
      $ unzip primary.zip
    2. セカンダリ・ノード: secondary.zipファイルを解凍します。
      $ unzip secondary.zip
  4. すべてのノードで次のディレクトリを作成します。
    たとえば:
    $ mkdir -pv /u01/opt/oracle/product/okv 
    $ mkdir -pv /u01/opt/oracle/product/tde 
    $ mkdir -pv /u01/opt/oracle/product/tde_seps

    ここでは次のように指定します。

    • /u01/opt/oracle/productディレクトリは、後のステップでWALLET_ROOTとして定義されます。
    • /u01/opt/oracle/product/okvは、Oracle Key Vaultクライアント・ソフトウェアのインストール・ディレクトリです。TDE_CONFIGURATIONパラメータの設定方法に応じて、Oracle Databaseはwallet_root/okv内のOracle Key Vaultクライアント・ソフトウェアを検索します。
    • /u01/opt/oracle/product/tdeには、将来のOracle Key Vaultパスワードのみを含む自動ログイン・ウォレットが格納され、自動ログインのOracle Key Vault構成が有効になります。Oracle Databaseでは、TDE_CONFIGURATIONの設定方法に応じて、TDEウォレットまたはOracle Key Vaultの自動オープン・ウォレットがwallet_root/tdeで検索されます。
    • /u01/opt/oracle/product/tde_sepsには、将来のOracle Key Vaultパスワードのみを含む自動ログイン・ウォレットが格納されます。これにより、SQL*PlusコマンドラインからOracle Key Vaultパスワードが非表示になり、場合によっては、Oracleデータベース管理者とOracle Key Vault管理者との間で義務の分離を強化するためにデータベース管理者にも非表示になる可能性があります。
  5. primary-run-me.shおよびsecondary-run-me.shスクリプトを実行します。これらのスクリプトには、Oracle Key VaultでRESTful APIが実行するコマンドが含まれています。
    Oracle Key Vault RESTfulサービスがこれらのコマンドを実行し、一意のウォレットおよびエンドポイント名でこのデータベースをOracle Key Vaultに登録します。
    1. リード・ノード: このスクリプトは、Oracle Key Vaultで共有ウォレット(リードとすべてのセカンダリ・ノード用)およびエンドポイントを作成し、リード・ノード用のこのエンドポイントを共有ウォレットに関連付け、Oracle Key Vaultクライアントをダウンロードして既存のインストール・ディレクトリにインストールします。WALLET_ROOT構成では、このディレクトリはwallet_root/okvです。
      $ more primary-run-me.sh
      
      #!/bin/bash
      export EP_NAME=${ORACLE_SID^^}_on_$(hostname -s)
      export WALLET_NAME=${ORACLE_UNQNAME^^}${HOSTNAME//[!0-9]/}
      curl -Ok https://192.168.1.181:5695/okvrestclipackage.zip --tlsv1.2
      unzip -Voj okvrestclipackage.zip lib/okvrestcli.jar -d ./lib
      cat > /home/oracle/deploy-OKV.sh << EOF
      #!/bin/bash
      okv manage-access wallet create --wallet ${WALLET_NAME} --unique FALSE
      okv admin endpoint create --endpoint ${EP_NAME} --description "$(hostname -f) $(hostname -i)" --subgroup "USE CREATOR SUBGROUP" --unique FALSE
      okv admin endpoint update --endpoint ${EP_NAME} --strict-ip-check TRUE
      okv manage-access wallet set-default --wallet ${WALLET_NAME} --endpoint ${EP_NAME}
      expect << _EOF
          set timeout 120
          spawn okv admin endpoint provision --endpoint ${EP_NAME} --location /etc/ORACLE/KEYSTORES/${ORACLE_UNQNAME^^}/okv --auto-login FALSE
          expect "Enter Oracle Key Vault endpoint password: "
          send "change-on-install\r"
          expect eof
      _EOF
      EOF
    2. セカンダリ・ノード: このスクリプトは、セカンダリ・ノードのエンドポイントのみを作成し、セカンダリ・ノードのエンドポイントを共有ウォレットに関連付けて、Oracle Key Vaultクライアントをダウンロードして各セカンダリ・ノードの既存のインストール・ディレクトリにインストールします。
      $ more run-me.sh
      
      #!/bin/bash
      export EP_NAME=${ORACLE_SID^^}_on_$(hostname -s)
      export WALLET_NAME=${ORACLE_UNQNAME^^}${HOSTNAME//[!0-9]/}
      curl -Ok --tlsv1.2 https://<OKV-IP-addr>:5695/okvrestclipackage.zip
      unzip -Voj okvrestclipackage.zip lib/okvrestcli.jar -d ./lib
      cat > /home/oracle/deploy-OKV.sh << EOF
      #!/bin/bash
      okv admin endpoint create --endpoint ${EP_NAME} --description "$(hostname -f) $(hostname -i)" --subgroup "USE CREATOR SUBGROUP" --unique FALSE
      okv admin endpoint update --endpoint ${EP_NAME} --strict-ip-check TRUE
      okv manage-access wallet set-default --wallet ${WALLET_NAME} --endpoint ${EP_NAME}
      expect << _EOF
          set timeout 120
          spawn okv admin endpoint provision --endpoint ${EP_NAME} --location /etc/ORACLE/KEYSTORES/${ORACLE_UNQNAME^^}/okv --auto-login FALSE
          expect "Enter Oracle Key Vault endpoint password: "
          send "change-on-install\r"
          expect eof
      _EOF
      EOF
  6. Oracle Key Vaultクライアントが正常にインストールされた後、root.shスクリプトを実行して、すべてのノードにPKCSライブラリをインストールします。
    # Oracle_Key_Vault_installation_directory/bin/root.sh

    次の出力が表示されます。

    Creating directory: /opt/oracle/extapi/64/hsm/oracle/1.0.0/
    Copying PKCS library to /opt/oracle/extapi/64/hsm/oracle/1.0.0/
    Setting PKCS library file permissions
  7. すべてのノードでOracle Key Vault okvutil changepwdコマンドを実行して、インストールしたOracle Key Vaultクライアントのパスワードを変更します。
    すべてのデータベース管理者が同じデプロイメント・スクリプトをダウンロードしたため、すべてのデータベースのパスワードがOracle Key Vaultで同じになります。このステップにより、各データベースが一意のパスワードを持つようになります。
    $ /u01/opt/oracle/product/okv/bin/okvutil changepwd -t wallet -l /u01/opt/oracle/product/okv/ssl/
    
    Enter wallet password: default_password
    Enter new wallet password: Oracle_Key_Vault_password
    Confirm new wallet password: Oracle_Key_Vault_password
    Wallet password changed successfully
  8. すべてのノードで、ローカル自動ログイン・ウォレットにOracle Key Vaultパスワードを追加して、新しく変更したパスワードをデータベース管理者に対して非表示にします。
    sqlplus c##sec_admin as syskm
    Enter password: password
    
    ADMINISTER KEY MANAGEMENT ADD SECRET 'Oracle_Key_Vault_password' 
    FOR CLIENT 'OKV_PASSWORD' 
    TO LOCAL AUTO_LOGIN KEYSTORE '/u01/opt/oracle/product/tde_seps';
    
  9. ルート・コンテナで、ALTER SYSTEM文を実行して静的WALLET_ROOTパラメータを設定し、すべてのインスタンスの暗号化ウォレットの場所を構成します。
    1. WALLET_ROOTパラメータを設定します。
      ALTER SYSTEM SET WALLET_ROOT='/u01/opt/oracle/product' SCOPE = SPFILE;
    2. 所有しているOracle Database 19cのバージョンに応じて、TABLESPACE_ENCRYPTIONまたはENCRYPT_NEW_TABLESPACESパラメータを設定します。
      • Oracle Database 19.16以降については、次のALTER SYSTEM文を実行します。
        ALTER SYSTEM SET TABLESPACE_ENCRYPTION = 'value' SCOPE = SPFILE SID = '*';
      • Oracle Database 19.15以前については、次のALTER SYSTEM文を実行します。
        ALTER SYSTEM SET ENCRYPT_NEW_TABLESPACES = ALWAYS SCOPE = BOTH SID = '*';
  10. データベースを再起動します。
  11. ルート・コンテナで、ALTER SYSTEM文を使用して、動的TDE_CONFIGURATIONパラメータを設定します。
    たとえば:
    ALTER SYSTEM SET TDE_CONFIGURATION = "KEYSTORE_CONFIGURATION=OKV" 
    SCOPE = BOTH SID = '*';
  12. オプションで、Oracleパッチ30398099を適用した後で、データベースのデフォルトの暗号化アルゴリズムを定義します。
    デフォルトでは、Oracle Databaseは、暗号化アルゴリズムを指定しない暗号化句にAES128アルゴリズムを適用します。パッチ30398099では、AES128AES192およびAES256の各暗号化アルゴリズムから選択できます。パッチ30398099は、Oracle Databaseリリース19c (19.11)の2021年4月のリリース更新に統合されているため、この機能は追加のパッチなしで使用できます。次のパラメータの前にアンダースコアがあることに注意してください。
    ALTER SYSTEM SET "_TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM" = 'encryption_algorithm' 
    SCOPE = BOTH SID = '*';
    
  13. ルート・コンテナでキーストアを開くと、ルート・コンテナおよびすべてのオープンPDBを対象としたOracle Key Vaultへの接続が開きます。
    データベースでは、ステップ8で作成したローカル自動ログイン・ウォレットからOracle Key Vaultパスワードが自動的に取得されるため、Oracle Key Vaultのパスワードは、その後のすべてのADMINISTER KEY MANAGEMENTコマンドでEXTERNAL STOREに置換されていることに注意してください。
    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN
    IDENTIFIED BY EXTERNAL STORE 
    CONTAINER = ALL;
  14. ルート・コンテナで、マスター暗号化キーを設定します。
    ADMINISTER KEY MANAGEMENT SET KEY 
    IDENTIFIED BY EXTERNAL STORE 
    CONTAINER = CURRENT;
  15. このコンテナ内のすべてのPDBでタグ付きマスター暗号化キーを作成し、アクティブ化します。
    タグ付きマスター暗号化キーをPDBに追加する利点は、特定のPDBに属するキーを簡単に識別できることです。
    1. 各PDBに接続し、次のSELECT文を実行して、PDBのマスター暗号化キーのタグとしてPDB名とタイムスタンプを含むADMINISTER KEY MANAGEMENTコマンドを作成します。
      CONNECT sec_admin@pdb_name AS SYSKM
      Enter password: password
      
      SELECT ' ADMINISTER KEY MANAGEMENT SET KEY 
      USING TAG '''||SYS_CONTEXT('USERENV', 'CON_NAME')||' '|| 
      TO_CHAR (SYSDATE, 'YYYY-MM-DD HH24:MI:SS')||''' 
      IDENTIFIED BY EXTERNAL STORE;' "SET KEY COMMAND" FROM DUAL;
    2. このSELECT文の生成済出力を実行します。
      たとえば:
      ADMINISTER KEY MANAGEMENT SET KEY 
      USING TAG 'pdb_name date time' 
      IDENTIFIED BY EXTERNAL STORE;
  16. すべてのノードで、自動ログイン・ウォレットにOracle Key Vaultパスワードを追加し、Oracle Key Vaultへの自動ログイン接続を有効にします。
    Oracle RACでは、このステップは必須です。自動ログイン接続をOracle Key Vaultに含めることは、Oracle RACノードが自動的に再起動される場合(たとえば、opatchautoパッチ・ツールを使用して四半期ごとのリリース・アップグレードを適用する場合)に特に重要です。
    ADMINISTER KEY MANAGEMENT ADD SECRET 'Oracle_Key_Vault_password' 
    FOR CLIENT 'OKV_PASSWORD' 
    TO LOCAL AUTO_LOGIN KEYSTORE '/u01/opt/oracle/product/tde';
    

    Oracle Databaseリリース19.13より前のリリースを使用している場合は、FOR CLIENT 'OKV_PASSWORD'ではなく、for client 'HSM_PASSWORD'を使用してください。

  17. ルート・コンテナで、ALTER SYSTEM文を実行して、TDE_CONFIGURATIONパラメータを変更します。
    たとえば:
    ALTER SYSTEM SET TDE_CONFIGURATION = "KEYSTORE_CONFIGURATION=OKV|FILE" 
    SCOPE = BOTH SID = '*';
  18. リリース19.16より前のバージョンのOracle Databaseについては、CREATE TABLESPACEコマンドに暗号化句が含まれていない場合でも、AES128アルゴリズム(またはステップ12で指定したアルゴリズム)を使用して新しい表領域を常に暗号化するように、データベースのデフォルトの動作を変更します。
    任意のノードでこの文を1回実行します。
    ALTER SYSTEM SET ENCRYPT_NEW_TABLESPACES = ALWAYS SCOPE = BOTH SID = '*';
  19. ルートから、SYS.LINK$およびSYS.SCHEDULER$_CREDENTIALシステム表にあるデータベース・リンクについてAES256を使用して機密資格証明データを暗号化します。
    このコマンドには、SYSKM管理権限が必要です。
    sqlplus c##sec_admin as syskm
    Enter password: password
    
    ALTER DATABASE DICTIONARY ENCRYPT CREDENTIALS;
  20. PDBにログインし、表領域を作成します。
    たとえば、protectedという名前の表領域を作成するには、次のようにします。
    CREATE TABLESPACE protected DATAFILE SIZE 50M;
  21. 暗号化句が省略されていても、表領域が暗号化されていることを確認します。
    SELECT C.NAME AS pdb_name, T.NAME AS tablespace_name, E.ENCRYPTIONALG AS ALG 
    FROM V$TABLESPACE T, V$ENCRYPTED_TABLESPACES E, V$CONTAINERS C 
    WHERE E.TS# = T.TS# AND E.CON_ID = T.CON_ID AND E.CON_ID = C.CON_ID 
    ORDER BY E.CON_ID, T.NAME;
    
  22. 作成した暗号化済の表領域に、表を作成します。
    たとえば:
    CREATE TABLE SYSTEM.test TABLESPACE protected 
    AS SELECT * FROM DBA_OBJECTS;
  23. この表から選択して、暗号化データを読み取れることを確認します。
    SELECT COUNT(*), OWNER FROM SYSTEM.test 
    GROUP BY OWNER 
    ORDER BY 1 DESC;
  24. PDBで、既存の表領域を暗号化します。
    オプションで、SYSTEMSYSAUXおよびUSERS表領域を暗号化します。暗号化アルゴリズムを省略すると、デフォルトのアルゴリズム(AES128またはステップ12で指定したアルゴリズム)が適用されます。
    ALTER TABLESPACE tablespace_name ENCRYPTION ONLINE ENCRYPT;
  25. オプションで、構成を検証します。
    1. Oracle Key Vaultへの自動ログインが機能していることを確認します。
      これは、データベースを再起動し、PDBにログインし、暗号化された表から選択することでテストできます。データベースを再起動するには:
      $ srvctl stop database -db database_name -o immediate
      $ srvctl start database -db database_name

      PDBにログインした後、SYSTEM.test表から選択します。

      SELECT COUNT(*), OWNER FROM SYSTEM.test 
      GROUP BY OWNER 
      ORDER BY 1 DESC;
    2. オープンしているすべてのPDBでマスター暗号化キーの再キー操作が成功していることを確認します。
      最初に、SYSKM管理権限を持つユーザーとして次のSELECT文を実行し、PDB名とタイムスタンプを含むADMINISTER KEY MANAGEMENTコマンドを作成します。
      SELECT ' ADMINISTER KEY MANAGEMENT SET KEY 
      USING TAG '''||SYS_CONTEXT('USERENV', 'CON_NAME')||' '|| 
      TO_CHAR (SYSDATE, 'YYYY-MM-DD HH24:MI:SS')||''' 
      FORCE KEYSTORE IDENTIFIED BY EXTERNAL STORE;' "RE-KEY COMMAND" FROM DUAL;

      次に、このSELECT文の生成済出力を実行します。

      ADMINISTER KEY MANAGEMENT SET KEY 
      USING TAG 'pdb_name date time' 
      FORCE KEYSTORE IDENTIFIED BY EXTERNAL STORE;
    3. ルート・コンテナから、以前に暗号化された機密資格証明データをSYS.LINK$システム表およびSYS.SCHEDULER$_CREDENTIALシステム表に再入力します。
      このコマンドには、SYSKM管理権限が必要です。
      ALTER DATABASE DICTIONARY REKEY CREDENTIALS;
    4. protected表領域とその表testを削除します。
      DROP TABLESPACE protected
      INCLUDING CONTENTS AND DATAFILES;

9.4 透過的データ暗号化とSecureFilesとの連携

LOBが格納されるSecureFilesには、圧縮、重複除外および暗号化の3つの機能があります。

9.4.1 透過的データ暗号化およびSecureFilesについて

SecureFilesの暗号化では、LOBの暗号化機能を提供するためにTDEを使用します。

表を作成または変更する際に、SecureFiles記憶域を使用する必要があるSecureFiles暗号化やLOB列を指定できます。現在の透過的データ暗号化(TDE)構文を使用するか、またはLOB列に関するLOBパラメータの一部としてENCRYPT句を使用することによって、LOB列の暗号化を有効化できます。現在の構文またはLOBパラメータにおけるDECRYPTオプションによって、暗号化を無効化できます。

9.4.2 例: 特定の暗号化アルゴリズムを使用したSecureFiles LOBの作成

CREATE TABLE文によって、暗号化を指定してSecureFiles LOBを作成できます。

例9-1に、CREATE TABLE文でSecureFiles LOBを作成する方法を示します。

例9-1 特定の暗号化アルゴリズムを使用したSecureFiles LOBの作成

CREATE TABLE table1 ( a BLOB ENCRYPT USING 'AES256')
    LOB(a) STORE AS SECUREFILE (
    CACHE
    );

9.4.3 例: 列パスワードを指定したSecureFiles LOBの作成

CREATE TABLE文によって、列パスワードを指定してSecureFiles LOBを作成できます。

例9-2に、暗号化された列に対してパスワード保護を使用するSecureFiles LOBの作成例を示します。

LOB列のすべてのLOBが、同じ暗号化の指定で暗号化されます。

例9-2 列パスワードを指定したSecureFiles LOBの作成

CREATE TABLE table1 (a VARCHAR2(20), b BLOB)
    LOB(b) STORE AS SECUREFILE (
        CACHE
        ENCRYPT USING 'AES192' IDENTIFIED BY password
    );

9.5 透過的データ暗号化とOracle Call Interfaceとの連携

透過的データ暗号化は、Oracle Call Interface (OCI)の動作に影響しません。

多くの実用的な目的のために、TDEは行の受渡し機能を除き、OCIに対して透過的です。行を使用可能にするキーは受信ポイントでは使用できないため、OCIの行の受渡し機能をTDEで使用できません。

9.6 透過的データ暗号化とエディションとの連携

透過的データ暗号化は、Oracle Databaseのエディション機能に影響しません。

多くの実用的な目的のために、TDEはエディションに対して透過的です。表は常に非エディション化オブジェクトです。TDEの列暗号化によって、表の列が暗号化されます。エディションは、TDEの表領域の暗号化によって影響されません。

9.6.1 ALTER SYSTEMおよびorapkiとADMINISTER KEY MANAGEMENTとの対応

ALTER SYSTEM文の多くの句は、ADMINISTER KEY MANAGEMENT文に対応しています。

表9-1では、透過的データ暗号化でのALTER SYSTEM文およびorapkiユーティリティの使用と、以前のリリースのADMINISTER KEY MANAGEMENT文を比較しています。

表9-1 ALTER SYSTEMおよびorapkiとADMINISTER KEY MANAGEMENTとの対応

動作                       ALTER SYSTEMまたはorapki ADMINISTER KEY MANAGEMENT                       

キーストアの作成

TDEウォレットの場合:

ALTER SYSTEM SET ENCRYPTION KEY
["certificate_ID"] IDENTIFIED
BY keystore_password;

外部キーストアの場合は、外部キーストアを構成した後に、キーストアを利用できるようになります。

TDEウォレットの場合:

ADMINISTER KEY MANAGEMENT CREATE KEYSTORE
IDENTIFIED BY TDE_wallet_password

外部キーストアの場合は、外部キーストアを構成した後に、キーストアを利用できるようになります。

自動ログイン・キーストアの作成

orapki wallet create -wallet
wallet_location 
-auto_login [-pwd password]

TDEウォレットの場合:

ADMINISTER KEY MANAGEMENT CREATE [LOCAL]
AUTO_LOGIN KEYSTORE FROM KEYSTORE
IDENTIFIED BY TDE_wallet_password;

このタイプのキーストアは、TDEウォレットにのみ適用されます。

キーストアを開く

ALTER SYSTEM SET [ENCRYPTION]
WALLET OPEN IDENTIFIED BY
keystore_password;
ADMINISTER KEY MANAGEMENT SET KEYSTORE 
OPEN [FORCE KEYSTORE] 
IDENTIFIED BY keystore_password | EXTERNAL STORE
[CONTAINER = ALL | CURRENT];

キーストアを閉じる

ALTER SYSTEM SET [ENCRYPTION]
WALLET CLOSE IDENTIFIED BY
keystore_password;

ソフトウェア・キーストアと外部キーストアの場合:

ADMINISTER KEY MANAGEMENT SET KEYSTORE 
CLOSE [IDENTIFIED BY keystore_password]
[CONTAINER = ALL | CURRENT];

外部キーストアからTDEウォレットへの移行

ALTER SYSTEM SET [ENCRYPTION] KEY 
IDENTIFIED BY wallet_password 
REVERSE MIGRATE USING "external_key_manager_password" 
WITH BACKUP;
ADMINISTER KEY MANAGEMENT SET [ENCRYPTION]
KEY IDENTIFIED BY
keystore_password
REVERSE MIGRATE USING "external_key_manager_password"
WITH BACKUP [USING 'backup_identifier'];

TDEウォレットからOracle Key VaultまたはOracle Cloud Interface (OCI)キー管理サービス(KMS)への移行

ALTER SYSTEM SET [ENCRYPTION] KEY
IDENTIFIED BY "Oracle_Key_Vault_password" 
MIGRATE USING wallet_password;
ADMINISTER KEY MANAGEMENT SET [ENCRYPTION]
KEY IDENTIFIED BY "Oracle_Key_Vault_password"
MIGRATE USING wallet_password;

キーストア・パスワードの変更

orapki wallet change_pwd
-wallet wallet_location
[-oldpwd password ] 
[-newpwd password]

パスワードベースのTDEウォレットの場合:

ADMINISTER KEY MANAGEMENT ALTER KEYSTORE
PASSWORD IDENTIFIED BY
TDE_wallet_old_password 
SET TDE_wallet_new_password
[WITH BACKUP [USING 'backup_identifier']];

外部キーストアの場合は、キーストアを閉じ、外部キー・マネージャ・インタフェースで変更してから、キーストアを再度開きます。

パスワードベースのTDEウォレットのバックアップ

この機能と同等のALTER SYSTEMまたはorapkiはありません

ADMINISTER KEY MANAGEMENT BACKUP KEYSTORE
[USING 'backup_identifier'] IDENTIFIED BY
TDE_wallet_password 
[TO 'TDE_wallet_location'];

2つのTDEウォレットの3つ目の新しいキーストアへのマージ

この機能と同等のALTER SYSTEMまたはorapkiはありません

ADMINISTER KEY MANAGEMENT MERGE KEYSTORE
'TDE_wallet1_location' [IDENTIFIED BY
TDE_wallet1_password] 
AND KEYSTORE 'TDE_wallet2_location'
[IDENTIFIED BY TDE_wallet2_password]
INTO NEW KEYSTORE 'TDE_wallet3_location'
IDENTIFIED BY TDE_wallet3_password;

1つのTDEウォレットの既存の別のキーストアへのマージ

この機能と同等のALTER SYSTEMまたはorapkiはありません

ADMINISTER KEY MANAGEMENT MERGE KEYSTORE
'TDE_wallet1_location' [IDENTIFIED BY
TDE_wallet1_password] 
INTO EXISTNG KEYSTORE 'TDE_wallet2_location'
IDENTIFIED BY TDE_wallet2_password
[WITH BACKUP [USING 'backup_identifier']];

マスター暗号化キーの設定またはキー更新

ALTER SYSTEM SET [ENCRYPTION] KEY
IDENTIFIED BY keystore_password;

ノート: ALTER SYSTEM SET ENCRYPTION KEY文は、暗号化キーをキー更新した後、V$ENCRYPTION_KEYS動的ビューを更新しません。

ADMINISTER KEY MANAGEMENT 
SET ENCRYPTION KEY [USING TAG 'tag']
IDENTIFIED BY keystore_password 
WITH BACKUP [USING 'backup_identifier'] 
[CONTAINER = ALL | CURRENT];

暗号化キーをキー更新した後、V$ENCRYPTION_KEYS動的ビューが更新されます。

後で使用するマスター暗号化キーの作成

この機能と同等のALTER SYSTEMまたはorapkiはありません

ADMINISTER KEY MANAGEMENT CREATE KEY 
[USING TAG 'tag'] 
IDENTIFIED BY keystore_password 
[WITH BACKUP [USING 'backup_identifier']]
[CONTAINER = (ALL|CURRENT)];

マスター暗号化キーのアクティブ化

この機能と同等のALTER SYSTEMまたはorapkiはありません

ADMINISTER KEY MANAGEMENT USE KEY
'key_identifier' [USING TAG 'tag'] 
IDENTIFIED BY keystore_password 
[WITH BACKUP [USING 'backup_identifier']];

マスター暗号化キーのカスタム・タグの作成

この機能と同等のALTER SYSTEMまたはorapkiはありません

ADMINISTER KEY MANAGEMENT SET TAG 'tag' 
FOR 'master_key_identifier' 
IDENTIFIED BY keystore_password 
[WITH BACKUP [USING 'backup_identifier']];

マスター暗号化キーのエクスポート

この機能と同等のALTER SYSTEMまたはorapkiはありません

ADMINISTER KEY MANAGEMENT 
EXPORT [ENCRYPTION] KEYS 
WITH SECRET "export_secret" 
TO 'file_path' 
IDENTIFIED BY keystoe_password
[WITH IDENTIFIER IN 
'key_id1', 'key_id2', 'key_idn' | 
(SQL_query)]

マスター暗号化キーのインポート

この機能と同等のALTER SYSTEMまたはorapkiはありません

ADMINISTER KEY MANAGEMENT 
IMPORT [ENCRYPTION] KEYS 
WITH SECRET "import_secret" |  
FROM 'file_name' 
IDENTIFIED BY keystore_password
[WITH BACKUP [USING 'backup_identifier']];

キーストアへのOracle Databaseのシークレットの格納

この機能と同等のALTER SYSTEMまたはorapkiはありません

TDEウォレットの場合:

ADMINISTER KEY MANAGEMENT
ADD SECRET|UPDATE SECRET|DELETE SECRET
"secret" FOR CLIENT 'client_identifier' 
[USING TAG'tag'] 
IDENTIFIED BY keystore_password 
[WITH BACKUP [USING 'backup_identifier'];

外部キーストアの場合:

ADMINISTER KEY MANAGEMENT
ADD SECRET|UPDATE SECRET|DELETE SECRET
"secret" FOR CLIENT 'client_identifier' 
[USING TAG 'tag'] 
IDENTIFIED BY "external_key_manager_password";

9.7 マルチデータベース環境で機能するように透過的データ暗号化を構成

同じサーバー上の各Oracle Database (同じOracleバイナリを共有しているが異なるデータ・ファイルを使用しているデータベースなど)は、それぞれ独自のTDEキーストアにアクセスする必要があります。

キーストアは、データベース間で共有されるようには設計されていません。設計によって、データベースごとに1つのキーストアが必要となっています。複数のデータベースには同じキーストアを使用できません。

  • 複数データベース環境に対してキーストアの使用を構成するには、次のオプションのいずれかを使用します。

    • オプション1: CDB (またはスタンドアロン・データベース)ごとに、WALLET_ROOT静的初期化パラメータおよびTDE_CONFIGURATION動的初期化パラメータ(KEYSTORE_CONFIGURATION属性をFILEに設定)を個別に設定することで、キーストアの場所を指定します。WALLET_ROOTパラメータを有効にするには、KEYSTORE_CONFIGURATION属性にFILEを設定する必要があります。

      たとえば:

      WALLET_ROOT = $ORACLE_BASE/admin/db_unique_name
      TDE_CONFIGURATION="KEYSTORE_CONFIGURATION=FILE"
    • オプション2: WALLET_ROOTおよびTDE_CONFIGURATIONが設定されておらず、データベースが同じOracleホームを共有している場合は、sqlnet.oraWALLET_LOCATIONおよびENCRYPTION_WALLET_LOCATIONパラメータが設定されていないことを確認します。デフォルトでは、sqlnet.ora$ORACLE_BASE/network/adminディレクトリ($ORACLE_BASEが設定されている場合)または$ORACLE_HOME/network/adminディレクトリにあります。

      これにより、$ORACLE_BASE/admin/db_unique_name/wallet ($ORACLE_BASEが設定されている場合)または$ORACLE_HOME/admin/db_unique_name/walletディレクトリにあるキーストアをOracle Databaseが使用できます。

    • オプション3: オプション1および2が実行可能でない場合、個別のsqlnet.oraファイルを各データベースにつき1つ使用します。TNS_ADMIN環境変数が、正しいデータベース構成を指すように正確に設定されていることを確認します。ただし、リリース19c以降では、WALLET_ROOTおよびTDE_CONFIGURATION初期化パラメータが優先され、sqlnet.oraENCRYPTION_WALLET_LOCATIONパラメータは非推奨になったことに注意してください。

注意:

他のデータベースからキーストアを使用することによって、データの一部または全部が失われる可能性があります。