プライマリ・コンテンツに移動
Oracle® Database Advanced Security管理者ガイド
11gリリース2 (11.2)
B56286-10
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

8 透過的データ暗号化を使用した格納済データの保護

透過的データ暗号化(TDE)を使用すると、表および表領域に格納する機密データ(クレジット・カード番号など)を暗号化できます。暗号化されたデータは、アクセス権を持つデータベース・ユーザーやアプリケーションに対して透過的に復号化されます。TDEは、ストレージ・メディアやデータ・ファイルが盗まれた場合に、メディアに格納されているデータを保護するのに役立ちます。

この章の内容は次のとおりです。

8.1 透過的データ暗号化について

Oracle Databaseの認証、認可および監査メカニズムは、データベース内のデータを保護するためのものであり、オペレーティング・システムのデータ・ファイルに格納されているデータの保護には使用されません。このようなデータ・ファイルを保護する目的では、透過的データ暗号化(TDE)を使用します。TDEを使用すると、データ・ファイルに格納されている機密データを暗号化できます。許可なく復号化されるのを防止するため、TDEにより暗号化鍵はデータベース外部のセキュリティ・モジュールに格納されます。

データベース・ユーザーやアプリケーションは、鍵の格納を管理したり、補助の表、ビューおよびトリガーを作成する必要はありません。機密データを処理するアプリケーションでTDEを使用すると、アプリケーションをほとんどあるいはまったく変更せずに、強力なデータ暗号化を実現できます。

TDEは、表の列に格納された機密データ(クレジット・カード番号や社会保障番号など)を保護する目的で使用します。また、TDEを使用して表領域全体を暗号化することもできます。

この項の内容は次のとおりです。

8.1.1 透過的データ暗号化を使用する利点

透過的データ暗号化(TDE)には、次の利点があります。

  • セキュリティ管理者の場合、ストレージ・メディアまたはデータ・ファイルが盗み出された場合にも機密データを保護できます。

  • TDEを実装すると、セキュリティに関連する法的コンプライアンスの問題への対応に役立ちます。

  • 権限のあるユーザーやアプリケーションに対しては、データを復号化するためのトリガーやビューを作成する必要がありません。表内のデータは、データベース・ユーザーやアプリケーションに対して透過的に復号化されます。

  • データベース・ユーザーやアプリケーションは、アクセスしているデータが暗号化された形式で格納されていることを認識する必要がありません。データは、データベース・ユーザーやアプリケーションに対して透過的に復号化されます。

  • 暗号化されたデータを処理するためにアプリケーションを変更する必要がありません。データの暗号化/復号化は、データベースにより管理されます。

  • 鍵管理操作は自動化されます。ユーザーやアプリケーションが暗号化鍵を管理する必要はありません。

8.1.2 透過的データ暗号化のタイプ

透過的データ暗号化(TDE)列暗号化を使用すると、選択した表の列に格納されている機密データを暗号化できます。TDE表領域暗号化を使用すると、表領域に格納されているすべてのデータを暗号化できます。

TDE列暗号化とTDE表領域暗号化では、どちらも2層の鍵ベース・アーキテクチャを使用します。暗号化されたデータを取得しても、許可された復号化が行われるまでは理解不能です。この復号化は、表へのアクセスを許可されたユーザーに対して自動的に行われます。

次の各項では、TDE列暗号化とTDE表領域暗号化について説明します。

8.1.2.1 TDE列暗号化

TDE列暗号化は、表の列に格納された機密データ(クレジット・カード番号や社会保障番号など)を保護する目的で使用します。TDE列暗号化では、2層の鍵ベース・アーキテクチャを使用して、機密の表の列を透過的に暗号化および復号化します。TDEマスター暗号化鍵は外部セキュリティ・モジュールに格納され、この外部セキュリティ・モジュールは、Oracleウォレットまたはハードウェア・セキュリティ・モジュール(HSM)にできます。このマスター暗号化鍵は表キーの暗号化に使用され、表キーは表の列のデータの暗号化と復号化に使用されます。

図8-1に、TDE列暗号化プロセスの概要を示します。

図8-1 TDE列暗号化の概要

図8-1の説明が続きます。
「図8-1 TDE列暗号化の概要」の説明

図8-1に示すように、マスター暗号化鍵は、データベースの外部にあり、セキュリティ管理者のみがアクセスできる外部セキュリティ・モジュールに格納されます。Oracleでは、この外部セキュリティ・モジュールとして、この章で説明するOracleウォレットまたはハードウェア・セキュリティ・モジュール(HSM)を使用します。このようにマスター暗号化鍵を格納することで、不正使用を防止できます。

外部セキュリティ・モジュール(ウォレット/HSM)を使用すると、通常のプログラム機能と暗号化操作が分離されるため、データベース管理者とセキュリティ管理者の責務を分離できます。データベース管理者にはウォレット・パスワードを知らせずに、セキュリティ管理者にパスワードの提供を要求できるため、セキュリティが強化されます。

表に暗号化列が含まれる場合、暗号化列の数に関係なく、単一の表キーが使用されます。すべての表の表キーは、データベース・サーバーのマスター暗号化鍵で暗号化され、データベース内のディクショナリ表に格納されます。暗号化されていない鍵が格納されることはありません。

8.1.2.2 TDE表領域暗号化

TDE表領域暗号化を使用すると、表領域全体を暗号化できます。暗号化されている表領域に作成されたオブジェクトはすべて自動的に暗号化されます。TDE表領域暗号化は、表内の機密データを保護する場合に便利です。暗号化が必要な列を判断するために、各表の列を詳細に分析する必要はありません。

また、TDE表領域暗号化は、バルク暗号化とキャッシュを利用して、高度なパフォーマンスを実現します。アプリケーションのパフォーマンスに対する実際の影響は様々ですが、パフォーマンスのオーバーヘッドは約5%から8%までと推定されます。

TDE表領域暗号化は、表の複数の列に機密データが含まれている場合や個々の列ではなく表全体を保護する場合に、TDE列暗号化にかわる有効な代替手段です。

TDE表領域暗号化では、暗号化された表領域内に格納されているデータおよびそれに対応するREDOデータがすべて暗号化されます。この場合、BLOBCLOBなどの内部ラージ・オブジェクト(LOB)も暗号化の対象となります。TDE表領域暗号化では、表領域の外部に格納されているデータは暗号化されません。たとえば、データベース外部に格納されるBFILEデータは暗号化されません。暗号化された表領域内でBFILE列を含む表を作成した場合、この特別な列は暗号化されません。ただし、SecureFile LOBはOracle Database 11g リリース1 (11.1)からサポートされています。

暗号化された表領域内のデータはすべて、暗号化された形式でディスク上に格納されます。データの表示または変更に必要な権限を付与されているユーザーに対しては、データが透過的に復号化されます。データベース・ユーザーやアプリケーションは、特定の表がディスク上で暗号化されているかどうかを認識する必要はありません。ディスク上のデータ・ファイルまたはバックアップ・メディアが盗まれた場合でも、データの安全性は損なわれません。

TDE表領域暗号化では、2層の鍵ベース・アーキテクチャを使用して、表領域を透過的に暗号化(および復号化)します。TDEマスター鍵は、外部セキュリティ・モジュール(OracleウォレットまたはHSM)に格納されます。このTDEマスター鍵はTDE表領域暗号化鍵の暗号化に使用され、TDE表領域暗号化鍵は表領域のデータの暗号化と復号化に使用されます。

図8-2に、TDE表領域暗号化プロセスの概要を示します。

図8-2 TDE表領域暗号化

この図については本文で説明しています。

注意:

暗号化データは、JOINSORTなどの操作中も保護されます。これは、データを一時表領域に移動しても安全であることを意味します。UNDOログとREDOログのデータも保護されます。

TDE表領域暗号化を使用すると、暗号化された表領域のデータに対して索引レンジ・スキャンを実行することもできます。索引レンジ・スキャンは、TDE列暗号化では実行できません。

Oracle Database 11g リリース2 (11.2)では、TDE表領域暗号化に次の拡張が実装されています。

  • TDE列暗号化とTDE表領域暗号化の両方で、統合マスター暗号化鍵が使用されます。

  • 統合マスター暗号化鍵は再設定できます。これによってセキュリティが強化され、セキュリティ要件やコンプライアンス要件への対応が促進されます。

8.2 透過的データ暗号化の使用

次の各項では、透過的データ暗号化(TDE)の使用方法について説明します。

8.2.1 透過的データ暗号化の有効化

TDE列暗号化は、Oracle Database 10g リリース2 (10.2)で最初に導入されました。この機能を使用するには、Oracle Database 10g リリース2 (10.2)以上を実行する必要があります。

TDE表領域暗号化は、Oracle Database 11g リリース1 (11.1)で導入されました。この機能を使用するには、Oracle Database 11g リリース1 (11.1)以上を実行する必要があります。


注意:

Oracle Database 11g リリース1 (11.1)以上では、JOINSORTなどの操作中に一時表領域のデータを保護することで、より高いセキュリティが確保されます。これらの操作の間、一時表領域のデータは暗号化された状態で存在します。

TDEの使用を開始するには、セキュリティ管理者がウォレットを作成し、マスター鍵を設定する必要があります。ウォレットは、他のOracle Databaseコンポーネントと共有されるデフォルトのデータベース・ウォレットにするか、TDE専用に使用する別のウォレットにできます。マスター暗号化鍵は、独立したウォレットを使用して格納することをお薦めします。

8.2.1.1 透過的データ暗号化用のウォレット・ロケーションの指定

TDE専用のウォレットを使用する場合は、sqlnet.oraファイルでENCRYPTION_WALLET_LOCATIONパラメータを使用して、ウォレット・ロケーションを指定する必要があります。ENCRYPTION_WALLET_LOCATIONパラメータを使用して、TDEのウォレット・ロケーションを指定することをお薦めします。


関連項目:

このパラメータの設定に使用する構文の例は、「サンプルsqlnet.oraファイル」を参照してください。

8.2.1.2 自動ログインが有効なウォレットの使用

外部セキュリティ・モジュールでは、自動ログイン機能を有効化したウォレットを使用できます。このようなウォレットは常に開いたままになります。セキュリティ管理者は、データベース・インスタンスの再起動後にウォレットを再度開く必要はありません。ウォレットを明示的に開くことを義務付けてセキュリティを強化する必要がない環境においては、自動ログイン・ウォレットを使用することもできます。

ローカルの自動ログイン・ウォレットを作成することもできます。ローカルの自動ログイン・ウォレットを別のコンピュータに移動することはできません。それらは作成されたホストで使用する必要があります。


関連項目:

自動ログイン・ウォレットの詳細は、「自動ログイン・ウォレットの使用」を参照してください。


8.2.2 マスター暗号化鍵の設定および再設定

マスター暗号化鍵は外部セキュリティ・モジュールに格納され、表キーと表領域暗号化鍵の保護に使用されます。デフォルトでは、透過的データ暗号化(TDE)によって生成されるランダム鍵がマスター暗号化鍵として使用されます。また、これは、暗号化用に指定されたPKI証明書の既存の鍵ペアにすることもできます。PKI鍵ペアと一緒にTDEを使用する場合は、発行認証局が、暗号化用にマークされた鍵使用方法フィールドを含むX.509v3証明書を発行できる必要があります。


注意:

PKIベースの暗号化は、TDE表領域暗号化やハードウェア・セキュリティ・モジュールとは連携できません。ハードウェア・セキュリティ・モジュールの詳細は、「TDEでのハードウェア・セキュリティ・モジュールの使用」を参照してください。

どちらの鍵タイプも安全性は同様ですが、組織内にすでにPKIをデプロイしている場合は、そのPKIサービスを鍵供託およびリカバリとして活用できます。ただし、現在のPKIアルゴリズムを使用する暗号化では、対称鍵暗号化よりもはるかに多くのシステム・リソースが必要になります。マスター暗号化鍵としてPKI鍵ペアを使用すると、データベース内の暗号化列にアクセスする場合にパフォーマンスが大幅に低下する可能性があります。

マスター暗号化鍵を設定または再設定する(rekey)には、ALTER SYSTEMコマンドを使用します。次の各項では、マスター暗号化鍵の設定および再設定について説明します。

8.2.2.1 マスター暗号化鍵の設定

データベースの列または表領域を暗号化または復号化するには、マスター暗号化鍵を事前に生成しておく必要があります。Oracle Database 11g リリース2 (11.2)では、TDE列暗号化とTDE表領域暗号化の両方で同じマスター暗号化鍵が使用されます。

