プライマリ・コンテンツに移動
Oracle® Database Advanced Securityガイド
12cリリース1 (12.1)
B71313-13
目次へ移動
目次
索引へ移動
索引

前
次

6  他の 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_ALGORITHM=AES256 ENCRYPTION_MODE=dual

Password: password_for_hr

関連項目:

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

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

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

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

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

  • TDEは、SQL*Loaderのダイレクト・パス・ロードと連携します。暗号化列にロードされるデータは、ダイレクト・パス・ロードの過程で透過的に暗号化されます。

  • マテリアライズド・ビューは、TDE表領域暗号化と連携します。暗号化表領域にはマテリアライズド・ビューとマテリアライズド・ビュー・ログの両方を作成できます。マテリアライズド・ビューは、TDE列暗号化とも連携します。

関連項目:

  • ソフトウェア・キーストアのマージ

  • TDEとロジカル・スタンバイ・データベースの併用の詳細は、Oracle Data Guard概要および管理を参照してください。

  • マテリアライズド・ビューの詳細は、Oracle Databaseアドバンスト・レプリケーションを参照してください

  • Oracle Key Vault環境でTDEとOracle Data Guardを使用する方法は、『Oracle Key Vault管理者ガイド』

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

Oracle Real Application Clusters (Oracle RAC)のノードでは、ソフトウェア・キーストアを共有できます。ハードウェアのセキュリティ・モジュール・キーストアは、ネットワーク接続を使用して共有する必要があります。ソフトウェア・キーストアは、Oracle RACの共有されていないファイル・システムに格納できます。

内容は次のとおりです。

関連項目:

Oracle Key Vault環境でTDEとOracle RACを使用する方法は、『Oracle Key Vault管理者ガイド』

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

Oracle Databaseでは、Oracle Real Application Clustersノードがソフトウェア・キーストアを共有できます。ハードウェアのセキュリティ・モジュールは、各データベース・インスタンスに対してネットワーク接続を使用します。

これによって、すべてのノードにソフトウェア・キーストアを手動でコピーし同期化する必要がなくなります。オラクル社は、共有ファイル・システム上にソフトウェア・キーストアを作成することをお薦めします。これによってすべてのインスタンスが、同じ共有ソフトウェア・キーストアにアクセスできます。自動ストレージ管理(ASM)を使用するようにOracle RACを構成する場合、キーストアをASMディスク・グループに格納します。

ハードウェアのセキュリティ・モジュールの場合には、各データベース・インスタンスに対してネットワーク接続を使用します。したがって、すべてのデータベース・インスタンスがこのハードウェアのセキュリティ・モジュールにアクセス可能です。

すべてのインスタンスで実行または同期される必要があるキーストア操作(キーストアの開閉またはキー更新)は、任意の1つのOracle RACインスタンスで実行可能です。この同期操作は、クラスタ内のその他のOracle RACインスタンスに適用されます。つまり、ユーザーが1つのインスタンスに対して開閉したキーストアは、すべてのOracle RACインスタンスに対して開閉されます。同様に、1つのデータベース・インスタンスで実行したTDEマスター暗号化鍵のキー更新操作は、すべてのデータベース・インスタンスに適用されます。TDEマスター暗号化鍵のエクスポート、キーストアのパスワードのローテーション、キーストアのマージ、キーストアのバックアップを含む他のキーストア操作なども、1つのインスタンスのみから実行できます。

共有ファイル・システムを使用する場合は、すべてのOracle RACインスタンスのsqlnet.oraファイルにおけるENCRYPTION_WALLET_LOCATIONまたはWALLET_LOCATIONパラメータ設定が、必ず同じ共有ソフトウェア・キーストアの場所を指すようにします。また、適切なディレクトリ権限を割り当てることによって、共有ソフトウェア・キーストアのセキュリティを確保する必要もあります。

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

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

  1. ADMINISTER KEY MANAGEMENTまたはSYSKM権限が付与されたユーザーとして、データベース・インスタンスにログインします。

    マルチテナント環境で、rootまたは適切なPDBにログインします。例:

    sqlplus sec_admin@hrpdb as syskm
    Enter password: password
    Connected.
    
  2. 最初のOracle Real Application Clusters (Oracle RAC)ノードのTDEマスター暗号化鍵を再設定します。

    詳細は、キーストアのTDEマスター暗号化鍵の設定および再設定を参照してください。

  3. 新しいTDEマスター暗号化鍵が格納されたキーストア・ファイルを、最初のノードから他のすべてのノードにコピーします。

    キーストア・ファイルの場所を確認するには、V$ENCRYPTION_WALLETビューのWRL_PARAMETER列を問い合せます。すべてのデータベース・インスタンスのWRL_PARAMETER設定を確認するには、GV$ENCRYPTION_WALLETビューを問い合せます。

  4. 任意の1つのノードのキーストアを閉じてから再度開きます。(マルチテナント・コンテナ・データベース(CDB)を使用している場合は、rootでこれらの文を実行します。)

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

