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

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

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

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

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

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

ソフトウェアおよびハードウェアの両方のキーストアに関して、暗号化された列を含む表をエクスポートする必要がある際に次の点が重要です。

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

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

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

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

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

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

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

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

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

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

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

暗号化されたデータ・ディクショナリ・データでの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パッケージの両方で使用できます。

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

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

ソフトウェアおよびハードウェアの両方のキーストアに関して、Oracle Data Guardは透過的データ暗号化(TDE)をサポートしています。

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

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

  • ウォレットベースのTDEによるキー更新操作では、新しいTDEマスター暗号化キーがまだ使用可能でないため、スタンバイ・データベースでの管理リカバリ・プロセス(MRP)が失敗します。この問題を回避するには、プライマリ・データベースでADMINISTER KEY MANAGEMENT CREATE KEY文を使用して、新しいTDEマスター暗号化キーをウォレットに挿入します。ウォレットをスタンバイ・データベースにコピーしてから、プライマリでADMINISTER KEY MANAGEMENT USE KEY文を実行します。

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

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

Oracle Real Application Clusters (Oracle RAC)ノードでは、ソフトウェア・キーストアとハードウェア・セキュリティ・モジュールの両方を共有できます。

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

Oracle Databaseでは、Oracle Real Application Clusters (Oracle RAC)ノードがソフトウェア・キーストアを共有できます。

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

オラクル社は、共有ファイル・システム上にソフトウェア・キーストアを作成することをお薦めします。これによってすべてのインスタンスが、同じ共有ソフトウェア・キーストアにアクセスできます。対象の環境でOracle Automatic Storage Management Cluster File System (Oracle ACFS)を使用している場合は、これが共有ウォレットの推奨される場所です。ACFSを使用できない場合は、ASMでウォレットを直接共有する(+DATA/$ORACLE_UNQNAME/WALLETSなど)ことが代替の方法です。

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

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

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

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

注意:

ENCRYPTION_WALLET_LOCATIONパラメータが設定されている場合、このパラメータは非推奨となったことに注意してください。かわりに、WALLET_ROOT静的初期化パラメータおよびTDE_CONFIGURATION動的初期化パラメータを使用することをお薦めします。

非共有システムを使用したOracle RACへのソフトウェア・キーストアの格納

ソフトウェア・キーストアを格納するために共有ファイル・システムを使用しない場合は、キーストアを関連するノードにコピーする必要があります。

  1. 管理権限を付与されたユーザーとして、統一モードのCDBルートまたは分離モードのPDBに接続します。

    例:

    CONNECT c##sec_admin AS SYSKM (or CONNECT sec_admin@pdb_name AS SYSKM)
    Enter password: password
  2. 最初のOracle Real Application Clusters (Oracle RAC)ノードのTDEマスター暗号化キーを再設定します。
    たとえば、列暗号化の場合:
    ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY keystore_password WITH BACKUP USING 'emp_key_backup';
    
  3. 新しいTDEマスター暗号化キーが格納されたキーストア・ファイルを、最初のノードから他のすべてのノードにコピーします。
    キーストア・ファイルの場所を確認するには、V$ENCRYPTION_WALLETビューのWRL_PARAMETER列を問い合せます。すべてのデータベース・インスタンスのWRL_PARAMETER設定を確認するには、GV$ENCRYPTION_WALLETビューを問い合せます。
  4. 任意の1つのノードのキーストアを閉じてから再度開きます。
    ルートで次の文を実行します。
    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN FORCE KEYSTORE IDENTIFIED BY software_keystore_password 
    [CONTAINER = ALL | CURRENT];
    
すべてのOracle RACノードで新しいTDEマスター暗号化キーが使用されるようになりました。ある1つのOracle RACインスタンスで実行されるキーストアを開く、閉じるなどのキーストア操作は、他のすべてのOracle RACインスタンスに適用されます。これは、共有ファイル・システムを使用していない場合にも当てはまります。

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

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

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

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

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

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

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

例11-1では、CREATE TABLE文でSecureFiles LOBを作成する方法を示しています。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

同じサーバー上の各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パラメータは非推奨になったことに注意してください。

注意:

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