マスター暗号化鍵を設定するには、次のコマンドを使用します。

SQL> ALTER SYSTEM SET ENCRYPTION KEY ["certificate_ID"] IDENTIFIED BY "password"

各項目の意味は次のとおりです。

  • certificate_IDは、Oracleウォレットに格納されている証明書の一意の識別子を含むオプション文字列です。PKI秘密鍵をマスター暗号化鍵として使用する場合は、このパラメータを使用します。このパラメータにデフォルト設定はありません。certificate_IDは、二重引用符(" ")で囲みます。

    certificate_IDを検索するには、ウォレットが開いているときにV$WALLET固定ビューを問い合せます。TDEでマスター暗号化鍵として使用できる証明書のみが表示されます。

  • passwordは、セキュリティ・モジュールの必須ウォレット・パスワードです。デフォルト設定はありません。大文字と小文字が区別されます。パスワード文字列は、二重引用符(" ")で囲みます。


関連項目:

パスワードの指定に関するルールは、Oracle Database SQLリファレンスを参照してください。

sqlnet.oraパラメータ・ファイルのENCRYPTION_WALLET_LOCATIONパラメータで指定されていウォレット・ロケーションは、マスター暗号化鍵の作成に使用されます。sqlnet.oraファイルにENCRYPTION_WALLET_LOCATIONパラメータが指定されていない場合は、WALLET_LOCATION値が使用されます。ウォレットがまだ存在しない場合は新規に作成されます。

sqlnet.oraファイルでウォレット・ロケーションが指定されていない場合は、デフォルトのデータベース・ウォレット・ロケーションが使用されます。デフォルトのデータベース・ウォレット・ロケーションは、ORACLE_BASE/admin/DB_UNIQUE_NAME/walletまたはORACLE_HOME/admin/DB_UNIQUE_NAME/walletです。ここで、DB_UNIQUE_NAMEは、初期化パラメータ・ファイルで指定されているデータベースの一意の名前です。

想定しているウォレット・ロケーションに既存の自動ログイン・ウォレットが存在する場合、新しいウォレットは作成されません。

8.2.2.2 マスター暗号化鍵の再設定

マスター暗号化鍵の再設定/再生成は、マスター暗号化鍵の安全性が損なわれた場合、または組織のセキュリティ・ポリシーに従う場合にのみ実行します。マスター暗号化鍵を再設定する前に、ウォレットをバックアップする必要があります。

頻繁にマスター暗号化鍵を再生成しても、システム・セキュリティが強化されるとはかぎりません。セキュリティ・モジュールには多数の鍵を格納できます。ただし、この数は無限ではありません。頻繁にマスター暗号化鍵を再生成すると、使用可能な記憶域を使い果たす可能性があります。

マスター暗号化鍵を再設定するには、「マスター暗号化鍵の設定」に記載されているSQL構文を使用します。


注意:

自動ログインを有効化したウォレットのマスター暗号化鍵を再設定する場合、マスター暗号化鍵を再設定するコマンドを発行する前に、拡張子が.ssoである自動ログイン・ウォレットと拡張子が.p12である暗号化ウォレットの両方が存在することを確認する必要があります。

ALTER SYSTEM SET ENCRYPTION KEYコマンドは、ALTER SYSTEM権限が必要なデータ定義言語(DDL)コマンドであり、これによって、保留中のトランザクションがすべて自動的にコミットされます。例8-1に、このコマンドの使用例を示します。

例8-1 PKIベースの秘密鍵を使用するためのマスター暗号化鍵の設定または再設定

SQL> ALTER SYSTEM SET ENCRYPTION KEY "j23lm781098dhb345sm" IDENTIFIED BY "password";

ここで、j23lm781098dhb345smは証明書ID、passwordはウォレット・パスワードです。

PKIベースの鍵の場合、証明書失効リストは適用されません。これは、証明書の失効を強制すると、データベース内の暗号化されたすべての情報にアクセスできなくなる可能性があるためです。ただし、同じ証明書を使用してマスター鍵を再び作成することはできません。

8.2.3 暗号化ウォレットのオープンおよびクローズ

データベースで列/表領域を暗号化または復号化するには、マスター暗号化鍵を事前にメモリーにロードする必要があります。ウォレットを開くと、データベースがマスター暗号化鍵にアクセスできるようになります。ウォレットを明示的に開くには、次のALTER SYSTEMコマンドを使用します。

SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password"

このpasswordは、ウォレットを開くためのパスワードです。パスワード文字列は、二重引用符(" ")で囲みます。


注意:

ウォレットを開くためのパスワードは、マスター暗号化鍵を作成するために指定したパスワードです。詳細は、「マスター暗号化鍵の設定」を参照してください。

ウォレットは、一度開くと、データベース・インスタンスを停止するか、または次のコマンドを発行して明示的に閉じるまで開いたままになります。

SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE IDENTIFIED BY "password"

ウォレットを閉じると、暗号化および復号化のすべての操作が無効化されます。データを暗号化/復号化しようとしたり、暗号化データにアクセスしようとすると、次のエラーが発生します。

ORA-28365: wallet is not open

データベース・インスタンスを再起動するたびに、ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password"コマンドを発行して、暗号化および復号化操作を再度有効化する必要があります。


注意:

自動ログイン・ウォレットは自動的に開くため、明示的に開く必要はありません。

自動ログイン・ウォレットを閉じる必要がある場合は、次のコマンドを使用します。

SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE

自動ログイン・ウォレットを閉じる際にパスワードは不要です。


ユーザーにALTER SYSTEM権限がない場合、ウォレットが使用できない場合、または不正なパスワードが入力された場合、このコマンドはエラーを戻して終了します。ウォレットがすでに開いている場合、このコマンドはエラーを戻し、何も実行しません。例8-2に、それぞれの場合の使用例を示します。

例8-2 ALTER SYSTEMを使用した外部セキュリティ・モジュール・ウォレットのオープン

SQL> --Successfully opening the wallet
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "U83j10LLt8v";
Wallet opened.

SQL> --Trying to open a wallet that is already open 
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "U83j10LLt8v";
ERROR at line 1:
ORA-28354: wallet already open 

SQL> --Trying to open the wallet with an incorrect password
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "U93j10LLt8v";
ERROR at line 1:
ORA-28353: failed to open wallet

8.2.4 表の列の暗号化

次の各項では、TDE列暗号化の使用について説明します。

8.2.4.1 暗号化列を含む表の作成

暗号化列を含むリレーショナル表を作成するには、CREATE TABLE文でデータベース列を定義するときにSQL ENCRYPT句を指定します。

この項の内容は次のとおりです。

8.2.4.1.1 暗号化列を含む表の作成

TDEでは、192ビットの鍵の長さを使用するAES暗号化アルゴリズム(AES192)がデフォルトで使用されます。アルゴリズムを指定せずに表の列を暗号化すると、その列はAES192アルゴリズムを使用して暗号化されます。

TDEでは、暗号化の前にクリアテキストにsaltが追加されます。これによって、攻撃者が総当たり攻撃によってデータを盗むことがより困難になります。また、整合性をチェックするために、TDEによりデータにメッセージ認証コード(MAC)が追加されます。デフォルトでは、SHA-1整合性アルゴリズムが使用されます。


注意:

1つの表に複数の暗号化列がある場合、これらのすべての列で暗号化アルゴリズムと整合性アルゴリズムの同じペアが使用される必要があります。

saltは列レベルで指定されます。つまり、表には、saltが使用される暗号化列と使用されない暗号化列が混在していてもかまいません。


例8-3では、暗号化列を含む新しい表を作成しています。この列は、デフォルトの暗号化アルゴリズム(AES192)を使用して暗号化されます。saltおよびMACはデフォルトで追加されます。

例8-3 デフォルト・アルゴリズム(AES192)を使用する暗号化列を含む新しい表の作成

CREATE TABLE employee (
     first_name VARCHAR2(128),
     last_name VARCHAR2(128),
     empID NUMBER,
     salary NUMBER(6) ENCRYPT
);
8.2.4.1.2 デフォルト以外のアルゴリズムおよびNO SALTを使用する暗号化列を含む表の作成

デフォルトでは、TDEにより暗号化の前にクリアテキストにsaltが追加されます。これによって、攻撃者が総当たり攻撃によってデータを盗むことがより困難になります。ただし、暗号化列を索引付けする場合、NO SALTを使用する必要があります。

TDEでは、デフォルト以外の暗号化アルゴリズムも指定できます。次のいずれかのアルゴリズムを選択できます。

  • 3DES168

  • AES128

  • AES192 (デフォルト)

  • AES256

例8-4に、SQL ENCRYPT句でNO SALTパラメータを指定する方法(empID NUMBER ENCRYPT NO SALT)を示します。また、別の暗号化アルゴリズムを指定するための構文(salary NUMBER(6) ENCRYPT USING '3DES168')も示します。アルゴリズムを指定する文字列は、一重引用符(' ')で囲む必要があることに注意してください。

empID列とsalary列では、同じ3DES168暗号化アルゴリズムが使用されます。これは、表内のすべての暗号化列で同一の暗号化アルゴリズムが使用される必要があるためです。salary列では、デフォルトでsaltが使用されます。empID列にはNO SALTオプションが指定されているため、saltは使用されません。

例8-4 3DES168およびNO SALTを使用する暗号化列を含む新しい表の作成

CREATE TABLE employee (
     first_name VARCHAR2(128),
     last_name VARCHAR2(128),
     empID NUMBER ENCRYPT NO SALT,
     salary NUMBER(6) ENCRYPT USING '3DES168'
);
8.2.4.1.3 NOMACパラメータを使用したディスク領域の節約およびパフォーマンスの向上

NOMACパラメータを使用すると、TDEによって実行される整合性チェックを省略できます。この場合、暗号化された値ごとに20バイトのディスク領域が節約されます。表の行および暗号化列の数が多い場合、これにより節約されるディスク領域はかなりの量になります。

また、NOMACパラメータにより、TDEに関連するパフォーマンスのオーバーヘッドも削減できます。NOMACパラメータを使用すると、暗号化および復号化操作時の整合性チェックが省略されます。これにより、処理循環が短縮され、パフォーマンスが向上します。


注意:

TDEでは、デフォルトでSHA-1整合性アルゴリズムが使用されます。表のすべての暗号化列で同じ整合性アルゴリズムが使用される必要があります。表の列ですでにSHA-1アルゴリズムを使用している場合は、NOMACパラメータによって同じ表の別の列を暗号化することはできません。

ALTER TABLE....REKEY...コマンドを使用して、表内のすべての暗号化列で使用される整合性アルゴリズムを変更できます。この例は、例8-6を参照してください。


例8-5では、暗号化列を含む表を作成しています。empID列は、NOMACパラメータを使用して暗号化されます。

例8-5 CREATE TABLE文でのNOMACパラメータの使用

CREATE TABLE employee (
     first_name VARCHAR2(128),
     last_name VARCHAR2(128),
     empID NUMBER ENCRYPT 'NOMAC' NO SALT ,
     salary NUMBER(6)
);

例8-6に、表内の暗号化列の整合性アルゴリズムを変更する方法を示します。暗号化アルゴリズムを3DES168に、整合性アルゴリズムをSHA-1に設定しています。2番目のALTER TABLE文では、整合性アルゴリズムをNOMACに設定しています。

例8-6 表の整合性アルゴリズムの変更

SQL> ALTER TABLE EMPLOYEE REKEY USING '3DES168' 'SHA-1';

Table altered.
SQL> ALTER TABLE EMPLOYEE REKEY USING '3DES168' 'NOMAC';

Table altered.
8.2.4.1.4 外部表への暗号化列の作成

外部表の機能を使用すると、データベース表内のデータであるかのように、外部ソースのデータにアクセスできます。外部表は、ORACLE_DATAPUMPアクセス・ドライバを使用して更新できます。


関連項目:

スキーマ・オブジェクトおよび表の詳細は、『Oracle Database概要』を参照してください。

外部表の特定の列を暗号化するには、列を定義するときにENCRYPT句を使用します。列の暗号化には、システムで生成された鍵が使用されます。たとえば、次の定義では、3DES168アルゴリズムを使用してssn列を暗号化しています。