注意:

ある1つのOracle RACインスタンスで実行されるキーストアを開く、閉じるなどのキーストア操作は、他のすべてのOracle RACインスタンスに適用されます。これは、共有ファイル・システムを使用していない場合にも当てはまります。

すべてのOracle RACノードで新しいTDEマスター暗号化鍵が使用されるようになりました。

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

LOBを保存するには、SecureFilesを使用します。また、SecureFilesの記憶域には、圧縮、重複除外および暗号化の3つの機能があります。

内容は次のとおりです。

関連項目:

SecureFiles暗号化の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

透過的データ暗号化のマルチテナント環境での使用

マルチテナント環境では、実行できるTDE操作はrootにいるかPDBにいるかによって変わります。

内容は次のとおりです。

マルチテナント環境における透過的データ暗号化の使用について

マルチテナント環境で、列および表領域の両方に透過的データ暗号化を使用できます。

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

  • 作成するキーストアは、特定のPDB内ではなくホストのマルチテナント環境に存在します。複数のPDBはこのホスト上で動作中に、単一のキーストアにアクセス可能です。暗号化を使用する各PDBには、このキーストアに格納されている透過的データ暗号化のTDEマスター暗号化鍵があります。

  • 各PDBには個別のTDEマスター暗号化鍵があります。PDB固有のキー管理のADMINISTER KEY MANAGEMENT文を使用して、PDB内でのみ各PDB用のTDEマスター暗号化鍵を管理する必要があります。rootまたはPDBから、CDBにおけるPDBのTDEマスター暗号化鍵についての情報を確認するために適切なビューを問合せできます。たとえば、V$ENCYRYPTION_KEYSビューのPDBID列は、TDEマスター暗号化鍵が属するPDBを示しています。

  • 各PDBのキーストア内で、透過的データ暗号化のTDEマスター暗号化鍵を個別に管理できます。各PDB向けのTDEマスター暗号化鍵を、個別にローテーションできます。詳細は、TDEマスター暗号化鍵のエクスポートおよびインポートを参照してください。

  • rootからキーストア操作の大部分を実行します。キーストア・パスワードのローテーションやキーストアのマージなどのキーストア操作は、rootで実行する必要があります。鍵を開く、閉じる、リセットする、作成するなど、PDB内で実行できるキー管理の操作がいくつかあります。rootからすべてのPDBに操作を実行することもできます。適用可能な場合には、ADMINISTER KEY MANAGEMENT文にCONTAINER句があります。CONTAINER=ALLと設定すると、すべてのPDBにアクションが実行されます。

    詳細は、次の各項を参照してください。

  • 透過的データ暗号化を使用するPDBを、新しいホスト・コンピュータに移動する予定の場合、TDEマスター暗号化鍵も移動する必要があります。TDEマスター暗号化鍵をあるホスト・コンピュータから別のコンピュータに移動するには、TDEマスター暗号化鍵のエクスポートおよびインポートに記載されている手順を使用します。

rootで実行される必要がある操作

特定のADMINISTER KEY MANAGEMENTキーストア操作は、rootでのみ実行される必要があります。

操作は次のとおりです。

  • ADMINISTER KEY MANAGEMENT CREATE KEYSTORE文を使用したパスワードベースのソフトウェア・キーストアの作成

  • ADMINISTER KEY MANAGEMENT CREATE [LOCAL] AUTO_LOGIN KEYSTORE FROM KEYSTORE文を使用した自動ログインのソフトウェア・キーストアの作成

  • ADMINISTER KEY MANAGEMENT ALTER KEYSTORE PASSWORD文を使用したソフトウェア・キーストアのパスワードの変更

  • ADMINISTER KEY MANAGEMENT MERGE KEYSTORE文を使用したソフトウェア・キーストアのマージ

  • ADMINISTER KEY MANAGEMENT BACKUP KEYSTOREキーストアを使用したソフトウェア・キーストアのバックアップ

  • ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY... MIGRATE USING文を使用したソフトウェア・キーストアからハードウェア・キーストアへの移行

  • ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY... REVERSE MIGRATE文を使用したハードウェア・セキュリティ・モジュールからソフトウェア・キーストアへの逆移行

  • ADMINISTER KEY MANAGEMENT ADD|UPDATE|DELETE SECRET文を使用したシークレットの追加、更新および削除

  • 問合せまたは識別子リストに基づいた、キーの選択的なエクスポートおよびインポート

