8 他の Oracle機能における透過的データ暗号化の使用
Oracle Data Encryptionは、Oracle Data GuardやOracle Real Application ClustersなどのOracle機能とともに使用できます。
- 透過的データ暗号化とエクスポートおよびインポート操作との連携
Oracle Data Pumpによって、暗号化列を含む表をエクスポートおよびインポートしたり、ダンプ・セット全体を暗号化することができます。 - 透過的データ暗号化とOracle Data Guardとの連携
Oracle Data Guardプライマリ・データベースおよびセカンダリ・データベースは、ソフトウェア・キーストアと外部キーストアの両方を共有できます。 - 透過的データ暗号化とOracle Real Application Clustersとの連携
Oracle Real Application Clusters (Oracle RAC)ノードでは、ソフトウェア・キーストアと外部キーストアの両方を共有できます。 - 透過的データ暗号化とSecureFilesとの連携
LOBが格納されるSecureFilesには、圧縮、重複除外および暗号化の3つの機能があります。 - 透過的データ暗号化とOracle Call Interfaceとの連携
透過的データ暗号化は、Oracle Call Interface (OCI)の動作に影響しません。 - 透過的データ暗号化とエディションとの連携
透過的データ暗号化は、Oracle Databaseのエディション機能に影響しません。 - マルチデータベース環境で機能するように透過的データ暗号化を構成
同じサーバー上の各Oracle Database (同じOracleバイナリを共有しているが異なるデータ・ファイルを使用しているデータベースなど)は、それぞれ独自のTDEキーストアにアクセスする必要があります。
親トピック: 透過的データ暗号化の使用
8.1 透過的データ暗号化とエクスポートおよびインポート操作との連携
Oracle Data Pumpによって、暗号化列を含む表をエクスポートおよびインポートしたり、ダンプ・セット全体を暗号化することができます。
- 暗号化データされたデータのエクスポートおよびインポートについて
暗号化列を持つ表のエクスポートとインポートには、Oracle Data Pumpを使用できます。 - 暗号化された列のある表のエクスポートおよびインポート
ENCRYPTION=ENCRYPTED_COLUMNS_ONLY
設定を使用して、暗号化された列のある表をエクスポートおよびインポートできます。 - Oracle Data Pumpを使用してダンプ・セット全体を暗号化
Oracle Data Pumpによって、透過的データ暗号化列のみではなく、ダンプ・セット全体を暗号化できます。 - 暗号化されたデータ・ディクショナリ・データでのOracle Data Pumpの使用
Oracle Data Pumpは、暗号化されたパスワードおよびその他の暗号化されたデータの保護を提供します。
親トピック: 他の Oracle機能における透過的データ暗号化の使用
8.1.1 暗号化データされたデータのエクスポートおよびインポートについて
暗号化列を持つ表のエクスポートとインポートには、Oracle Data Pumpを使用できます。
ソフトウェア・キーストアと外部キーストアのどちらについても、暗号化された列を含む表をエクスポートする必要がある場合には次の点が重要となります。
-
転送中も機密データが解読されないように保つ必要があります。
-
権限のあるユーザーは、宛先にインポートされたデータを復号化できる必要があります。
Oracle Data Pumpを使用して暗号化列を含む表をエクスポートおよびインポートする場合、ENCRYPTION
パラメータを使用してダンプ・ファイル・セットのデータを暗号化できるようにします。ENCRYPTION
パラメータには、次の値を指定できます。
-
ENCRYPTED_COLUMNS_ONLY
: 暗号化列が暗号化された形式でダンプ・ファイル・セットに書き込まれます。 -
DATA_ONLY
: すべてのデータが暗号化された形式でダンプ・ファイル・セットに書き込まれます。 -
METADATA_ONLY
: すべてのメタデータがダンプ・ファイル・セットに暗号化された形式で書き込まれます。 -
ALL
: すべてのデータとメタデータが暗号化された形式でダンプ・ファイル・セットに書き込まれます。 -
NONE
: ダンプ・ファイル・セットに対して暗号化は使用されません。
8.1.2 暗号化された列のある表のエクスポートおよびインポート
ENCRYPTION=ENCRYPTED_COLUMNS_ONLY
設定を使用して、暗号化された列のある表をエクスポートおよびインポートできます。
-
暗号化列を含む表のエクスポートを試行する前に、キーストアが開いていることを確認します。
マルチテナント環境では、プラガブル・データベース(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マスター暗号化キーへのアクセスが必要なためです。列は、エクスポートされる前にパスワードを使用して再暗号化されます。 -
エクスポート・ダンプ・ファイル・セットの列データを暗号化する際に使用するパスワードを、
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
-
エクスポートされたデータをターゲット・データベースにインポートするには、
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
8.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
8.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_PASSWORD
とENCRYPTION_PWD_PROMPT
の両方のパラメータがインポート操作で使用できます。ENCRYPTION_PWD_PROMPT
は、expdp
およびimpdp
のコマンドライン・クライアントでのみ使用できるのに対して、ENCRYPTION_PASSWORD
は、コマンドライン・クライアントとDBMS_DATAPUMP
PL/SQLパッケージの両方で使用できます。
インポート操作時に、キーストアが開いているか閉じているかにより、暗号化パスワードが指定されている必要があるかどうかの動作が影響を受けます。キーストアがエクスポート操作中に開いていて、暗号化パスワードを指定した場合は、インポート操作中にパスワードを指定する必要はありません。キーストアがエクスポート操作中に閉じられている場合は、インポート操作中にパスワードを指定する必要があります。
8.2 透過的データ暗号化とOracle Data Guardとの連携
Oracle Data Guardプライマリ・データベースおよびセカンダリ・データベースは、ソフトウェア・キーストアと外部キーストアの両方を共有できます。
- Oracle Data Guardでの透過的データ暗号化の使用について
Oracle Data Guardでは、ソフトウェア・キーストアと外部キーストアのどちらについても、透過的データ暗号化(TDE)がサポートされています。 - Oracle Data Guard環境でのTDEおよびOracle Key Vaultの構成
TDEおよびOracle Key Vaultと連携できるように、マルチテナント環境でOracle Data Guardを構成できます。 - Oracle Data Guard環境での分離キーストアを持つPDBの有効化
Oracle Data Guard環境で、PDBがスタンバイに分離キーストアを持つようにするには、構成を手動で実行する必要があります。
親トピック: 他の Oracle機能における透過的データ暗号化の使用
8.2.1 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
文を実行します。 -
データをスタンバイ・データベースに転送する場合、ログ・ファイル内の暗号化データは暗号化されたままです。暗号化データは転送中も暗号化されたままです。
関連項目
8.2.2 Oracle Data Guard環境でのTDEおよびOracle Key Vaultの構成
TDEおよびOracle Key Vaultと連携できるように、マルチテナント環境でOracle Data Guardを構成できます。
8.2.3 Oracle Data Guard環境での分離キーストアを持つPDBの有効化
Oracle Data Guard環境で、PDBがスタンバイに分離キーストアを持つようにするには、構成を手動で実行する必要があります。
ADMINISTER KEY MANAGEMENT
コマンドがスタンバイに影響しないためです。まず、プライマリ・データベースでPDBを分離します。ADMINISTER KEY MANAGEMENT ISOLATE KEYSTORE
コマンドは、PDBのTDE_CONFIGURATION
パラメータをFILE
に変更し、統合モードのウォレットから新しく作成された分離モードのウォレットにキーを移動するなど、必要な分離タスクを実行します。次に、分離モードのプロセスを完了するために、スタンバイでこれらの同じタスクを手動で実行する必要があります。
8.3 透過的データ暗号化とOracle Real Application Clustersとの連携
Oracle Real Application Clusters (Oracle RAC)ノードでは、ソフトウェア・キーストアと外部キーストアの両方を共有できます。
- Oracle Real Application Clustersでの透過的データ暗号化の使用について
Oracleは、クラスタ・インスタンス間に、Oracle Real Application Clusters (Oracle RAC)の共有ソフトウェア・キーストア、つまり、Oracle Key Vaultで共有される共通の仮想ウォレットを必要とします。 - Oracle Real Application ClustersにおけるOracle Key Vault用のTDEの構成
Oracle Exadata Cloud at Customer (ExaCC)およびその他のサーバーのOracle Real Application Clusters (Oracle RAC)でTDEを、Oracle Key Vaultによって実現される一元管理されたキー管理のために構成できます。
親トピック: 他の Oracle機能における透過的データ暗号化の使用
8.3.1 Oracle Real Application Clustersでの透過的データ暗号化の使用について
Oracleは、Oracle Real Application Clusters (Oracle RAC)の共有ソフトウェア・キーストア、つまり、クラスタ・インスタンス間で共有されるOracle Key Vault内の共通の仮想ウォレットを必要とします。
Oracle Key Vaultを使用するTDE構成では、データベースの各インスタンスから外部キー・マネージャへのネットワーク接続が使用されます。Oracle Key Vaultでは、Oracle RAC対応データベースのインスタンスごとに1つのエンドポイントを作成し、Oracle RAC対応データベースごとに1つの仮想ウォレットを作成する必要があります。次に、その仮想ウォレットを、そのデータベースに属するすべてのエンドポイントのデフォルト・ウォレットにします。Oracle RAC対応のData Guard構成では、すべてのインスタンス(プライマリおよびすべてのスタンバイ・データベース)で1つの仮想ウォレットが共有されます。この構成では、関連するすべてのインスタンスが自動的に同期されるため、キー設定操作とキー更新操作は完全に透過的に行われます。これにより、クラスタ内のその他の各ノードにソフトウェア・キーストアを手動でコピーする必要がなくなります。
Oracleでは、Oracle RACノードごとの個別のTDEウォレットの使用はサポートされていません。かわりに、Oracle RAC環境で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インスタンスのsqlnet.ora
ファイルにおけるENCRYPTION_WALLET_LOCATION
パラメータ設定が、必ず同じ共有ソフトウェア・キーストアの場所を指すようにします。また、適切なディレクトリ権限を割り当てることによって、共有ソフトウェア・キーストアのセキュリティを確保する必要もあります。
ノート:
Oracle Real Application Clusters (Oracle RAC)インスタンスごとの個別のウォレットでのTDEマスター暗号化キーの格納はサポートされていません。かわりに、オンプレミスまたはクラウドベースのデータベース・デプロイメント、Oracle Automatic Storage Management (Oracle ASM)またはOracle ASM Cluster File System (Oracle ACFS)間の集中キー管理用のOracle Key Vaultを使用してローカル共有ウォレットを提供します。8.3.2 Oracle Real Application ClustersにおけるOracle Key Vault用のTDEの構成
Oracle Exadata Cloud at Customer (ExaCC)およびその他のサーバーのOracle Real Application Clusters (Oracle RAC)でTDEを、Oracle Key Vaultによって実現される一元管理されたキー管理のために構成できます。
provision
コマンドには、OracleデータベースのJavaホームを指す/usr/bin/java
内のシンボリック・リンクが必要です。たとえば:# ln -sv $ORACLE_HOME/jdk/jre/java /usr/bin/java
8.4 透過的データ暗号化とSecureFilesとの連携
LOBが格納されるSecureFilesには、圧縮、重複除外および暗号化の3つの機能があります。
- 透過的データ暗号化およびSecureFilesについて
SecureFilesの暗号化では、LOBの暗号化機能を提供するためにTDEを使用します。 - 例: 特定の暗号化アルゴリズムを使用したSecureFiles LOBの作成
CREATE TABLE
文によって、暗号化を指定してSecureFiles LOBを作成できます。 - 例: 列パスワードを指定したSecureFiles LOBの作成
CREATE TABLE
文によって、列パスワードを指定してSecureFiles LOBを作成できます。
親トピック: 他の Oracle機能における透過的データ暗号化の使用
8.4.1 透過的データ暗号化およびSecureFilesについて
SecureFilesの暗号化では、LOBの暗号化機能を提供するためにTDEを使用します。
表を作成または変更する際に、SecureFiles記憶域を使用する必要があるSecureFiles暗号化やLOB列を指定できます。現在の透過的データ暗号化(TDE)構文を使用するか、またはLOB列に関するLOBパラメータの一部としてENCRYPT
句を使用することによって、LOB列の暗号化を有効化できます。現在の構文またはLOBパラメータにおけるDECRYPT
オプションによって、暗号化を無効化できます。
親トピック: 透過的データ暗号化とSecureFilesとの連携
8.4.2 例: 特定の暗号化アルゴリズムを使用したSecureFiles LOBの作成
CREATE TABLE
文によって、暗号化を指定してSecureFiles LOBを作成できます。
例8-1では、CREATE TABLE
文でSecureFiles LOBを作成する方法を示しています。
例8-1 特定の暗号化アルゴリズムを使用したSecureFiles LOBの作成
CREATE TABLE table1 ( a BLOB ENCRYPT USING 'AES256') LOB(a) STORE AS SECUREFILE ( CACHE );
親トピック: 透過的データ暗号化とSecureFilesとの連携
8.4.3 例: 列パスワードを指定したSecureFiles LOBの作成
CREATE TABLE
文によって、列パスワードを指定してSecureFiles LOBを作成できます。
例8-2では、暗号化された列に対してパスワード保護を使用するSecureFiles LOBの作成例を示しています。
LOB列のすべてのLOBが、同じ暗号化の指定で暗号化されます。
例8-2 列パスワードを指定したSecureFiles LOBの作成
CREATE TABLE table1 (a VARCHAR2(20), b BLOB)
LOB(b) STORE AS SECUREFILE (
CACHE
ENCRYPT USING 'AES192' IDENTIFIED BY password
);
親トピック: 透過的データ暗号化とSecureFilesとの連携
8.5 透過的データ暗号化とOracle Call Interfaceとの連携
透過的データ暗号化は、Oracle Call Interface (OCI)の動作に影響しません。
多くの実用的な目的のために、TDEは行の受渡し機能を除き、OCIに対して透過的です。行を使用可能にするキーは受信ポイントでは使用できないため、OCIの行の受渡し機能をTDEで使用できません。
親トピック: 他の Oracle機能における透過的データ暗号化の使用
8.6 透過的データ暗号化とエディションとの連携
透過的データ暗号化は、Oracle Databaseのエディション機能に影響しません。
多くの実用的な目的のために、TDEはエディションに対して透過的です。表は常に非エディション化オブジェクトです。TDEの列暗号化によって、表の列が暗号化されます。エディションは、TDEの表領域の暗号化によって影響されません。
親トピック: 他の Oracle機能における透過的データ暗号化の使用
8.7 マルチデータベース環境で機能するように透過的データ暗号化を構成
同じサーバー上の各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がサイトで実行可能でない場合は、キーストアの場所を次のように指定できます。
WALLET_ROOT
初期化パラメータはすべてのPDBによって共有されますが、各CDB(またはスタンドアロン・データベース)には個別のWALLET_ROOT
設定が必要です。たとえば:
WALLET_ROOT = /home/oracle/db_unique_name/wallet/
-
オプション3: オプション1および2が実行可能でない場合、個別の
sqlnet.ora
ファイルを各データベースにつき1つ使用します。TNS_ADMIN
環境変数が、正しいデータベース構成を指すように正確に設定されていることを確認します。
-
注意:
他のデータベースからキーストアを使用することによって、データの一部または全部が失われる可能性があります。