CREATE TABLE emp_ext (
    first_name,
    ....
    ssn ENCRYPT USING '3DES168',
    ....
...
...

外部表を新しい場所に移動することを予定している場合、列の暗号化にランダム生成の鍵は使用できません。これは、新しい場所ではランダム生成の鍵が使用できないためです。

このような場合は、列を暗号化する際にパスワードを指定する必要があります。データを移動した後で、同じパスワードを使用して、新しい場所の暗号化列データへのアクセスに必要な鍵を再生成できます。

表パーティション交換でもパスワード・ベースの表キーが必要になります。

例8-7では、表キーを作成するためのパスワードを使用して外部表を作成しています。

例8-7 パスワード生成表キーを使用した新しい外部表の作成

CREATE TABLE emp_ext (
     first_name,
     last_name,
     empID,
     salary,
     ssn ENCRYPT IDENTIFIED BY "xIcf3T9u"
)  ORGANIZATION EXTERNAL
   (
    TYPE ORACLE_DATAPUMP
    DEFAULT DIRECTORY "D_DIR"
    LOCATION('emp_ext.dat')
    )
    REJECT LIMIT UNLIMITED
AS SELECT * FROM EMPLOYEE;

関連項目:

CREATE TABLEENCRYPTおよびパスワードのルールの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

8.2.4.2 既存の表にある列の暗号化

既存の表に暗号化列を追加したり、既存の列を暗号化または復号化するには、ALTER TABLE SQLコマンドをADDまたはMODIFY句とともに使用します。

この項の内容は次のとおりです。

8.2.4.2.1 既存の表への暗号化列の追加

既存の表に暗号化列を追加するには、ALTER TABLE ADDコマンドを使用し、ENCRYPT句で新しい列を指定します。例8-8では、employeeという既存の表に暗号化列ssnを追加しています。

例8-8 既存の表への暗号化列の追加

SQL> ALTER TABLE employee ADD (ssn VARCHAR2(11) ENCRYPT);

ssn列は、デフォルトのAES192アルゴリズムを使用して暗号化されます。saltおよびMACはデフォルトで追加されます。

別のアルゴリズムを使用して列を暗号化することもできます。また、列に索引を付ける場合は、NO SALTを指定できます。

8.2.4.2.2 暗号化されていない列の暗号化

暗号化されていない列を暗号化するには、ALTER TABLE MODIFYコマンドを使用し、ENCRYPT句で暗号化されていない列を指定します。例8-9では、employee表のfirst_name列を暗号化しています。

例8-9 暗号化されていない列の暗号化

SQL> ALTER TABLE employee MODIFY (first_name ENCRYPT);

first_name列は、デフォルトのAES192アルゴリズムを使用して暗号化されます。saltはデフォルトでデータに追加されます。

別のアルゴリズムを使用して列を暗号化することもできます。また、列に索引を付ける場合は、NO SALTを指定できます。NOMACパラメータを使用して、整合性チェックを省略することもできます。例8-10では、NOMACパラメータを使用してemployee表のfirst_name列を暗号化しています。

例8-10 ALTER TABLE文でのNOMACパラメータの使用

SQL> ALTER TABLE employee MODIFY (first_name ENCRYPT 'NOMAC');
8.2.4.2.3 列の暗号化の無効化

互換性やパフォーマンスの理由から、暗号化を無効にすることが必要になる場合があります。列の暗号化を無効にするには、ALTER TABLE MODIFYコマンドを使用し、DECRYPT句を指定します。例8-11では、employee表のfirst_name列を復号化しています。

例8-11 列の暗号化の無効化

SQL> ALTER TABLE employee MODIFY (first_name DECRYPT);

8.2.4.3 暗号化列に対する索引の作成

暗号化列に対して索引を作成するには、標準のCREATE INDEXコマンドを使用します。索引付け対象の列は、saltなしで暗号化されている必要があります。例8-12に、saltなしで暗号化された列に対して索引を作成する方法を示します。

例8-12 saltなしで暗号化された列に対する索引の作成

CREATE TABLE employee (
   first_name VARCHAR2(128),
   last_name VARCHAR2(128),
   empID NUMBER ENCRYPT NO SALT,
   salary NUMBER(6) ENCRYPT USING '3DES168'
);
CREATE INDEX employee_idx on employee (empID);

注意:

saltを使用して暗号化された列に対しては索引を作成できません。作成しようとすると、エラー(ORA-28338)が発生します。

8.2.4.4 暗号化列に対するSaltの追加または削除

ソルトは、暗号化されたデータのセキュリティを強化する方法で、暗号化される前のデータに追加されるランダムな文字列です。これは、暗号化の前にデータに付加されるランダムな文字列です。これにより、同じ平文データが常に同じ暗号化テキストに変換されることがなくなります。saltを追加することで、攻撃者がデータを盗むために使用する一般的な方法の1つである暗号化テキストのパターン一致を排除できます。saltを追加するには、暗号化されたデータ値ごとに16バイトの追加記憶域が必要です。

暗号化列に対してsaltを追加または削除するには、ALTER TABLE MODIFYコマンドを使用します。例8-13では、saltを使用してfirst_name列を暗号化しています。first_name列が以前にsaltなしで暗号化されていた場合は、このコマンドによって、saltを使用して列が再暗号化されます。

例8-13 暗号化列へのsaltの追加

SQL> ALTER TABLE employee MODIFY (first_name ENCRYPT SALT);

例8-14では、first_name列からsaltを削除しています。saltを使用して暗号化された列に索引を付ける必要がある場合は、索引を付ける前に、このコマンドを使用してsaltを削除します。

例8-14 暗号化列からのsaltの削除

SQL> ALTER TABLE employee MODIFY (first_name ENCRYPT NO SALT);

8.2.4.5 暗号化列を含む表に対する暗号化鍵またはアルゴリズムの変更

各表の列には1つの表キーのみ指定できます。表キーはALTER TABLEコマンドを使用して再生成できます。新しい表キーに対して別の暗号化アルゴリズムを使用することを選択することもできます。

例8-15では、employee表に対する表キーを再生成しています。

例8-15 暗号化列を含む表での暗号化鍵の変更

SQL> ALTER TABLE employee REKEY;

例8-16では、3DES168アルゴリズムを使用してemployee表に対する表キーを再生成しています。

例8-16 暗号化列を含む表での暗号化鍵およびアルゴリズムの変更

SQL> ALTER TABLE employee REKEY USING '3DES168';

8.2.4.6 TDE列暗号化で暗号化できるデータ型

この機能では、次のデータ型を暗号化できます。

  • BINARY_DOUBLE

  • BINARY_FLOAT

  • CHAR

  • DATE

  • INTERVALDAYTOSECOND

  • INTERVALYEARTOMONTH

  • LOB (内部LOBおよびSECUREFILE LOBのみ)

  • NCHAR

  • NUMBER

  • NVARCHAR2

  • RAW

  • TIMESTAMP (TIMESTAMP WITH TIME ZONEおよびTIMESTAMP WITH LOCAL TIME ZONEを含む)

  • VARCHAR2

暗号化列のサイズが列のデータ型で許容されるサイズより大きくなる場合は、列を暗号化できません。表8-1に、各種データ型の最大許容サイズを示します。

表8-1 各データ型の最大許容サイズ

データ型 最大サイズ

CHAR

1932バイト

VARCHAR2

3932バイト

NVARCHAR2

1966バイト

NCHAR

966バイト



注意:

TDE表領域暗号化には、これらのデータ型制限はありません。

8.2.4.7 TDE列暗号化の使用に関する制限

TDE列暗号化では、SQLレイヤーでデータの暗号化と復号化を処理します。したがって、SQLレイヤーをバイパスするOracle Databaseのユーティリティや機能では、TDE列暗号化によるサービスを利用できません。TDE列暗号化は、次のデータベース機能と併用しないでください。

  • Bツリー以外の索引タイプ

  • 索引内のレンジ・スキャン検索

  • 外部ラージ・オブジェクト(BFILE)

  • 同期チェンジ・データ・キャプチャ

  • トランスポータブル表領域

  • オリジナルのインポート/エクスポート・ユーティリティ

また、TDE列暗号化では、外部キー制約で使用される列は暗号化できません。


注意:

Oracle Database 10g リリース2 (10.2)のTDEでは、BLOBCLOBなどのラージ・オブジェクト(LOB)データ型はサポートされていませんでした。Oracle Database 11gのTDEでは、BLOBCLOBなどの内部ラージ・オブジェクト・データ型がサポートされています。ただし、外部LOB (BFILE)は暗号化できません。

サポート対象外のこれらの機能が必要なアプリケーションでは、DBMS_CRYPTOパッケージを使用して暗号化を実行できます。


関連項目:

『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_CRYPTOに関する項を参照してください。

TDEでは、ディスクやメディアに格納されているデータを保護します。転送中のデータは保護対象外です。ネットワーク上のデータを暗号化するには、第2章「構成ツールと管理ツールの概要」に記載されているOracle Advanced Securityのネットワーク暗号化ソリューションを使用してください。

8.2.5 表領域全体の暗号化

TDE表領域暗号化を使用するには、Oracle Database 11g リリース1 (11.1)以上を実行する必要があります。以前のリリースからアップグレードした場合は、データベースの互換性が11.0.0以上に設定されています。

Oracle Database 11g リリース2 (11.2)の強化された表領域暗号化機能を使用するには、データベースの互換性を11.2以上に設定する必要があります。


注意:

COMPATIBLE初期化パラメータを使用して更新したデータベース互換性を元に戻すことはできません。

次の手順では、TDE表領域暗号化の使用方法について説明します。

8.2.5.1 表領域マスター暗号化鍵の設定

表領域を暗号化または復号化するには、マスター暗号化鍵を事前に生成または設定しておく必要があります。表領域のマスター暗号化鍵は外部セキュリティ・モジュールに格納され、TDE表領域暗号化鍵を暗号化する際に使用されます。

sqlnet.oraファイルのENCRYPTION_WALLET_LOCATION (またはWALLET_LOCATION)パラメータが正しいソフトウェア・ウォレット・ロケーションを指し示していることを確認してください。次に例を示します。

ENCRYPTION_WALLET_LOCATION=
  (SOURCE=(METHOD=FILE)(METHOD_DATA=
   (DIRECTORY=/app/wallet)))

Oracle Database 11g リリース2 (11.2)では、TDE列暗号化とTDE表領域暗号化の両方で同じマスター暗号化鍵が使用されます。ALTER SYSTEM SET ENCRYPTION KEYコマンドを発行すると、TDE列暗号化とTDE表領域暗号化の両方に対して統合マスター暗号化鍵が作成されます。マスター暗号化鍵の作成の詳細は、「マスター暗号化鍵の設定」を参照してください。

Oracle Database 10g リリース2 (10.2)でTDEをすでに使用していて、その後データベースを11g リリース2 (11.2)にアップグレードした場合は、ALTER SYSTEM SET ENCRYPTION KEYコマンドを再発行して、統合マスター暗号化鍵を作成する必要があります。

Oracle Database 11g リリース1 (11.1)でTDE表領域暗号化をすでに使用していて、その後データベースを11g リリース2 (11.2)にアップグレードした場合は、TDE列暗号化とTDE表領域暗号化に対して個別のマスター暗号化鍵を使用します。ALTER SYSTEM SET ENCRYPTION KEYコマンドを再発行して、統合マスター暗号化鍵を作成する必要があります。

8.2.5.1.1 表領域マスター暗号化鍵の再設定

Oracle Database 11g リリース2 (11.2)では、TDE列暗号化とTDE表領域暗号化の両方で統合マスター暗号化鍵が使用されます。TDE列暗号化用にマスター暗号化鍵を再設定する(rekey)と、TDE表領域暗号化用のマスター暗号化鍵も再設定されます。

ALTER SYSTEM SET ENCRYPTION KEYコマンドを使用すると、表領域のマスター暗号化鍵が再設定されます。マスター暗号化鍵の再設定の詳細は、「マスター暗号化鍵の設定および再設定」を参照してください。

8.2.5.2 Oracleウォレットのオープン

暗号化された表領域を作成するには、表領域のマスター暗号化鍵が格納されているOracleウォレットを事前に開く必要があります。また、このウォレットは、暗号化された表領域のデータにアクセスする前に開いている必要があります。Oracleウォレットを開く方法の詳細は、「暗号化ウォレットのオープンおよびクローズ」を参照してください。


注意:

セキュリティ管理者は、Oracleインスタンスを開始した後にOracleウォレットを開く必要があります。Oracleインスタンスを再開するには、セキュリティ管理者がウォレットを再度開く必要があります。

セキュリティ管理者は、データベースのリカバリ操作を実行する前にもウォレットを開く必要があります。これは、バックグラウンド・プロセスで、暗号化されたREDOログおよびUNDOログへのアクセスが必要になる可能性があるためです。データベースのリカバリを実行するときは、データベースを開く前にウォレットを開く必要があります。次に例を示します。

SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password";
SQL> ALTER DATABASE OPEN;

ウォレットを明示的に開くことを義務付けてセキュリティを強化する必要がない環境においては、自動ログイン・ウォレットを使用することを選択することもできます。

8.2.5.3 暗号化された表領域の作成

暗号化された表領域は、CREATE TABLESPACEコマンドを使用して作成できます。permanent_tablespace_clauseを使用すると、暗号化アルゴリズムと暗号化鍵の長さを選択できます。表領域を暗号化するには、storage_clauseでENCRYPTキーワードを使用します。次の構文はこのことを示しています。

CREATE
   [ BIGFILE | SMALLFILE ]
   { permanent_tablespace_clause
   | temporary_tablespace_clause
   | undo_tablespace_clause
   } ;

説明は次のとおりです。

permanent_tablespace_clause=
TABLESPACE tablespace
.........
ENCRYPTION [USING algorithm]
.........
storage_clause
.........

説明は次のとおりです。

storage_clause=
.........
[ENCRYPT]
.........

この場合、

algorithmには、次のいずれかの値を指定できます。

  • 3DES168

  • AES128

  • AES192

  • AES256

鍵長は、アルゴリズム自体の名前に含まれています。暗号化アルゴリズムを指定しないと、デフォルトの暗号化アルゴリズムが使用されます。デフォルトの暗号化アルゴリズムはAES128です。


注意:

  • permanent_tablespace_clauseENCRYPTIONキーワードによって、暗号化アルゴリズムを指定します。storage_clauseENCRYPTキーワードによって、表領域を実際に暗号化します。

  • セキュリティ上の理由から、表領域の暗号化ではNO SALTオプションを使用できません。



関連項目:

CREATE TABLESPACEコマンドの構文は、Oracle Database SQLリファレンス・ガイドを参照してください。

例8-17では、securespaceという表領域を作成しています。この表領域は、3DESアルゴリズムを使用して暗号化されます。鍵長は168ビットです。

例8-17 暗号化された表領域の作成

CREATE TABLESPACE securespace
DATAFILE '/home/user/oradata/secure01.dbf'
SIZE 150M
ENCRYPTION USING '3DES168'
DEFAULT STORAGE(ENCRYPT);

例8-18では、securespace2という表領域を作成しています。暗号化アルゴリズムの指定がないため、デフォルトの暗号化アルゴリズム(AES128)が使用されます。鍵長は128ビットです。

例8-18 暗号化された表領域の作成

CREATE TABLESPACE securespace2
DATAFILE '/home/user/oradata/secure01.dbf'
SIZE 150M
ENCRYPTION
DEFAULT STORAGE(ENCRYPT);

次のデータ・ディクショナリ・ビューには、表領域の暗号化ステータスに関する情報が保持されます。次のビューを問い合せて、表領域が暗号化されたことを確認できます。

  • DBA_TABLESPACES: ENCRYPTED列に、表領域が暗号化されているかどうかが表示されます。

  • USER_TABLESPACES: ENCRYPTED列に、表領域が暗号化されているかどうかが表示されます。


関連項目:

これらのデータ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

既存の表領域は暗号化できません。ただし、Oracle Data Pumpユーティリティを使用して、暗号化された表領域にデータをインポートすることはできます。CREATE TABLE...AS SELECT...ALTER TABLE...MOVE...などのSQLコマンドを使用して、暗号化された表領域にデータを移動することもできます。CREATE TABLE...AS SELECT...コマンドでは、表を既存の表から作成できます。ALTER TABLE...MOVE...コマンドでは、表を暗号化された表領域に移動できます。


関連項目:

CREATE TABLEおよびALTER TABLEコマンドの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

8.2.5.4 TDE表領域暗号化の使用に関する制限

TDE表領域暗号化では、読取り/書込み操作中にデータを暗号化または復号化します。対照的に、TDE列暗号化では、SQLレイヤーでデータを暗号化または復号化します。このことは、データ型制限、索引タイプ制限など、TDE列暗号化に適用される制限のほとんどが、TDE表領域暗号化には適用されないことを意味します。

次のリストは、TDE表領域暗号化に適用される制限を示します。

  • TDE表領域暗号化を使用して外部ラージ・オブジェクト(BFILE)を暗号化することはできません。これらのファイルはデータベース外部に存在するためです。

  • インポートおよびエクスポート操作を実行するには、Oracle Data Pumpを使用します。

8.2.6 TDEでのハードウェア・セキュリティ・モジュールの使用

ハードウェア・セキュリティ・モジュール(HSM)は、暗号化鍵のために安全な記憶域を提供する物理的なデバイスです。また、暗号化および復号化操作を実行するための安全な計算領域(メモリー)も提供します。HSMは、Oracleウォレットにかわる安全性の高い代替手段です。

TDEでは、HSMを使用して機密データのセキュリティを強化できます。HSMは、TDEに使用されるマスター暗号化鍵の格納に使用されます。HSMは物理的なデバイスであり、オペレーティング・システム・ファイルではないため、鍵は不正アクセス試行から保護されます。マスター暗号化鍵を使用する暗号化および復号化操作はすべて、HSMの内部で実行されます。これは、安全性の低いメモリーにマスター暗号化鍵がさらされないことを意味します。

HSMを使用するには、HSMデバイスの初期設定が必要になります。また、HSMを使用するようにTDEを構成する必要もあります。初期設定が終了したら、HSMをOracleソフトウェア・ウォレットと同様に使用できます。次の手順では、ハードウェア・セキュリティ・モジュールの構成および使用について説明します。

  1. sqlnet.oraファイルでのENCRYPTION_WALLET_LOCATIONパラメータの設定

  2. 正しいパスへのPKCS#11ライブラリのコピー

  3. HSMの設定

  4. HSMベースの暗号化のためのマスター暗号化鍵の生成

  5. ソフトウェア・ウォレットの再構成(オプション)

  6. HSMがアクセス可能であることの確認

  7. データの暗号化と復号化

8.2.6.1 sqlnet.oraファイルでのENCRYPTION_WALLET_LOCATIONパラメータの設定

ENCRYPTION_WALLET_LOCATIONパラメータでは、Oracleウォレットの場所を指定します。ソフトウェア・ウォレットのかわりにHSMが使用されるようにするには、このパラメータを変更する必要があります。

ENCRYPTION_WALLET_LOCATIONパラメータを設定するには、次の手順を実行します。

  1. sqlnet.oraファイルを開きます。このファイルは、$ORACLE_HOME/network/adminディレクトリにあります。

  2. 次のように、sqlnet.oraファイルにENCRYPTION_WALLET_LOCATIONパラメータを追加します。

    ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=HSM))
    

    sqlnet.oraファイルにENCRYPTION_WALLET_LOCATIONパラメータがすでに指定されている場合は、METHOD値をHSMに変更します。

    ENCRYPTION_WALLET_LOCATION=
      (SOURCE=(METHOD=HSM)(METHOD_DATA=
        (DIRECTORY=/app/wallet)))
    

    注意:

    ENCRYPTION_WALLET_LOCATIONパラメータにDIRECTORY値が指定されている場合は、その値を削除しないでください。DIRECTORY値はHSMには不要ですが、HSMベースの透過的データ暗号化に移行する場合は、この値を使用して古いソフトウェア・ウォレットの場所が特定されます。また、DIRECTORY値は、Recovery Manager (RMAN)などのツールでソフトウェア・ウォレットの場所を特定するために必要になる場合があります。

  3. ファイルを保存して閉じます。