鍵およびキーストア操作に関するCONTAINER=ALL設定の動作状況

この項に記載されている鍵およびキーストア操作に関して、CONTAINER=ALL設定を指定できます。CONTAINER=ALL設定を指定することによって、CDB内のすべてのPDBで同じ操作が実行されます。rootでのみCONTAINER=ALL設定を使用できることに留意してください。CONTAINER句はオプションです。CONTAINER句を省略すると、デフォルトはCONTAINER = CURRENTになります。

許可されているCONTAINER=ALL操作は次のとおりです。

  • キーストアを開く。CONTAINER=ALL設定を使用してキーストアを開くと、関連するすべてのPDBのキーストアが開きます。

  • キーストアを閉じる。CONTAINER=ALL設定を使用してキーストアを閉じると、関連するすべてのPDBのキーストアが閉じます。

  • TDEマスター暗号化鍵を作成する。CONTAINER=ALL設定を使用してTDEマスター暗号化鍵を作成すると、開いているすべてのPDBに鍵が作成されます。最近作成された鍵を確認するには、V$ENCRYPTION_KEYSビューのCREATION_TIME列を問い合せます。CONTAINER=ALL操作でタグの指定もできますが、この操作によってすべてのPDBの鍵が同じタグで作成されることに注意してください。各TDEマスター暗号化鍵に個別のタグを作成する必要があり、これは、エラー発生時に鍵作成操作が成功したPDBがこのタグによって識別可能であるためです。ADMINISTER KEY MANAGEMENT SET TAG文を使用して、後でタグを変更できます。

  • キー更新操作を実行する。CONTAINER=ALL設定でキー更新操作を実行することによって、開いているすべてのPDBで鍵が作成され、有効化されます。最近作成された鍵を確認するには、V$ENCRYPTION_KEYSビューのCREATION_TIME列を問い合せます。最近アクティブ化された鍵を確認するには、V$ENCRYPTION_KEYSビューのACTIVATION_TIME列を問い合せます。CONTAINER=ALL操作でタグの指定もできますが、この操作によってすべてのPDBの鍵が同じタグで作成されることに注意してください。このタグは、エラー時に鍵作成操作が成功したPDBの識別にも役立ちます。ADMINISTER KEY MANAGEMENT SET TAG文を使用して、後でタグを変更できます。

rootまたはPDBで実行可能な操作

rootまたはPDBのいずれかで、次の一部のキーストア操作を実行できます。

操作は次のとおりです。

  • ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN文を使用して、キーストアを開く

  • ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE文を使用して、キーストアを閉じる

rootまたはPDBのいずれかで、次のキー管理操作を実行できます。

  • ADMINISTER KEY MANAGEMENT SET TAG文を使用した、TDEマスター暗号化鍵のタグの作成

  • ADMINISTER KEY MANAGEMENT CREATE KEY文を使用した、TDEマスター暗号化鍵の作成

  • ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY文を使用した、TDEマスター暗号化鍵の再設定またはローテーション

  • ADMINISTER KEY MANAGEMENT USE KEY文を使用した、TDEマスター暗号化鍵のアクティブ化

  • ADMINISTER KEY MANAGEMENT EXPORT ENCRYPTION KEYS文を使用した、TDEマスター暗号化鍵のエクスポート

  • ADMINISTER KEY MANAGEMENT IMPORT ENCRYPTION KEYS文を使用した、TDEマスター暗号化鍵のインポート

PDB向けのTDEマスター暗号化鍵のエクスポートおよびインポート

PDB向けにTDEマスター暗号化鍵をエクスポートまたはインポートするには、ADMINISTER KEY MANAGEMENT EXPORTおよびADMINISTER KEY MANAGEMENT IMPORT文を使用します。

内容は次のとおりです。