8.2.6.2 正しいパスへのPKCS#11ライブラリのコピー

関連するPKCS#11ライブラリは、HSMベンダーによって提供されます。このライブラリは、データベースが検出できるように、特定のディレクトリ構造にコピーする必要があります。UNIXおよびWindowsでは、次のディレクトリ構造をそれぞれ使用します。

/opt/oracle/extapi/[32,64]/hsm/{VENDOR}/{VERSION}/libapiname.ext 

%SYSTEM_DRIVE%\oracle\extapi\[32,64]\hsm\{VENDOR}\{VERSION}\libapiname.ext

この場合、

[32,64]には、提供されるバイナリが32ビットか64ビットかを指定します。

VENDORは、ライブラリを提供しているベンダー名を表します。

VERSIONは、ライブラリのバージョンを表します。なるべく、number.number.numberの形式を使用してください。

apinameには、特に決まった形式はありません。ただし、構文に示すように、apinameの前にはlibという語を付ける必要があります。

.extは、ライブラリ・ファイルの拡張子で置換する必要があります。この拡張子は、Unixの場合は.soです。


注意:

一度にサポートされるのは、1つのPKCS#11ライブラリのみです。新しいベンダーのHSMを使用する場合は、PKCS#11ライブラリを以前のベンダーのものから新しいベンダーのものに置換してください。

8.2.6.3 HSMの設定

HSMインタフェースを設定するための指示は、HSMベンダーによって提供されます。HSM管理インタフェースを使用し、ベンダーの指示に従ってHSMを設定してください。データベースでHSMとの相互作用に使用されるユーザー・アカウントとパスワードを作成します。


注意:

HSMは、HSM管理者またはTDEの管理を担当するセキュリティ管理者が設定します。

8.2.6.4 HSMベースの暗号化のためのマスター暗号化鍵の生成

HSMベースの暗号化を初めて使用する際には、HSM内部に格納されるマスター暗号化鍵を作成する必要があります。マスター暗号化キーは、HSM内の表キーを暗号化または復号化するために使用されます。

マスター暗号化鍵を作成するには、次のコマンドを使用します。

SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "user_Id:password" [MIGRATE USING "wallet_password"]

この場合、

user_Idは、HSM管理インタフェースを使用してデータベースに対して作成したユーザーIDです。

passwordは、HSM管理インタフェースを使用してユーザーIDに対して作成したパスワードです。user_Id:password文字列は、二重引用符(" ")で囲みます。

wallet_passwordは、ファイル・システム上の既存のOracleウォレットを開く際に必要なパスワードです。wallet_password文字列は、二重引用符(" ")で囲みます。


注意:

user_Idpasswordは自動的には作成されません。これらは、ALTER SYSTEM SET ENCRYPTION KEYコマンドを発行する前に、HSM管理インタフェースを使用して設定しておく必要があります。これは、Oracleウォレットに使用される手順とは異なります。Oracleウォレットの場合、ALTER SYSTEM SET ENCRYPTION KEYコマンドを発行する前の事前設定は不要です。

透過的データ暗号化をすでに使用していて、HSMを使用していない場合は、前述のコマンドでMIGRATE USING wallet_password句を使用する必要があります。この句は、既存の表キーを復号化して、新しく作成したHSMベースのマスター暗号化キーで再度暗号化します。


注意:

データベースに公開鍵によって暗号化された列が含まれている場合は、その列が復号化されてから、HSMベースの透過的データ暗号化によって生成されたAES対称鍵を使用して再暗号化されます。

8.2.6.5 ソフトウェア・ウォレットの再構成(オプション)

この手順は、暗号化データをエクスポートした場合、またはソフトウェア・ウォレットを使用して暗号化バックアップを作成した場合に適用されます。Oracle Data PumpやRecovery Managerなどのツールでは、ソフトウェア・ウォレットを使用してエクスポートまたはバックアップしたデータに対して復号化および暗号化の操作を実行する際に、古いソフトウェア・ウォレットにアクセスする必要があります。

ソフトウェア・ウォレットを再構成するには、次のいずれかのアプローチを使用します。

  • ウォレット・パスワードをHSMのuserId:password文字列に変更します。この場合、

    user_Idは、HSM管理インタフェースを使用してデータベースに対して作成したユーザーIDです。

    passwordは、HSM管理インタフェースを使用してユーザーIDに対して作成したパスワードです。user_Id:password文字列は、二重引用符(" ")で囲みます。

    ソフトウェア・ウォレットのパスワードは、Oracle Wallet Managerまたはorapkiコマンドライン・ユーティリティを使用して変更します。SQL*Plusは、ウォレット・パスワードの変更には使用できません。


    関連項目:

    ウォレット・パスワードの変更の詳細は、「パスワードの変更」を参照してください。

  • 自動ログイン・ウォレットを使用することもできます。自動ログイン・ウォレットのファイルは、.ssoの拡張子で識別されます。自動ログイン・ウォレットは、ウォレットを明示的に開くことを義務付けてセキュリティを強化する必要がない環境でのみ使用してください。

    ローカルの自動ログイン・ウォレットを作成することもできます。ローカルの自動ログイン・ウォレットを別のコンピュータに移動することはできません。それらは作成されたホストで使用する必要があります。


    関連項目:


8.2.6.6 HSMがアクセス可能であることの確認

セキュリティ管理者は、暗号化または復号化を実行する前に、HSMがデータベースにアクセスできることを確認する必要があります。これは、Oracleウォレットのオープンに類似しています。HSMをアクセス可能にするには、次のコマンドを使用します。

SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "user_Id:password"

この場合、

user_Idは、HSM管理インタフェースを使用してデータベースに対して作成したユーザーIDです。

passwordは、HSM管理インタフェースを使用してユーザーIDに対して作成したパスワードです。

user_Id:password文字列は、二重引用符(" ")で囲みます。


注意:

HSMへのアクセスは、データベース・インスタンスが再開されるたびに再度有効化する必要があります。

セキュリティ管理者は、ALTER SYSTEM SET ENCRYPTION WALLET CLOSE IDENTIFIED BY "user_Id:password"コマンドを使用してHSMへのアクセスを無効化できます。これによって、HSMでの暗号化および復号化のすべての操作が無効化されます。データベース・ユーザーやアプリケーションは、ウォレットが再度開くまで、暗号化データに関係する操作を実行できません。たとえば、HSMがアクセス可能でない場合、次の操作は失敗します。

  • 暗号化列からのデータの選択(SELECT)

  • 暗号化列に対するデータの挿入(INSERT)

  • 暗号化列を含む表の作成(CREATE)

  • 列の暗号化プロパティの変更(ALTER)

  • 暗号化された表領域の作成(CREATE)

8.2.6.7 データの暗号化と復号化

HSMの使用はエンド・ユーザーに透過的です。暗号化列を含む表を作成するコマンド、暗号化データにアクセスするコマンド、またはデータを復号化するコマンドは、マスター暗号化鍵がOracleウォレットにある場合もHSMにある場合も同じです。

8.2.7 Oracle RACでの透過的データ暗号化の使用

Oracle Database 11g リリース2 (11.2)を使用すると、Oracle Real Application Clusters (RAC)ノードでウォレットを共有できます。これによって、すべてのノードにウォレットを手動でコピーし同期化する必要がなくなります。ウォレットは、共有ファイル・システムで作成することをお薦めします。こうすることで、すべてのインスタンスが同じ共有ウォレットにアクセスできるようになります。

ある1つのOracle RACインスタンスで実行されるウォレットのオープン、クローズなどのウォレット操作は、他のすべてのOracle RACインスタンスに適用されます。つまり、ユーザーが1つのインスタンスに対して開閉したウォレットは、すべてのOracle RACインスタンスに対して開閉します。

共有ファイル・システムを使用する場合、すべてのOracle RACインスタンスのENCRYPTION_WALLET_LOCATIONまたはWALLET_LOCATIONパラメータが同じ共有ウォレット・ロケーションを指していることを確認する必要があります。セキュリティ管理者は、適切なディレクトリ権限を割り当てて、共有ウォレットのセキュリティを確保する必要もあります。

ある1つのインスタンスで実行されるmaster key rekeyは、すべてのインスタンスに適用されます。新しいOracle RACノードは、構成されると、現在のウォレットのステータス(オープンまたはクローズ)を認識します。

8.2.7.1 非共有ファイル・システムを使用したウォレットの格納

ウォレットの格納に共有ファイル・システムを使用しない場合は、マスター鍵を再設定した後、ウォレットをすべてのノードにコピーする必要があります。データベースのマスター暗号化鍵を再設定する必要がある場合は、次の手順を実行します。

  1. 最初のOracle RACノードのマスター暗号化鍵を再設定します。次のコマンドを使用します。詳細は、「マスター暗号化鍵の設定および再設定」を参照してください。

  2. 新しいマスター暗号化鍵が格納されたウォレットを最初のノードから他のすべてのノードにコピーします。

  3. 任意のノードのウォレットを閉じてから再度開きます。次のコマンドを使用します。

    SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE IDENTIFIED BY "password";
    SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password";
    

    注意:

    ある1つのOracle RACインスタンスで実行されるウォレットのオープン、クローズなどのウォレット操作は、他のすべてのOracle RACインスタンスに適用されます。これは、共有ファイル・システムを使用していない場合にも当てはまります。

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

8.3 透過的データ暗号化の管理

この項の内容は次のとおりです。

8.3.1 Oracleウォレットの管理

透過的データ暗号化(TDE)では、マスター暗号化鍵はOracleウォレット内に格納されます。ウォレットは、セキュリティ管理者が明示的に開くことを必要としないで、暗号化データにアクセスできる自動ログイン・ウォレットにすることもできます。

8.3.1.1 透過的データ暗号化用の別のウォレットの指定

TDEでは、使用するウォレットを決定する際、最初にパラメータENCRYPTION_WALLET_LOCATIONで指定されているウォレットの使用が試行されます。このパラメータが設定されていない場合は、パラメータWALLET_LOCATIONで指定されているウォレットの使用が試行されます。このことも失敗した場合は、TDEによりデフォルトのデータベースの場所でウォレットが検索されます。

TDEで使用されるマスター暗号化鍵の格納には、別のウォレットを使用することをお薦めします。別のウォレットを指定するには、sqlnet.oraファイルのENCRYPTION_WALLET_LOCATIONパラメータが、TDE専用のウォレットを指すように設定します。


関連項目:

このパラメータの設定に使用する構文の例は、「サンプルsqlnet.oraファイル」を参照してください。

8.3.1.2 自動ログイン・ウォレットの使用

自動ログイン・ウォレットは、Oracle Wallet Managerまたはorapkiコマンドライン・ユーティリティを使用して作成できます。自動ログイン・ウォレットを使用すると、データベース・インスタンスの再起動をまたいで暗号化データにアクセスすることが容易になります。


注意:

自動ログイン・ウォレット(.ssoファイル)を作成した後、PKCS#12ウォレット(ewallet.p12ファイル)を削除しないでください。将来、PKCS#12ウォレットでマスター暗号化鍵を再生成/再設定する必要があります。

TDEで自動ログイン・ウォレットが使用されるのは、その自動ログイン・ウォレットが正しい場所(ENCRYPTION_WALLET_LOCATIONWALLET_LOCATIONまたはデフォルトのウォレット・ロケーション)にあり、暗号化ウォレットを開くSQLコマンドがまだ実行されていない場合のみです。自動ログイン・ウォレットの使用中は、ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password"コマンドを使用しないでください。


関連項目:


8.3.1.3 ウォレットの作成

ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "password"コマンドを使用してマスター暗号化鍵を作成すると、TDEによって、ウォレットがデフォルトまたは指定の場所に存在しているかどうかがチェックされます。ウォレットが存在しない場合は、自動的に作成されます。

SQLコマンド以外に、Oracle Wallet Managerを使用してウォレットを作成することもできます。Oracle Wallet Managerは、ウォレットの作成とそのコンテンツの表示および変更が可能なフル機能のツールです。

orapkiコマンドのようなユーティリティを使用してウォレットを作成することもできます。

8.3.2 マスター暗号化鍵のバックアップおよびリカバリ

この項の内容は次のとおりです。

8.3.2.1 Oracleウォレットのバックアップおよびリカバリ

暗号化データには、マスター暗号化鍵なしでアクセスすることはできません。マスター暗号化鍵はOracleウォレットに格納されるため、ウォレットは安全な場所に定期的にバックアップする必要があります。新しいマスター暗号化鍵を設定するたびにウォレットのバックアップ・コピーを作成する必要があります。

Oracleウォレットは、暗号化データと一緒にバックアップしないでください。ウォレットは個別にバックアップする必要があります。自動ログイン・ウォレットを使用している場合は、開くときにパスワードが要求されないため、特に注意してください。バックアップ・テープの紛失に備えて、悪意のあるユーザーが暗号化データとウォレットの両方を取得できないようにすることが大切です。

Recovery Manager (RMAN)では、ウォレットはデータベース・バックアップの一環としてバックアップされません。Oracle Secure Backup (OSB)などのメディア・マネージャをRMANと併用している場合は、OSBによって、自動オープン・ウォレット(cwallet.ssoファイル)がバックアップ対象から自動的に除外されます。ただし、暗号化ウォレット(ewallet.p12ファイル)は自動的には除外されません。次のexcludeデータセット文をOSB構成に追加することをお薦めします。

exclude name *.p12

この文では、バックアップ・セットから暗号化ウォレットを除外するようにOSBに指示します。

マスター暗号化鍵を格納しているウォレットを喪失した場合は、ウォレットのバックアップを適切な場所にコピーすることで、暗号化データへのアクセスをリストアできます。リストアしたウォレットがマスター暗号化鍵の前回の再設定後にアーカイブされたものである場合、追加処置の必要はありません。

リストアしたウォレットに最新のマスター暗号化鍵が含まれていない場合に、古いデータをマスター暗号化鍵が再設定された時点までリカバリするには、データベースの状態をその時点までロールバックします。マスター暗号化鍵の再設定後に暗号化列に対して行われた変更はすべて失われます。

8.3.2.2 PKI鍵ペアのバックアップおよびリカバリ

TDE列暗号化では、マスター暗号化鍵としてPKI非対称鍵ペアを使用できます。これにより、主要な認証局ベンダーの既存の鍵のバックアップ、供託およびリカバリ機能を活用できます。

現在の鍵供託またはリカバリ・システムでは、秘密鍵のバージョンまたは秘密鍵のリカバリに役立つ情報は、通常、鍵のリカバリ機能を提供する認証局に保管されます。秘密鍵が失われた場合、ユーザーは、認証局に連絡し、鍵のリカバリ・プロセスを開始することで、元の鍵および証明書をリカバリできます。

通常、鍵のリカバリ・プロセスは自動化されており、ユーザーは認証局に対して特定の認証資格証明を提示する必要があります。リカバリ対象となる鍵およびその関連証明書が、Oracleウォレットにインポート可能なPKCS#12ファイルである必要があることを除き、TDEでは、鍵のリカバリ・プロセスに制限を設けていません。この要件は、主要な認証局の鍵のリカバリ・メカニズムと同じです。

元の証明書および秘密鍵を含むPKCS#12ファイルの取得後は、以前のウォレットと同じ場所に新しい空のウォレットを作成する必要があります。このためには、Oracle Wallet Managerを使用できます。その後、同じユーティリティを使用してPKCS#12ファイルをウォレットにインポートできます。ウォレットを保護するために強力なパスワードを選択する必要があります。

ウォレットが作成され、正しい証明書がインポートされた後、データベースにログオンし、SQLプロンプトで次のコマンドを実行してリカバリ・プロセスを完了します。

SQL> ALTER SYSTEM SET ENCRYPTION KEY "certificate_id" IDENTIFIED BY "wallet_password"

ウォレット内の証明書のcertificate_idを取得するには、ウォレットが開いてからV$WALLET固定ビューを問い合せます。

8.3.3 暗号化列を含む表のエクスポートおよびインポート

暗号化列を含む表をエクスポートする場合は、次の点が重要になります。

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

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

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

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

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

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

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

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

次の手順では、ENCRYPTION=ENCRYPTED_COLUMNS_ONLYを使用して、暗号化列を含む表をエクスポートおよびインポートする方法について説明します。

  1. 暗号化列を含む表をエクスポートする前に、暗号化ウォレットが開いていることを確認する必要があります。これは、暗号化列の復号化には表キーを使用する必要があり、そのためにはマスター暗号化鍵にアクセスする必要があるためです。列は、エクスポートされる前にパスワードを使用して再暗号化されます。

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

    expdp hr TABLES=employee_data DIRECTORY=dpump_dir
    DUMPFILE=dpcd2be1.dmp ENCRYPTION=ENCRYPTED_COLUMNS_ONLY
    ENCRYPTION_PASSWORD=PWD2encrypt
    
    Password: password_for_hr
    
  3. ターゲット・データベースにデータをインポートする際は、同じパスワードを指定する必要があります。このパスワードは、データの復号化に使用されます。データは、ターゲット・データベースに生成された新しい表キーを使用して再暗号化されます。ターゲット・データベースがマスター暗号化鍵にアクセスするためには、ウォレットが開いている必要があります。次に、employee_data表をインポートする例を示します。

    impdp hr TABLES=employee_data DIRECTORY=dpump_dir DUMPFILE=dpcd2be1.dmp ENCRYPTION_PASSWORD=PWD2encrypt
    
    Password: password_for_hr
    