PDB向けのTDEマスター暗号化鍵のエクスポートおよびインポートについて

CDB以外のデータベースのTDEマスター暗号化鍵をエクスポートおよびインポートする場合と同じ方法で、rootから任意のTDEマスター暗号化鍵をエクスポートおよびインポートできます。

PDB内からTDEマスター暗号化鍵をエクスポートおよびインポートすることで、PDBに属するすべてのTDEマスター暗号化鍵をエクスポートおよびインポートできます。PDBのTDEマスター暗号化鍵のエクスポートおよびインポートでは、PDBのアンプラグとプラグ操作がサポートされます。PDBのアンプラグとプラグでは、PDBに属するすべてのTDEマスター暗号化鍵、およびメタデータが対象になります。したがって、PDB内から鍵をエクスポートする場合、ADMINISTER KEY MANAGEMENT EXPORT文のWITH IDENTIFIER句は許可されません。WITH IDENTIFIER句は、rootでのみ許可されます。

ルートに自動ログイン・キーストアがある場合、またはキーストアが閉じている場合は、FORCE KEYSTORE句を含める必要があります。キーストアがパスワードに外部ストアを使用するように構成されている場合、IDENTIFIED BY EXTERNAL STORE句を使用します。たとえば、このシナリオにおいてエクスポート操作を実行するには、次のようにします。

ADMINISTER KEY MANAGEMENT EXPORT KEYS WITH SECRET "my_secret"
TO '/etc/TDE/export.exp'
FORCE KEYSTORE IDENTIFIED BY EXTERNAL STORE;

このADMINISTER KEY MANAGEMENT EXPORT操作では、鍵がエクスポートされるだけでなく、PDB環境(およびクローニング操作)に必要なメタデータも作成されます。

PDBの内部では、TDEマスター暗号化鍵のエクスポート操作によって、鍵がエクスポートされるPDBと同じGUIDを持つPDBにより作成またはアクティブ化された鍵がエクスポートされます。基本的に、エクスポートが実行されるPDBに属しているすべての鍵がエクスポートされます。

PDB内のエクスポート・ファイルからTDEマスター暗号化鍵がインポートされるのは、そのTDEマスター暗号化鍵が同じGUIDを持つ別のPDBからエクスポートされている場合のみです。CDBへのPDBのプラグインをサポートするため、インポートでは、WITH IDENTIFIER句なしでエクスポートされたCDB以外のTDEマスター暗号化鍵を含むエクスポート・ファイルからもTDEマスター暗号化鍵がインポートされます。PDB名やデータベースIDなどのPDB固有の詳細は、CDBごとに変化する可能性があるため、PDB固有の情報は、更新されたPDB情報を反映するようにインポート時に変更されます。

注意:

PDB内では、PDB全体のキーのみエクスポートできます。問合せまたは識別子に基づいた選択的なエクスポート機能はrootに制限されています。

PDB向けのTDEマスター暗号化鍵のエクスポートまたはインポート

PDB向けのTDEマスター暗号化鍵をエクスポートまたはインポートするには、キーストアを開いてから、EXPORT ENCRYPTION KEYS WITH SECRETまたはIMPORT ENCRYPTION KEYS WITH SECRET句を含むADMINISTER KEY MANAGEMENT文を使用する必要があります。

  1. ADMINISTER KEY MANAGEMENTまたはSYSKM権限を付与されたユーザーとしてPDBにログインします。

    例:

    sqlplus sec_admin@hr_pdb as syskm
    Enter password: password
    Connected.
    

    利用可能なPDBを検索するには、DBA_PDBSデータ・ディクショナリ・ビューを問い合せます。現在のPDBを確認するには、show con_nameコマンドを実行します。

  2. キーストアが開いていることを確認します。

    V$ENCRYPTION_WALLETビューのSTATUS列を問い合せると、キーストアが開いているかどうかを確認できます。

    キーストアを開く必要があることがわかった場合は、手順3: ソフトウェア・キーストアを開を参照してください。

  3. 例: PDBからTDEマスター暗号化鍵をエクスポートの例に従って、エクスポートまたはインポート操作を実行します。

例: PDBからTDEマスター暗号化鍵をエクスポート

ADMINISTER KEY MANAGEMENT EXPORT ENCRYPTION KEYS SQL文を使用し、PDBからTDEマスター暗号化鍵をエクスポートできます。