Oracle Database 11g リリース2 (11.2)では、Oracle Data Pumpの機能が拡張されています。透過的データ暗号化列のみの暗号化とは対照的に、ダンプ・セット全体を暗号化できます。ENCRYPTION_MODEパラメータを使用して、暗号化モードを指定できます。

ENCRYPTION_MODE=DUALを使用すると、ウォレットに格納されているマスター鍵と指定したパスワードによってダンプ・セットが暗号化されます。次に、dual暗号化モードの使用例を示します。

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

Password: password_for_hr

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

ENCRYPTION_MODE=TRANSPARENTを使用すると、ウォレットに格納されているマスター暗号化鍵を使用してダンプ・ファイル・セットを透過的に暗号化できます。この場合、パスワードは不要です。インポートの過程で復号化が正常に実行されるのは、ターゲット・データベースにウォレットが存在し、開いている場合のみです。この開いているウォレットは、ターゲット・データベースで列暗号化データを再暗号化する際にも必要です。


関連項目:

  • Oracle Data Pumpおよび関連する暗号化パラメータの使用方法の詳細は、Oracle Databaseユーティリティ・ガイドのデータ・ポンプの概要、データ・ポンプ・エクスポートおよびデータ・ポンプ・インポートに関する項を参照してください。

  • 「外部表への暗号化列の作成」


8.3.4 パフォーマンスと記憶域のオーバーヘッド

透過的データ暗号化(TDE)に関連するオーバーヘッドは、次のように分類されます。

8.3.4.1 パフォーマンスのオーバーヘッド

TDE表領域暗号化には、わずかなオーバーヘッドが伴います。アプリケーションのパフォーマンスに対する実際の影響は様々ですが、約5%から8%までと推定されます。

TDE列暗号化がパフォーマンスに影響を与えるのは、暗号化列に対してデータの取得または挿入が行われた場合のみです。暗号化されていない列に関係する操作の場合は、これらの列が暗号化列を含む表内にあっても、パフォーマンスが低下することはありません。

暗号化列のデータへのアクセスには、わずかなオーバーヘッドが伴います。一般的な属性(クレジット・カード番号など)の暗号化または復号化に関連するオーバーヘッドは、約5%と推定されます。これは、SELECT操作(復号化に必要)またはINSERT操作(暗号化に必要)で、クリアテキスト・データで取得する場合よりも約5%長い時間が必要になることを意味します。

全体的なパフォーマンスのオーバーヘッドは、暗号化列の数とそのアクセス頻度によって異なります。暗号化するのが最も妥当な列は、最高機密のデータを含む列です。

既存の表で暗号化を有効化すると、表の特性を変更する他のALTER TABLE操作と同様に、完全な表更新が行われます。管理者は、大規模な既存の表で暗号化を有効化する前に、データベース・サーバーに与えるパフォーマンスおよびREDOログの潜在的な影響を考慮する必要があります。

表に対する書込み操作は、暗号化の有効化中、表キーの再設定中または暗号化アルゴリズムの変更中は一時的に実行できなくなる場合があります。このような処理が実行されている場合は、表のオンライン再定義を使用して、表への書込み操作が可能かどうかを確認できます。


関連項目:

『Oracle Database管理者ガイド』のオンラインでの表の再定義に関する項を参照してください。

大規模な表に対してTDE列暗号化を有効化している場合は、操作に対応できるよう、REDOログのサイズを大きくする必要があることがあります。

索引付けされた列の暗号化には、索引のない列の暗号化よりも多くの時間を要することもすでに判明しています。索引が作成された列を暗号化する必要がある場合は、索引を削除してから列をNO SALTで暗号化し、その後で索引を再度作成できます。

暗号化列に索引を付ける場合、索引は暗号化された値に対して作成されます。暗号化列の値を問い合せると、SQL問合せで使用される値が透過的に暗号化されます。その後、暗号化された値を使用して、索引の参照が実行されます。


注意:

索引付けされた暗号化列のレンジ・スキャンを実行する必要がある場合は、TDE列暗号化のかわりにTDE表領域暗号化を使用します。

8.3.4.2 記憶域のオーバーヘッド

TDE表領域暗号化には、記憶域のオーバーヘッドはありません。ただし、TDE列暗号化には、記憶域のオーバーヘッドが多少伴います。暗号化列のデータには、クリアテキスト・データより多くの記憶域が必要です。さらに、TDEでは、暗号化された値が16バイトの倍数に拡張されます。これは、クレジット・カード番号の格納に9バイトが必要な場合、クレジット・カード番号を暗号化して格納するには、さらに7バイトが必要になることを意味します。

暗号化された各値は、20バイトの整合性チェックにも関連付けられます。これは、NOMACパラメータを使用して列を暗号化した場合には当てはまりません。また、saltを使用してデータを暗号化した場合は、暗号化された各値を格納するために、さらに16バイトの記憶域が必要になります。

暗号化された各値の記憶域の最大オーバーヘッドは52バイトです。

8.3.5 セキュリティに関する考慮事項

透過的データ暗号化(TDE)を使用する場合のセキュリティに関する考慮事項は、全システム・セキュリティの広範囲に適用されます。セキュリティ管理者は、対処するリスクのレベルとサイトで保持されるデータの機密度を識別する必要があります。別の方法を使用して許容レベルの保護を実現する場合は、コストと利点を評価する必要があります。一般的に、暗号化データに対して、個別のセキュリティ管理者、TDE用の個別のウォレット、およびバックアップ保護手順を用意すると有益です。TDE用の個別ウォレットを設定すると、他のOracleコンポーネントに対して自動ログインは許可されますが、TDEウォレットに対するパスワード保護は保持されます。

セキュリティに関するその他の考慮事項は、TDEを使用している場合の通常のデータベース操作およびネットワーク操作に適用されます。暗号化列のデータは、データ・ファイル、UNDOログ、REDOログおよびシステム・グローバル領域(SGA)のバッファ・キャッシュ内では暗号化されたままになります。一方、データは式の評価時に復号化されるため、ディスク上のスワップ・ファイルには復号化後のデータを表示できます。権限のあるオペレーティング・システム・ユーザーは、このデータを表示できる可能性があります。

TDEを使用して暗号化された列値は、暗号化された形式でデータ・ファイルに格納されます。ただし、これらのデータ・ファイルには、表に対する過去のデータ操作で残されたゴースト・コピーと呼ばれるクリアテキストの断片が含まれている場合があります。これは、オペレーティング・システムによってファイルが削除された後に、ディスク上にデータが残存している場合に類似しています。

古いクリアテキストの断片は、それらの値を含んでいるブロックがデータベースによって上書きされるまで、しばらく存在し続ける可能性があります。権限のあるオペレーティング・システム・ユーザーがデータベースのアクセス制御をバイパスした場合、表領域を保持するデータ・ファイル内のこれらの値に直接アクセスされる可能性があります。このリスクを最小限に抑えるには、次の手順を実行します。

  1. 新しいデータ・ファイルに新しい表領域を作成します。CREATE TABLESPACE文を使用できます。

  2. 暗号化列を含む表を新しい表領域に移動します。ALTER TABLE.....MOVE文を使用できます。元の表領域のすべてのオブジェクトについて、この手順を繰り返します。

  3. 元の表領域を削除します。DROP TABLESPACE tablespace INCLUDING CONTENTS KEEP DATAFILES文を使用できます。データ・ファイルは、プラットフォーム固有のユーティリティを使用して安全に削除することをお薦めします。

  4. 古いデータ・ファイルを安全に削除するには、プラットフォームおよびファイル・システムに固有のユーティリティを使用してください。このようなユーティリティの例には、shred (Linuxの場合)やsdelete (Windowsの場合)などがあります。

8.3.6 マルチデータベース環境における透過的データ暗号化の使用

同じサーバーに複数のOracle Databaseがインストールされている場合(同じOracleバイナリを共有しているが異なるデータファイルを使用しているデータベースなど)、各データベースはそれぞれ独自の透過的データ暗号化ウォレットにアクセスする必要があります。ウォレットは、データベース間で共有されるようには設計されていません。設計によって、データベースごとに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ユーザーズ・ガイドおよびリファレンス』を参照してください。


注意:

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

8.3.7 分散環境でのレプリケーション

Oracle Data Guardでは、透過的データ暗号化(TDE)がサポートされています。プライマリ・データベースでTDEを使用する場合、Data Guard構成の各スタンバイ・データベースには、プライマリ・データベースからの暗号化ウォレットのコピーが必要です。プライマリ・データベースでマスター暗号化鍵を再設定した場合は、そのマスター暗号化鍵が格納されているウォレットを各スタンバイ・データベースにコピーする必要があります。

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


関連項目:

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

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

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

マテリアライズド・ビューは、TDE列暗号化とも連携します。ただし、マテリアライズド・ビュー・ログには、暗号化列を含めることができません。


関連項目:

マテリアライズド・ビューの詳細は、『Oracle Databaseアドバンスト・レプリケーション』ガイドのマテリアライズド・ビューの概念とアーキテクチャに関する項を参照してください。

8.3.8 暗号化データの圧縮とデータ重複除外

表領域暗号化を使用すると、Oracle Databaseでは表領域を暗号化する前に表および索引を圧縮します。これにより、圧縮から最大領域およびパフォーマンスにおける恩恵を受けるとともに、停止している暗号化のセキュリティも確保します。CREATE TABLESPACE SQL文に、COMPRESS句とENCRYPT句の両方を含めます。

列暗号化を使用すると、Oracle Databaseでは列を暗号化した後でデータを圧縮します。これは、圧縮には、暗号化された列で最小限の有効性があることを意味します。注目すべき例外が1つあります。列がSecureFiles LOBであり、暗号化がSecureFiles LOB暗号化を使用して実装され、圧縮(重複除外の場合もあり)がSecureFiles LOB圧縮および重複除外を使用して実装されている場合、圧縮は暗号化の前に実行されます。表領域暗号化のためのCREATE TABLESPACE文と同様に、COMPRESS句とENCRYPT句の両方を含めます。


関連項目:

  • 拡張圧縮オプションの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

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


8.3.9 OCIを使用した透過的データ暗号化

行を使用可能にする鍵は受信ポイントでは使用できないため、行の送信は使用できません。

8.3.10 マルチデータベース環境における透過的データ暗号化

同じサーバーに複数のOracle Databaseがインストールされている場合(同じOracleバイナリを共有しているが異なるデータファイルを使用しているデータベースなど)、各データベースはそれぞれ独自の透過的データ暗号化キーストアにアクセスする必要があります。ウォレットは、データベース間で共有されるようには設計されていません。設計によって、データベースごとに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ユーザーズ・ガイドおよびリファレンス』を参照してください。


注意:

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

8.3.11 透過的データ暗号化のデータ・ディクショナリ・ビュー