例6-3では、PDB hr_pdb1からTDEマスター暗号化鍵をエクスポートする方法を示しています。

例6-3 PDBからTDEマスター暗号化鍵をエクスポート

sqlplus sec_admin@hr_pdb1 as syskm
Enter password: password
Connected.

ADMINISTER KEY MANAGEMENT EXPORT ENCRYPTION KEYS WITH SECRET "my_secret" TO '/export.p12' IDENTIFIED BY password_cdb1;

例: PDBにTDEマスター暗号化鍵をインポート

ADMINISTER KEY MANAGEMENT IMPORT ENCRYPTION KEYS SQL文を使用して、PDBにTDEマスター暗号化鍵をインポートできます。

例6-4では、PDB hr_pdb2へTDEマスター暗号化鍵をインポートする方法を示しています。

例6-4 PDBにTDEマスター暗号化鍵をインポート

sqlplus sec_admin@hr_pdb2 as syskm
Enter password: password
Connected.

ADMINISTER KEY MANAGEMENT IMPORT ENCRYPTION KEYS WITH SECRET "my_secret" FROM '/tmp/export.p12' IDENTIFIED BY password_cdb2 WITH BACKUP;

暗号化データのあるPDBをCDBでプラグおよびアンプラグ

暗号化されたデータのあるPDBを、CDBに追加またはCDBから削除できます。

暗号化データを含むPDBのアンプラグ

1つのCDBからPDBをアンプラグして、別のCDBにプラグインできます。

アンプラグされたデータベースには、データ・ファイルおよび他の関連ファイルが含まれます。エクスポート・ファイルは、アンプラグされたPDBのファイルの一部を構成する別のファイルであり、アンプラグされたPDBとともに転送する必要があります。

  1. アンプラグするPDBのTDEマスター暗号化鍵をエクスポートします。

    PDB向けのTDEマスター暗号化鍵のエクスポートおよびインポートを参照してください。

  2. 『Oracle Database管理者ガイド』に説明されている方法で、PDBをアンプラグします。

注意:

TDSマスター暗号化鍵を最初にエクスポートしないで間違ってPDBをアンプラグしても、暗号化鍵は失われません。この情報はまだデータベース内にあります。PDBをCDBにプラグインしなおし、TDEマスター暗号化鍵をエクスポートしてから、PDBをアンプラグします。

暗号化データを含むPDBのCDBへのプラグイン

暗号化データを含むPDBをCDBにプラグインするには、TDEマスター暗号化鍵をPDBにインポートしてから、そこで構成する必要があります。

  1. 『Oracle Database管理者ガイド』に説明されている方法で、アンプラグされたPDBをCDBにプラグインすることによって、PDBを作成します。

    プラグ操作後のPDBのオープン操作中に、Oracle DatabaseによってPDBに暗号化データが含まれるかどうかが判別されます。その場合、PDBはRESTRICTEDモードでオープンされます。

    PDBのオープン・モードの詳細は、『Oracle Database管理者ガイド』を参照してください。

  2. TDEマスター暗号化鍵をPDBにインポートします。

    PDB向けのTDEマスター暗号化鍵のエクスポートおよびインポートを参照してください。

  3. 『Oracle Database管理者ガイド』の説明に従って、PDBをクローズしてからPDBを再オープンします。

  4. キーストアを開きます。

    次の項を参照してください。

  5. PDBにTDEマスター暗号化鍵を設定します。

    次の項を参照してください。

HSMに格納されたマスター鍵を含むPDBのアンプラグ

ハードウェア・セキュリティ・モジュール(HSM)で構成された1つのCDBからPDBをアンプラグし、それをHSMで構成された別のCDBにプラグインできます。

  1. PDBをアンプラグします。

    PDBのアンプラグの詳細は、Oracle Database管理者ガイドを参照してください。

  2. ソースCDBで使用されていたHSMのアンプラグされたPDBのマスター鍵を、宛先のCDBで使用されているHSMに移動します。

    マスター鍵のHSM間での移動の詳細は、HSMのドキュメントを参照してください。

HSMに格納されたマスター鍵を含むPDBのプラグ