次のデータ・ディクショナリ・ビューには、暗号化の詳細、表領域およびウォレットの詳細に関する情報が保持されます。

  • ALL_ENCRYPTED_COLUMNS

    ALL_ENCRYPTED_COLUMNSビューには、現在のユーザーがアクセスできる表内の暗号化列に関する暗号化情報が表示されます。表8-2に、このビューに含まれる情報を示します。

    表8-2 ALL_ENCRYPTED_COLUMNSデータ・ディクショナリ・ビューの説明

    データ型 NULL 説明

    OWNER

    VARCHAR2(30)

    NOT NULL

    表の所有者。

    TABLE_NAME

    VARCHAR2(30)

    NOT NULL

    表の名前。

    COLUMN_NAME

    VARCHAR2(30)

    NOT NULL

    列の名前

    ENCRYPTION_ALG

    VARCHAR2(29)

    この表のデータの機密性を保護するために使用される暗号化アルゴリズム:

    • 3キー・モードのTriple DES(168ビット・キー)

    • AES 128ビット鍵

    • AES 192ビット鍵

    • AES 256ビット鍵

    SALT

    VARCHAR2(3)

    列がSALTを使用して暗号化されているかどうか(YES | NO)

    INTEGRITY_ALG

    VARCHAR2(12)

    表に使用される整合性アルゴリズム:

    • SHA-1

    • NOMAC


  • DBA_ENCRYPTED_COLUMNS

    DBA_ENCRYPTED_COLUMNSビューには、データベース内のすべての暗号化列の暗号化情報が表示されます。ビューの詳細は、ALL_ENCRYPTED_COLUMNSビューと同じです。

  • USER_ENCRYPTED_COLUMNS

    USER_ENCRYPTED_COLUMNSビューには、ユーザーのスキーマ内にある暗号化された表の列の暗号化情報が表示されます。 ビューの詳細は、ALL_ENCRYPTED_COLUMNSビューと同じです(OWNER列を除く)。ユーザーが所有する表のデータのみが表示されるため、OWNER列は含まれません。

  • V$ENCRYPTED_TABLESPACES

    V$ENCRYPTED_TABLESPACESビューには、暗号化された表領域に関する情報が表示されます。表8-3に、このビューに含まれる情報を示します。

    表8-3 V$ENCRYPTED_TABLESPACESビューの説明

    データ型 説明

    TS#

    NUMBER

    表領域番号

    ENCRYPTIONALG

    VARCHAR2(7)

    暗号化アルゴリズム:

    • NONE

    • 3DES168

    • AES128

    • AES192

    • AES256

    ENCRYPTEDTS

    VARCHAR2(3)

    表領域が暗号化されているかどうか(YES | NO)


  • V$WALLET

    V$WALLETビューには、TDEのマスター鍵として使用されるPKI証明書のメタデータ情報が表示されます。表8-4に、このビューに含まれる情報の概要を示します。

    表8-4 V$WALLETビューの説明

    データ型 説明

    CERT_ID

    VARCHAR2(52)

    マスター・キーとして使用する特定のPKI証明書を指定するための一意の証明書識別子の値

    DN

    VARCHAR2(255)

    特定のPKI証明書の識別名

    SERIAL_NUM

    VARCHAR2(40)

    発行者または署名者が証明書に割り当てた一意のシリアル番号

    ISSUER

    VARCHAR2(255)

    証明書を発行または署名した認証局または発行者の識別名

    KEYSIZE

    NUMBER

    証明書に関連付けられたPKI鍵のサイズ

    STATUS

    VARCHAR2(16)

    証明書の現在の状態:

    • UNUSED

    • IN USE

    • USED

    ユーザーは、この列を参照して、証明書が現在使用中かどうか、すでに透過的なデータベース暗号化に使用されているかどうかを識別できます。


  • V$ENCRYPTION_WALLET

    V$ENCRYPTION_WALLETには、TDEのウォレットおよびウォレット・ロケーションのステータスに関する情報が表示されます。表8-5に、このビューに含まれる情報の概要を示します。

    表8-5 V$ENCRYPTION_WALLETビューの説明

    データ型 説明

    WRL_TYPE

    VARCHAR2(20)

    ウォレット・リソース・ロケータのタイプ(FILEなど)

    WRL_PARAMETER

    VARCHAR2(4000)

    ウォレット・リソース・ロケータのパラメータ(たとえば、WRL_TYPE = FILEの場合は絶対ファイル名)

    STATUS

    VARCHAR2(9)

    ウォレットのステータス

    • OPEN

    • CLOSED

    • UNDEFINED

    • OPEN_NO_MASTER_KEY



関連項目:

これらのデータ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

8.4 例: TDE列暗号化とTDE表領域暗号化のスタート・ガイド

この項では、TDE列暗号化とTDE表領域暗号化を開始する上で役立つチュートリアル・アプローチを使用します。次の各タスクについてサンプル・シナリオを使用して説明します。

8.4.1 透過的データ暗号化用データベースの準備

透過的データ暗号化(TDE)を初めて使用する場合は、最初にデータベースを準備します。そのためには、Oracleウォレット・ロケーションを指定してマスター暗号化鍵を設定する必要があります。データベースでTDEを使用できるように準備するには、次の手順を実行します。

  1. sqlnet.oraファイルでのOracleウォレット・ロケーションの指定

  2. マスター暗号化鍵の作成

  3. Oracleウォレットのオープン

8.4.1.1 sqlnet.oraファイルでのOracleウォレット・ロケーションの指定

$ORACLE_HOME/network/adminにあるsqlnet.oraファイルを開きます。ファイルの末尾に、次の行を入力します。

ENCRYPTION_WALLET_LOCATION=
  (SOURCE=(METHOD=FILE)(METHOD_DATA=
   (DIRECTORY=/app/wallet)))

変更を保存して、ファイルを閉じます。


注意:

暗号化ウォレットには任意のディレクトリを選択できますが、そのパスでは、データベースのインストール時に作成した不明瞭化された標準ウォレット(cwallet.sso)を指定しないでください。

8.4.1.2 マスター暗号化鍵の作成

次に、表キーの暗号化に使用されるマスター暗号化鍵を作成する必要があります。マスター暗号化鍵を作成するには、次のコマンドを入力します。

SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "Easy2rem";

このコマンドによって、次の処理が実行されます。

  • 暗号化ウォレットが指定のディレクトリに存在しない場合は、暗号化ウォレット(ewallet.p12)が作成され、このウォレットが開かれて、TDE用のマスター暗号化鍵が作成(または再作成)されます。

  • 暗号化ウォレットが指定のディレクトリに存在する場合は、そのウォレットが開かれて、TDE用のマスター暗号化鍵が作成(または再作成)されます。


注意:

  • マスター暗号化鍵は、データを新しい暗号化鍵で再暗号化しないかぎり、1回のみ作成してください。

  • ALTER SYSTEM権限を持つユーザーのみがマスター暗号化鍵を作成したり、ウォレットを開くことができます。


8.4.1.3 Oracleウォレットのオープン

Oracleウォレットは、データベースが停止するたびに閉じます。このウォレットは明示的に閉じることもできます。

暗号化または復号化の操作を実行するには、Oracleウォレットが開いていることを事前に確認する必要があります。マスター暗号化鍵が格納されているウォレットを開くには、次のコマンドを使用します。

SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "Easy2rem";

注意:

このコマンドで使用したパスワードは、マスター暗号化鍵の作成で使用したパスワードと同じです。このパスワードは、ウォレットを開き、マスター暗号化鍵をアクセス可能にするためのパスワードになります。

8.4.2 暗号化列を含む表の作成

次に、暗号化列を含む表を作成できます。ここでは、cust_payment_infoという表を作成します。この表には、credit_card_numberという列を含めます。credit_card_number列には、暗号化対象の機密データが格納されます。表を作成するには、次のコマンドを使用します。

CREATE TABLE cust_payment_info 
  (first_name VARCHAR2(11), 
  last_name VARCHAR2(10), 
  order_number NUMBER(5), 
  credit_card_number VARCHAR2(16) ENCRYPT NO SALT,
  active_card VARCHAR2(3));

この表は、このコマンドを発行したユーザーのデフォルト表領域に作成されます。credit_card_number列はSALTなしで暗号化されます。credit_card_number列に入力されたデータはすべて、ディスク上で暗号化されます。credit_card_numberデータへのアクセス権があるユーザーは、復号化後のデータを確認できます。データベース・ユーザーやアプリケーションは、特定の列の内容がディスク上で暗号化されているかどうかを認識する必要はありません。

次に、表にデータを入力できます。次に、サンプル・データをcust_payment_info表に追加する例を示します。

INSERT INTO cust_payment_info VALUES
  ('Jon', 'Oldfield', 10001, '5446959708812985','YES');
INSERT INTO cust_payment_info VALUES
  ('Chris', 'White', 10002, '5122358046082560','YES'); 
INSERT INTO cust_payment_info VALUES
  ('Alan', 'Squire', 10003, '5595968943757920','YES');
INSERT INTO cust_payment_info VALUES
  ('Mike', 'Anderson', 10004, '4929889576357400','YES');
INSERT INTO cust_payment_info VALUES
  ('Annie', 'Schmidt', 10005, '4556988708236902','YES');
INSERT INTO cust_payment_info VALUES
  ('Elliott', 'Meyer', 10006, '374366599711820','YES');
INSERT INTO cust_payment_info VALUES
  ('Celine', 'Smith', 10007, '4716898533036','YES');
INSERT INTO cust_payment_info VALUES
  ('Steve', 'Haslam', 10008, '340975900376858','YES');
INSERT INTO cust_payment_info VALUES
  ('Albert', 'Einstein', 10009, '310654305412389','YES');

credit_card_number列に入力されたデータはすべて、暗号化された形式でディスク上に格納されます。

8.4.3 暗号化列に対する索引の作成

saltなしで列を暗号化した場合は、その暗号化列に対して索引を作成できます。ここでは、credit_card_number列に対して索引を作成します。credit_card_number列に対して索引を作成するには、次のコマンドを使用します。

CREATE INDEX cust_payment_info_idx ON cust_payment_info (credit_card_number);

8.4.4 既存の列を暗号化するための表の変更

既存の表は、ALTER TABLEコマンドを使用して変更できます。ここでは、列が暗号化されていないemployeesという表を変更します。次のコマンドを使用して、employees表を表示します。

SQL> DESC employees
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 FIRSTNAME                                          VARCHAR2(11)
 LASTNAME                                           VARCHAR2(10)
 EMP_SSN                                            VARCHAR2(9)
 DEPT                                               VARCHAR2(20)

次のコマンドを使用して、employees表のemp_ssn列を暗号化します。

SQL> ALTER TABLE employees MODIFY (emp_ssn ENCRYPT);

次のコマンドを使用して、変更したemployees表を表示します。

SQL> DESC employees
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 FIRSTNAME                                          VARCHAR2(11)
 LASTNAME                                           VARCHAR2(10)
 EMP_SSN                                            VARCHAR2(9) ENCRYPT
 DEPT                                               VARCHAR2(20)

emp_ssn列の既存のデータはすべて、ディスク上で暗号化されます。データへのアクセス権があるユーザーには、データが透過的に復号化されます。

8.4.5 暗号化された表領域の作成

TDE表領域暗号化を使用すると、表領域全体を暗号化できます。表領域に格納されているデータはすべて、デフォルトで暗号化されます。このように、暗号化された表領域に表を作成すると、その表はデフォルトで暗号化されます。暗号化が必要な列を判断するために、各表の列を詳細に分析する必要はありません。

ここでは、暗号化された表を格納するために、暗号化された表領域を作成します。次のコマンドを使用して、securespaceという暗号化された表領域を作成します。

SQL> CREATE TABLESPACE securespace
  2  DATAFILE '/home/oracle/oracle3/product/11.1.0/db_1/secure01.dbf'
  3  SIZE 150M
  4  ENCRYPTION
  5  DEFAULT STORAGE(ENCRYPT);
Tablespace created.

8.4.6 暗号化された表領域での表の作成

暗号化された表領域に表を作成すると、表内のデータはすべて、暗号化された形式でディスク上に格納されます。次のコマンドを使用して、securespaceという暗号化された表領域にcustomer_info_paymentという表を作成します。

SQL> CREATE TABLE customer_payment_info
  2  (first_name VARCHAR2(11),
  3  last_name VARCHAR2(10),
  4  order_number NUMBER(5),
  5  credit_card_number VARCHAR2(16),
  6  active_card VARCHAR2(3))TABLESPACE securespace;
Table created.

8.5 透過的データ暗号化のトラブルシューティング

この項では、透過的データ暗号化(TDE)の構成時および使用時に表示される可能性がある一般的なエラー・メッセージを示します。エラー・メッセージの一般的な原因および考えられる解決策についても示します。