ADMINISTER KEY MANAGEMENT文を使用して、別のCDBに移動したPDBにHSMマスター鍵をインポートできます。

  1. アンプラグされたPDBをHSMで構成された宛先CDBにプラグインします。
    プラグイン操作の後、プラグインされたPDBは制限モードになります。PDBのプラグの詳細は、Oracle Database管理者ガイドを参照してください。
  2. ソースCDBで構成されたHSMからのマスター鍵が、宛先CDBのHSMで使用可能であることを確認します。
  3. プラグされたPDBに、ADMINISTER KEY MANAGEMENTまたはSYSKM権限を付与されたユーザーとしてログインします。

    例:

    sqlplus sec_admin@hr_pdb as syskm
    Enter password: password
    Connected.
    

    利用可能なPDBを検索するには、DBA_PDBSデータ・ディクショナリ・ビューを問い合せます。現在のPDBを確認するには、show con_nameコマンドを実行します。

  4. プラグされたPDBのマスター暗号化鍵を開きます。

    たとえば、PDB1というPDBの場合は、次のようになります。

    ALTER SESSION SET CONTAINER = PDB1;
    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "keystore_passsword";
  5. HSMマスター鍵をPDBにインポートします。
    ADMINISTER KEY MANAGEMENT IMPORT ENCRYPTION KEYS WITH SECRET "HSM" FROM 'HSM' IDENTIFIED BY "keystore_password"; 
  6. PDBを再起動します。
    ALTER PLUGGABLE DATABASE PDB1 CLOSE;
    ALTER PLUGGABLE DATABASE PDB1 OPEN;

マルチテナント環境でのキーストアの開閉操作の機能

マルチテナント環境でキーストアの開閉操作がどのように機能するかを知っておく必要があります。

マルチテナント環境における各PDBに関して、透過的データ暗号化の操作が続行できるように、PDBにおいてパスワードベースのソフトウェア・キーストアまたはハードウェア・キーストアを明示的に開く必要があります。(自動ログイン・ソフトウェア・キーストアおよびローカル自動ログイン・ソフトウェア・キーストアは自動的に開きます。)PDBのキーストアを閉じることによって、PDBのすべての透過的データ暗号化操作がブロックされます。

CDBにおいて、PDBにおけるキーストア操作の開閉操作は、rootにおけるキーストアの開閉状態に依存します。

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

  • 個別のPDBにおいてソフトウェアのパスワードベースのキーストアまたはハードウェア・キーストアを手動で開くには、rootでキーストアを開く必要があります。

  • 個々のPDBでTDEマスター暗号化鍵を設定する前に、rootで鍵を設定する必要があります。

  • (自動ログイン・ソフトウェア・キーストアおよびローカル自動ログイン・ソフトウェア・キーストアは自動的に開きます。)これらを最初にrootからまたはPDBから、手動で開く必要はありません。

  • rootでキーストアを閉じると、これに依存するPDBのキーストアも閉じられます。rootにおいてキーストアを閉じる操作は、CONTAINER句がALLに設定されていてキーストアを閉じる操作を実行することと同等です。

  • rootでキーストアを開いてCONTAINERALLに設定すると、これに依存するPDBのキーストアも開きます。

マルチテナント環境のすべてのPDBのキーストアのステータスの確認

V$ENCRYPTION_WALLETビューでは、PDBのキーストアのステータス(オープン、クローズ、ソフトウェアまたはハードウェア・キーストアを使用しているかどうかなど)が表示されています。このビューを使用する便利なファンクションを作成して、CDB環境におけるすべてのPDBのキーストアのステータスを確認できます。

  • V$ENCRYPTION_WALLETビューを使用してキーストアのステータスを検出するファンクションを作成するには、CREATE PROCEDURE PL/SQL文を使用します。

例6-5では、このファンクションを作成する方法を示しています。

例6-5 CDBにおけるすべてのPDBに関するキーストアのステータスを確認するファンクション