ORA-28330: このデータ型は暗号化できません
原因: 列の暗号化に対して、データ型がサポートされていません。
処置: 特にありません。
ORA-28331: 暗号化された列サイズはデータ型に対して長すぎます
原因: 暗号化された列のサイズが、VARCHAR2の場合で3932、CHARの場合で1932、NVARCHAR2の場合で1966、NCHARの場合で966より長く指定されています。
処置: 列のサイズを小さくしてください。
ORA-28332: 暗号化鍵には複数のパスワードは指定できません
原因: ユーザー・コマンドで複数のパスワードが指定されました。
処置: 特にありません。
ORA-28333: 列が暗号化されていません
原因: 暗号化されていない列を再入力または復号化しようとしました。
処置: 特にありません。
ORA-28334: 列はすでに暗号化されています
原因: 暗号化された列を暗号化しようとしました。
処置: 特にありません。
ORA-28335: 参照型または被参照型の外部キー制約列は暗号化できません
原因: 参照制約に暗号化された列が関与していました。
処置: 特にありません。
ORA-28336: SYSが所有するオブジェクトは暗号化できません
原因: SYSが所有する表の列を暗号化しようとしました。
処置: 特にありません。
ORA-28337: 指定した索引が暗号化列に定義されていない可能性があります
原因: 索引列が、ファンクション索引、ドメイン索引、結合索引のいずれかでした。
処置: 特にありません。
ORA-28338: 索引付けされた列は、saltを使用して暗号化できません
原因: saltを使用して索引列を暗号化しようとしました。
処置: 表を変更し、saltを使用せずに列の暗号化を指定してください。
ORA-28339: 暗号化アルゴリズムが欠落しているか、または無効です
原因: ユーザー・コマンドの暗号化アルゴリズムが欠落しているか、無効です。
処置: 有効なアルゴリズムを指定する必要があります。
ORA-28340: 表には、別の暗号化アルゴリズムが選択されています
原因: 既存の暗号化された列が、異なるアルゴリズムに関連付けられています。
処置: アルゴリズムを指定しないか、既存の暗号化された列と同じアルゴリズムを指定してください。
ORA-28341: 制約列は、saltを使用して暗号化できません
原因: saltを使用して制約列を暗号化しようとしました。
処置: saltを使用せずに制約列を暗号化してください。
ORA-28342: 列キーでは整合性チェックが正常に実行されません
原因: 暗号化メタデータが不正に変更された可能性があります。
処置: 特にありません。
ORA-28343: データを暗号化できません
原因: データまたは暗号化メタデータが不正に変更されたか、セキュリティ・モジュールが正しく設定されていません。
処置: 特にありません。
ORA-28344: データを復号化できません
原因: データまたは暗号化メタデータが不正に変更されたか、セキュリティ・モジュールが正しく設定されていません。
処置: 特にありません。
ORA-28345: 暗号化された列が存在するため、ダウングレードできません
原因: システム内に暗号化された列が存在するにもかかわらず、ダウングレードしようとしました。
処置: これらの列を復号化してからダウングレードしてください。
ORA-28346: 暗号化された列は、パーティション化列として機能しません
原因: パーティション化キー列を暗号化しようとしたか、暗号化された列を含むパーティション化索引を作成しようとしました。
処置: 列を復号化する必要があります。
ORA-28347: 暗号化プロパティの不一致
原因: ALTER TABLE EXCHANGE PARTITION | SUBPARTITIONコマンドを発行しようとしましたが、暗号化プロパティが一致しませんでした。
処置: 暗号化アルゴリズムと列の鍵が同一であることを確認してください。対応する列は、同じsaltを使用した表とsalt以外のフレーバを使用した表の両方で暗号化する必要があります。
ORA-28348: 指定した列に定義されている索引を暗号化できません
原因: ファンクション索引、ドメイン索引または結合索引内の列を暗号化しようとしました。
処置: 索引を削除してください。
ORA-28349: マテリアライズド・ビュー・ログに記録された指定の列を暗号化できません
原因: すでにマテリアライズド・ビュー・ログに記録されている列を暗号化しようとしました。
処置: マテリアライズド・ビュー・ログを削除してください。
ORA-28350: CDC同期変更表に記録された指定の列を暗号化できません
原因: すでにCDC同期変更表に記録されている列を暗号化しようとしました。
処置: 同期変更表を削除してください。
ORA-28351: クラスタ・キーの列を暗号化できません
原因: クラスタ・キーの列を暗号化しようとしました。クラスタ表のクラスタ・キーの列は暗号化できません。
処置: 特にありません。
ORA-28353: ウォレットのオープンに失敗しました
原因: ウォレットのパスまたはパスワードが正しくないので、データベースがセキュリティ・モジュール・ウォレットをオープンできませんでした。
処置: 正しいウォレット・パスワードを使用するか、指定のディレクトリにウォレットが存在することを確認して、コマンドを再実行します。必要に応じて、新しいウォレットを作成し、初期化してください。
ORA-28354: ウォレットはすでにオープンしています。
原因: セキュリティ・モジュール・ウォレットはすでにオープンしています。
処置: 特にありません。
ORA-28356: 無効なopen wallet構文
原因: ウォレットをオープンするコマンドに、不適切な綴りまたは構文が含まれています。
処置: ウォレットをオープンする場合は、綴りと構文を検証し、コマンドを再実行してください。
ORA-28357: ウォレットのオープンに必要なパスワード
原因: ウォレットをオープンするコマンドを実行する際にパスワードが提供されませんでした。
処置: 有効なパスワードでコマンドを再試行してください。
ORA-28358: 不適切なset key構文
原因: マスター鍵を設定するコマンドに、不適切な綴りまたは構文が含まれています。
処置: 透過的データベース暗号化のマスター鍵を設定する場合は、綴りと構文を検証し、コマンドを再実行してください。
ORA-28359: 無効な証明書識別子
原因: 指定された証明書がウォレットに存在しません。
処置: V$WALLET固定ビューを問い合せて、証明書の使用に適した証明書識別子を検索してください。
ORA-28361: マスター鍵が設定されていません
原因: インスタンスのマスター鍵が設定されていません。
処置: ALTER SYSTEM SET KEYコマンドを実行し、データベース・インスタンスのマスター鍵を設定してください。
ORA-28362: マスター鍵が見つかりません
原因: 必要なマスター鍵を検出できませんでした。無効または不適切なウォレットを使用したことが原因と考えられます。
処置: ウォレット・ロケーション・パラメータで、正しいウォレットが指定されているか確認してください。また、暗号化されたウォレットを使用するべきところでSSOウォレットが使用されていないことを検証してください。
ORA-28363: 用意されたバッファーは出力用には不十分です
原因: 用意された出力バッファは、出力を含めるには小さすぎます。
処置: 出力バッファのサイズを確認し、適切なサイズに初期化されていることを確認してください。
ORA-28364: 無効なウォレット操作です
原因: ウォレットを操作するコマンドに、不適切な綴りまたは構文が含まれています。
処置: 綴りと構文を検証し、コマンドを再実行してください。
ORA-28365: ウォレットがオープンしていません
原因: セキュリティ・モジュール・ウォレットがオープンしていません。
処置: ウォレットをオープンしてください。
ORA-28366: 無効なデータベース暗号化操作です
原因: データベース暗号化のコマンドに、不適切な綴りまたは構文が含まれています。
処置: 綴りと構文を検証し、コマンドを再実行してください。
ORA-28367: ウォレットが存在しません
原因: Oracleウォレットが作成されていないか、sqlnet.oraのウォレット・ロケーション・パラメータに無効なウォレット・パスが指定されています。
処置: WALLET_LOCATIONパラメータまたはENCRYPTION_WALLET_LOCATIONパラメータが正しく、有効なウォレットが指定のパスに存在することを検証してください。
ORA-28368: ウォレットを自動作成できません
原因: データベースがOracleウォレットの自動作成に失敗しました。Oracleプロセスに適切なファイル権限がないか、ウォレットがすでに存在する可能性があります。
処置: 適切なディレクトリ権限がOracleユーザーに付与されており、暗号化または不明瞭化されたウォレットが指定のウォレット・ロケーションに存在しないことを確認し、再試行してください。
ORA-28369: オフライン時には暗号化可能な表領域にファイルを追加できません
原因: 表領域内のすべてのファイルがオフラインのとき、暗号化可能な表領域にファイルを追加しようとしました。
処置: 表領域をオンラインにし、再試行してください。
ORA-28370: ENCRYPT記憶域オプションは使用できません
原因: ENCRYPT記憶域オプションを指定しようとしました。このオプションは、CREATE TABLESPACEの実行時にのみ指定できます。
処置: このオプションを削除して、文を再実行してください。
ORA-28371: ENCRYPTION句またはENCRYPT記憶域オプション(あるいはその両方)は使用できません
原因: TEMPまたはUNDO表領域の作成でENCRYPTION句またはENCRYPT記憶域オプションを指定しようとしました。
処置: これらのオプションを削除して、文を再試行してください。
ORA-28372: 暗号化された表領域にENCRYPT記憶域オプションがありません
原因: 表領域を暗号化する際にENCRYPT記憶域オプションを指定せずにENCRYPTIONプロパティをCREATE TABLESPACEに指定しようとしました。
処置: ENCRYPT記憶域オプションを追加して、文を再試行してください。
ORA-28373: 暗号化された表領域にENCRYPTION句がありません
原因: 表領域を暗号化する際にENCRYPTIONプロパティを指定せずにENCRYPT記憶域オプションをCREATE TABLESPACEに指定しようとしました。
処置: ENCRYPTION句を追加して、文を再試行してください。
ORA-28374: 入力したマスター鍵がウォレットに見つかりません
原因: 暗号化された表領域またはREDOログにアクセスしようとしましたが、入力したマスター鍵がウォレットに存在しません。
処置: 表領域が作成されたインスタンスから正しいOracleウォレットをコピーしてください。
ORA-28375: 暗号化された表領域ではエンディアン間の変換を実行できません
原因: 暗号化された表領域でエンディアン間の変換を実行しようとしました。
処置: 暗号化された表領域でのエンディアン間の変換はサポートされていません。
ORA-28376: PKCS11ライブラリが見つかりません
原因: HSMベンダーのライブラリが見つかりません。
処置: Unix系システムの場合は/opt/oracle/extapi/[32,64]/hsm/{VENDOR}/{VERSION}/lib<apiname>.<ext>、Windowsシステムの場合は%SYSTEM_DRIVE%\oracle\extapi\[32,64]\hsm\{VENDOR}\{VERSION}\lib<apin// ame>.<ext>のディレクトリ構造に、HSMベンダーのライブラリを配置します。[32, 64]は、32または64ビット・バイナリを示します。{VENDOR}は、ライブラリを提供するベンダー名です。{VERSION}は、ライブラリのバージョンです。書式はnum#.num#.num#にします(可能な場合)。
ORA-28377: ウォレットからHSMに移行する必要はありません
原因: 暗号化された列がないか、またはすべての列キーがHSMマスター鍵を使用してすでに暗号化されています。
処置: 処置は不要です。
ORA-28378: マスター鍵の設定後、ウォレットがオープンしていません
原因: マスター鍵は設定またはリセットされました。ただし、ウォレットを正常に再オープンできませんでした。
処置: ウォレットを再オープンしてください。

8.6 透過的データ暗号化の参照情報

この項の内容は次のとおりです。

8.6.1 サポートされる暗号化と整合性のアルゴリズム

デフォルトでは、透過的データ暗号化(TDE)には、192ビット長の暗号鍵で暗号化するAdvanced Encryption Standard (AES192)が使用されます。また、特に指定しないかぎり、暗号化の前にクリアテキストにsaltがデフォルトで追加されます。暗号化の対象となる索引付けされた列にはsaltを追加できないことに注意してください。索引付けされた列に対しては、SQL ENCRYPT句でNO SALTパラメータを選択します。

既存の暗号化列の暗号化アルゴリズムおよび暗号化鍵を変更するには、SQL ENCRYPT句で別のアルゴリズムを設定します。


関連項目:

  • SQL ENCRYPT句でNO SALTパラメータを選択する場合の正しい構文は、例8-4を参照してください。

  • SQL ENCRYPT句で別のアルゴリズムを設定する場合の構文例は、「暗号化列を含む表に対する暗号化鍵またはアルゴリズムの変更」を参照してください。


表8-6に、サポートされる暗号化アルゴリズムを示します。

表8-6 透過的データ暗号化でサポートされる暗号化アルゴリズム

アルゴリズム 鍵サイズ パラメータ名

Triple-DES (Data Encryption Standard)

168ビット

3DES168

AES (Advanced Encryption Standard)

128ビット

AES128

AES

192ビット(デフォルト)

AES192

AES

256ビット

AES256


整合性保護のために、SHA-1ハッシュ・アルゴリズムが使用されます。

8.6.2 クイック・リファレンス: 透過的データ暗号化のSQLコマンド

表8-7に、透過的データ暗号化の実装および管理に使用可能なSQLコマンドのサマリーを示します。

表8-7 透過的データ暗号化のSQLコマンドのクイック・リファレンス

タスク SQLコマンド

既存の表への暗号化列の追加

ALTER TABLE table_name ADD (column_name datatype ENCRYPT);

表の作成および列の暗号化

CREATE TABLE table_name (column_name datatype ENCRYPT);

暗号化されていない既存の列の暗号化

ALTER TABLE table_name MODIFY (column_name ENCRYPT);

マスター暗号化鍵: 設定または再設定

ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "password";

マスター暗号化鍵: PKI証明書を使用するための設定または再設定

ALTER SYSTEM SET ENCRYPTION KEY "certificate_ID" IDENTIFIED BY "password";

ウォレット: マスター暗号化鍵にアクセスするためのオープン

ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password";