CREATE OR REPLACE PROCEDURE all_pdb_v$encryption_wallet
IS
    err_occ            BOOLEAN;
    curr_pdb           VARCHAR2(30);
    pdb_name           VARCHAR2(30);
    wrl_type           VARCHAR2(20);
    status             VARCHAR2(30);
    wallet_type        VARCHAR2(20);
    wallet_order       VARCHAR2(12);
    fully_backed_up    VARCHAR2(15);
    wrl_parameter      VARCHAR2(4000);
    cursor sel_pdbs IS SELECT NAME FROM V$CONTAINERS
                       WHERE NAME <> 'PDB$SEED' order by con_id desc;
  BEGIN
 
    -- Store the original PDB name
    SELECT sys_context('userenv', 'con_name') INTO curr_pdb FROM DUAL;
    IF curr_pdb <> 'CDB$ROOT' THEN
      dbms_output.put_line('Operation valid in ROOT only');
    END IF;
 
    err_occ := FALSE;
    dbms_output.put_line('---');
    dbms_output.put_line('PDB_NAME                       WRL_TYPE STATUS                        ');
    dbms_output.put_line('------------------------------ -------- ------------------------------');
    dbms_output.put_line('WALLET_TYPE          WALLET_ORDER FULLY_BACKED_UP');
    dbms_output.put_line('-------------------- ------------ ---------------');
    dbms_output.put_line('WRL_PARAMETER');
    dbms_output.put_line('--------------------------------------------------------------------------');
    FOR pdbinfo IN sel_pdbs LOOP
 
      pdb_name := DBMS_ASSERT.ENQUOTE_NAME(pdbinfo.name, FALSE);
      EXECUTE IMMEDIATE 'ALTER SESSION SET CONTAINER = ' || pdb_name;
 
      BEGIN
        pdb_name := rpad(substr(pdb_name,1,30), 30, ' ');
        EXECUTE IMMEDIATE 'SELECT wrl_type from V$ENCRYPTION_WALLET' into wrl_type; 
        wrl_type := rpad(substr(wrl_type,1,8), 8, ' ');
        EXECUTE IMMEDIATE 'SELECT status from V$ENCRYPTION_WALLET' into status;
        status := rpad(substr(status,1,30), 30, ' ');
        EXECUTE IMMEDIATE 'SELECT wallet_type from V$ENCRYPTION_WALLET' into wallet_type;
        wallet_type := rpad(substr(wallet_type,1,20), 20, ' ');
        EXECUTE IMMEDIATE 'SELECT wallet_order from V$ENCRYPTION_WALLET' into wallet_order;        
        wallet_order := rpad(substr(wallet_order,1,9), 12, ' ');
        EXECUTE IMMEDIATE 'SELECT fully_backed_up from V$ENCRYPTION_WALLET' into fully_backed_up;
        fully_backed_up := rpad(substr(fully_backed_up,1,9), 15, ' ');
        EXECUTE IMMEDIATE 'SELECT wrl_parameter from V$ENCRYPTION_WALLET' into wrl_parameter;
        wrl_parameter := rpad(substr(wrl_parameter,1,79), 79, ' ');
        dbms_output.put_line(pdb_name || ' ' || wrl_type || ' ' || status);
        dbms_output.put_line(wallet_type || ' ' || wallet_order || ' ' || fully_backed_up);
        dbms_output.put_line(wrl_parameter);
 
      EXCEPTION
        WHEN OTHERS THEN
        err_occ := TRUE;
      END;
    END LOOP;
 
    IF err_occ = TRUE THEN
       dbms_output.put_line('One or more PDB resulted in an error');
    END IF;
  END;
.
/
set serveroutput on
exec all_pdb_v$encryption_wallet;

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

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

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

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

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

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

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

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

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

  • 複数データベース環境に対してsqlnet.oraファイルを構成するには、次のオプションを使用します。

    • オプション1: データベースが同じOracleホームを共有する場合、sqlnet.oraファイルをデフォルトの場所(ORACLE_HOME/network/adminディレクトリ)に保持します。

      この場合、デフォルトの場所を使用することをお薦めします。sqlnet.oraファイルに、WALLET_LOCATIONまたはENCRYPTION_WALLET_LOCATIONエントリがないことを確認します。これらの2つのエントリがsqlnet.oraファイルにない場合、透過的データ暗号化は、デフォルトのsqlnet.oraの場所からキーストアにアクセスします。

    • オプション2: オプション1がご使用のサイトで実行可能な場合、ORACLE_SIDのような環境変数設定に基づき、キーストアの場所を指定できます。

      例:

      ENCRYPTION_WALLET_LOCATION =
       (SOURCE =
        (METHOD = FILE)
         (METHOD_DATA =
          (DIRECTORY = /home/oracle/wallet/$ORACLE_SID)
      
    • オプション3: オプション1および2が実行可能でない場合、個別のsqlnet.oraファイルを各データベースにつき1つ使用します。TNS_ADMIN環境変数が、正しいデータベース構成を指すように正確に設定されていることを確認します。TNS_ADMIN変数の詳細および設定例は、SQL*Plusユーザーズ・ガイドおよびリファレンスを参照してください。

注意:

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