透過的データ暗号化(TDE)を使用すると、表および表領域に格納する機密データ(クレジット・カード番号など)を暗号化できます。暗号化されたデータは、アクセス権を持つデータベース・ユーザーやアプリケーションに対して透過的に復号化されます。TDEは、ストレージ・メディアやデータ・ファイルが盗まれた場合に、メディアに格納されているデータを保護するのに役立ちます。
この章の内容は次のとおりです。
Oracle Databaseの認証、認可および監査メカニズムは、データベース内のデータを保護するためのものであり、オペレーティング・システムのデータ・ファイルに格納されているデータの保護には使用されません。このようなデータ・ファイルを保護する目的では、透過的データ暗号化(TDE)を使用します。TDEを使用すると、データ・ファイルに格納されている機密データを暗号化できます。許可なく復号化されるのを防止するため、TDEにより暗号化鍵はデータベース外部のセキュリティ・モジュールに格納されます。
データベース・ユーザーやアプリケーションは、鍵の格納を管理したり、補助の表、ビューおよびトリガーを作成する必要はありません。機密データを処理するアプリケーションでTDEを使用すると、アプリケーションをほとんどあるいはまったく変更せずに、強力なデータ暗号化を実現できます。
TDEは、表の列に格納された機密データ(クレジット・カード番号や社会保障番号など)を保護する目的で使用します。また、TDEを使用して表領域全体を暗号化することもできます。
この項の内容は次のとおりです。
透過的データ暗号化(TDE)には、次の利点があります。
セキュリティ管理者の場合、ストレージ・メディアまたはデータ・ファイルが盗み出された場合にも機密データを保護できます。
TDEを実装すると、セキュリティに関連する法的コンプライアンスの問題への対応に役立ちます。
権限のあるユーザーやアプリケーションに対しては、データを復号化するためのトリガーやビューを作成する必要がありません。表内のデータは、データベース・ユーザーやアプリケーションに対して透過的に復号化されます。
データベース・ユーザーやアプリケーションは、アクセスしているデータが暗号化された形式で格納されていることを認識する必要がありません。データは、データベース・ユーザーやアプリケーションに対して透過的に復号化されます。
暗号化されたデータを処理するためにアプリケーションを変更する必要がありません。データの暗号化/復号化は、データベースにより管理されます。
鍵管理操作は自動化されます。ユーザーやアプリケーションが暗号化鍵を管理する必要はありません。
透過的データ暗号化(TDE)列暗号化を使用すると、選択した表の列に格納されている機密データを暗号化できます。TDE表領域暗号化を使用すると、表領域に格納されているすべてのデータを暗号化できます。
TDE列暗号化とTDE表領域暗号化では、どちらも2層の鍵ベース・アーキテクチャを使用します。暗号化されたデータを取得しても、許可された復号化が行われるまでは理解不能です。この復号化は、表へのアクセスを許可されたユーザーに対して自動的に行われます。
次の各項では、TDE列暗号化とTDE表領域暗号化について説明します。
TDE列暗号化は、表の列に格納された機密データ(クレジット・カード番号や社会保障番号など)を保護する目的で使用します。TDE列暗号化では、2層の鍵ベース・アーキテクチャを使用して、機密の表の列を透過的に暗号化および復号化します。TDEマスター暗号化鍵は外部セキュリティ・モジュールに格納され、この外部セキュリティ・モジュールは、Oracleウォレットまたはハードウェア・セキュリティ・モジュール(HSM)にできます。このマスター暗号化鍵は表キーの暗号化に使用され、表キーは表の列のデータの暗号化と復号化に使用されます。
図8-1に、TDE列暗号化プロセスの概要を示します。
図8-1に示すように、マスター暗号化鍵は、データベースの外部にあり、セキュリティ管理者のみがアクセスできる外部セキュリティ・モジュールに格納されます。Oracleでは、この外部セキュリティ・モジュールとして、この章で説明するOracleウォレットまたはハードウェア・セキュリティ・モジュール(HSM)を使用します。このようにマスター暗号化鍵を格納することで、不正使用を防止できます。
外部セキュリティ・モジュール(ウォレット/HSM)を使用すると、通常のプログラム機能と暗号化操作が分離されるため、データベース管理者とセキュリティ管理者の責務を分離できます。データベース管理者にはウォレット・パスワードを知らせずに、セキュリティ管理者にパスワードの提供を要求できるため、セキュリティが強化されます。
表に暗号化列が含まれる場合、暗号化列の数に関係なく、単一の表キーが使用されます。すべての表の表キーは、データベース・サーバーのマスター暗号化鍵で暗号化され、データベース内のディクショナリ表に格納されます。暗号化されていない鍵が格納されることはありません。
TDE表領域暗号化を使用すると、表領域全体を暗号化できます。暗号化されている表領域に作成されたオブジェクトはすべて自動的に暗号化されます。TDE表領域暗号化は、表内の機密データを保護する場合に便利です。暗号化が必要な列を判断するために、各表の列を詳細に分析する必要はありません。
また、TDE表領域暗号化は、バルク暗号化とキャッシュを利用して、高度なパフォーマンスを実現します。アプリケーションのパフォーマンスに対する実際の影響は様々ですが、パフォーマンスのオーバーヘッドは約5%から8%までと推定されます。
TDE表領域暗号化は、表の複数の列に機密データが含まれている場合や個々の列ではなく表全体を保護する場合に、TDE列暗号化にかわる有効な代替手段です。
TDE表領域暗号化では、暗号化された表領域内に格納されているデータおよびそれに対応するREDOデータがすべて暗号化されます。この場合、BLOB
やCLOB
などの内部ラージ・オブジェクト(LOB
)も暗号化の対象となります。TDE表領域暗号化では、表領域の外部に格納されているデータは暗号化されません。たとえば、データベース外部に格納されるBFILE
データは暗号化されません。暗号化された表領域内でBFILE
列を含む表を作成した場合、この特別な列は暗号化されません。ただし、SecureFile LOBはOracle Database 11g リリース1 (11.1)からサポートされています。
暗号化された表領域内のデータはすべて、暗号化された形式でディスク上に格納されます。データの表示または変更に必要な権限を付与されているユーザーに対しては、データが透過的に復号化されます。データベース・ユーザーやアプリケーションは、特定の表がディスク上で暗号化されているかどうかを認識する必要はありません。ディスク上のデータ・ファイルまたはバックアップ・メディアが盗まれた場合でも、データの安全性は損なわれません。
TDE表領域暗号化では、2層の鍵ベース・アーキテクチャを使用して、表領域を透過的に暗号化(および復号化)します。TDEマスター鍵は、外部セキュリティ・モジュール(OracleウォレットまたはHSM)に格納されます。このTDEマスター鍵はTDE表領域暗号化鍵の暗号化に使用され、TDE表領域暗号化鍵は表領域のデータの暗号化と復号化に使用されます。
図8-2に、TDE表領域暗号化プロセスの概要を示します。
注意: 暗号化データは、JOIN やSORT などの操作中も保護されます。これは、データを一時表領域に移動しても安全であることを意味します。UNDOログとREDOログのデータも保護されます。 |
TDE表領域暗号化を使用すると、暗号化された表領域のデータに対して索引レンジ・スキャンを実行することもできます。索引レンジ・スキャンは、TDE列暗号化では実行できません。
Oracle Database 11g リリース2 (11.2)では、TDE表領域暗号化に次の拡張が実装されています。
TDE列暗号化とTDE表領域暗号化の両方で、統合マスター暗号化鍵が使用されます。
統合マスター暗号化鍵は再設定できます。これによってセキュリティが強化され、セキュリティ要件やコンプライアンス要件への対応が促進されます。
次の各項では、透過的データ暗号化(TDE)の使用方法について説明します。
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)以上では、JOIN やSORT などの操作中に一時表領域のデータを保護することで、より高いセキュリティが確保されます。これらの操作の間、一時表領域のデータは暗号化された状態で存在します。 |
TDEの使用を開始するには、セキュリティ管理者がウォレットを作成し、マスター鍵を設定する必要があります。ウォレットは、他のOracle Databaseコンポーネントと共有されるデフォルトのデータベース・ウォレットにするか、TDE専用に使用する別のウォレットにできます。マスター暗号化鍵は、独立したウォレットを使用して格納することをお薦めします。
TDE専用のウォレットを使用する場合は、sqlnet.ora
ファイルでENCRYPTION_WALLET_LOCATION
パラメータを使用して、ウォレット・ロケーションを指定する必要があります。ENCRYPTION_WALLET_LOCATION
パラメータを使用して、TDEのウォレット・ロケーションを指定することをお薦めします。
外部セキュリティ・モジュールでは、自動ログイン機能を有効化したウォレットを使用できます。このようなウォレットは常に開いたままになります。セキュリティ管理者は、データベース・インスタンスの再起動後にウォレットを再度開く必要はありません。ウォレットを明示的に開くことを義務付けてセキュリティを強化する必要がない環境においては、自動ログイン・ウォレットを使用することもできます。
ローカルの自動ログイン・ウォレットを作成することもできます。ローカルの自動ログイン・ウォレットを別のコンピュータに移動することはできません。それらは作成されたホストで使用する必要があります。
マスター暗号化鍵は外部セキュリティ・モジュールに格納され、表キーと表領域暗号化鍵の保護に使用されます。デフォルトでは、透過的データ暗号化(TDE)によって生成されるランダム鍵がマスター暗号化鍵として使用されます。また、これは、暗号化用に指定されたPKI証明書の既存の鍵ペアにすることもできます。PKI鍵ペアと一緒にTDEを使用する場合は、発行認証局が、暗号化用にマークされた鍵使用方法フィールドを含むX.509v3証明書を発行できる必要があります。
注意: PKIベースの暗号化は、TDE表領域暗号化やハードウェア・セキュリティ・モジュールとは連携できません。ハードウェア・セキュリティ・モジュールの詳細は、「TDEでのハードウェア・セキュリティ・モジュールの使用」を参照してください。 |
どちらの鍵タイプも安全性は同様ですが、組織内にすでにPKIをデプロイしている場合は、そのPKIサービスを鍵供託およびリカバリとして活用できます。ただし、現在のPKIアルゴリズムを使用する暗号化では、対称鍵暗号化よりもはるかに多くのシステム・リソースが必要になります。マスター暗号化鍵としてPKI鍵ペアを使用すると、データベース内の暗号化列にアクセスする場合にパフォーマンスが大幅に低下する可能性があります。
マスター暗号化鍵を設定または再設定する(rekey
)には、ALTER SYSTEM
コマンドを使用します。次の各項では、マスター暗号化鍵の設定および再設定について説明します。
データベースの列または表領域を暗号化または復号化するには、マスター暗号化鍵を事前に生成しておく必要があります。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
は、初期化パラメータ・ファイルで指定されているデータベースの一意の名前です。
想定しているウォレット・ロケーションに既存の自動ログイン・ウォレットが存在する場合、新しいウォレットは作成されません。
マスター暗号化鍵の再設定/再生成は、マスター暗号化鍵の安全性が損なわれた場合、または組織のセキュリティ・ポリシーに従う場合にのみ実行します。マスター暗号化鍵を再設定する前に、ウォレットをバックアップする必要があります。
頻繁にマスター暗号化鍵を再生成しても、システム・セキュリティが強化されるとはかぎりません。セキュリティ・モジュールには多数の鍵を格納できます。ただし、この数は無限ではありません。頻繁にマスター暗号化鍵を再生成すると、使用可能な記憶域を使い果たす可能性があります。
マスター暗号化鍵を再設定するには、「マスター暗号化鍵の設定」に記載されているSQL構文を使用します。
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ベースの鍵の場合、証明書失効リストは適用されません。これは、証明書の失効を強制すると、データベース内の暗号化されたすべての情報にアクセスできなくなる可能性があるためです。ただし、同じ証明書を使用してマスター鍵を再び作成することはできません。
データベースで列/表領域を暗号化または復号化するには、マスター暗号化鍵を事前にメモリーにロードする必要があります。ウォレットを開くと、データベースがマスター暗号化鍵にアクセスできるようになります。ウォレットを明示的に開くには、次の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
権限がない場合、ウォレットが使用できない場合、または不正なパスワードが入力された場合、このコマンドはエラーを戻して終了します。ウォレットがすでに開いている場合、このコマンドはエラーを戻し、何も実行しません。例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
次の各項では、TDE列暗号化の使用について説明します。
暗号化列を含むリレーショナル表を作成するには、CREATE TABLE
文でデータベース列を定義するときにSQL ENCRYPT
句を指定します。
この項の内容は次のとおりです。
TDEでは、192ビットの鍵の長さを使用するAES
暗号化アルゴリズム(AES192
)がデフォルトで使用されます。アルゴリズムを指定せずに表の列を暗号化すると、その列はAES192
アルゴリズムを使用して暗号化されます。
TDEでは、暗号化の前にクリアテキストにsaltが追加されます。これによって、攻撃者が総当たり攻撃によってデータを盗むことがより困難になります。また、整合性をチェックするために、TDEによりデータにメッセージ認証コード(MAC)が追加されます。デフォルトでは、SHA-1
整合性アルゴリズムが使用されます。
注意: 1つの表に複数の暗号化列がある場合、これらのすべての列で暗号化アルゴリズムと整合性アルゴリズムの同じペアが使用される必要があります。saltは列レベルで指定されます。つまり、表には、saltが使用される暗号化列と使用されない暗号化列が混在していてもかまいません。 |
例8-3では、暗号化列を含む新しい表を作成しています。この列は、デフォルトの暗号化アルゴリズム(AES192
)を使用して暗号化されます。saltおよびMACはデフォルトで追加されます。
デフォルトでは、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は使用されません。
NOMAC
パラメータを使用すると、TDEによって実行される整合性チェックを省略できます。この場合、暗号化された値ごとに20バイトのディスク領域が節約されます。表の行および暗号化列の数が多い場合、これにより節約されるディスク領域はかなりの量になります。
また、NOMAC
パラメータにより、TDEに関連するパフォーマンスのオーバーヘッドも削減できます。NOMAC
パラメータを使用すると、暗号化および復号化操作時の整合性チェックが省略されます。これにより、処理循環が短縮され、パフォーマンスが向上します。
注意: TDEでは、デフォルトでSHA-1 整合性アルゴリズムが使用されます。表のすべての暗号化列で同じ整合性アルゴリズムが使用される必要があります。表の列ですでにSHA-1 アルゴリズムを使用している場合は、NOMAC パラメータによって同じ表の別の列を暗号化することはできません。
|
例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
に設定しています。
外部表の機能を使用すると、データベース表内のデータであるかのように、外部ソースのデータにアクセスできます。外部表は、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 TABLE、ENCRYPTおよびパスワードのルールの詳細は、 『Oracle Database SQL言語リファレンス』 を参照してください。 |
既存の表に暗号化列を追加したり、既存の列を暗号化または復号化するには、ALTER TABLE
SQLコマンドをADD
またはMODIFY
句とともに使用します。
この項の内容は次のとおりです。
既存の表に暗号化列を追加するには、ALTER TABLE ADD
コマンドを使用し、ENCRYPT
句で新しい列を指定します。例8-8では、employee
という既存の表に暗号化列ssn
を追加しています。
ssn列は、デフォルトのAES192
アルゴリズムを使用して暗号化されます。saltおよびMACはデフォルトで追加されます。
別のアルゴリズムを使用して列を暗号化することもできます。また、列に索引を付ける場合は、NO SALT
を指定できます。
暗号化されていない列を暗号化するには、ALTER TABLE MODIFY
コマンドを使用し、ENCRYPT
句で暗号化されていない列を指定します。例8-9では、employee
表のfirst_name
列を暗号化しています。
first_name
列は、デフォルトのAES192
アルゴリズムを使用して暗号化されます。saltはデフォルトでデータに追加されます。
別のアルゴリズムを使用して列を暗号化することもできます。また、列に索引を付ける場合は、NO SALT
を指定できます。NOMAC
パラメータを使用して、整合性チェックを省略することもできます。例8-10では、NOMAC
パラメータを使用してemployee表のfirst_name
列を暗号化しています。
互換性やパフォーマンスの理由から、暗号化を無効にすることが必要になる場合があります。列の暗号化を無効にするには、ALTER TABLE MODIFY
コマンドを使用し、DECRYPT
句を指定します。例8-11では、employee
表のfirst_name
列を復号化しています。
暗号化列に対して索引を作成するには、標準の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 )が発生します。 |
ソルトは、暗号化されたデータのセキュリティを強化する方法で、暗号化される前のデータに追加されるランダムな文字列です。これは、暗号化の前にデータに付加されるランダムな文字列です。これにより、同じ平文データが常に同じ暗号化テキストに変換されることがなくなります。saltを追加することで、攻撃者がデータを盗むために使用する一般的な方法の1つである暗号化テキストのパターン一致を排除できます。saltを追加するには、暗号化されたデータ値ごとに16バイトの追加記憶域が必要です。
暗号化列に対してsaltを追加または削除するには、ALTER TABLE MODIFY
コマンドを使用します。例8-13では、saltを使用してfirst_name
列を暗号化しています。first_name
列が以前にsaltなしで暗号化されていた場合は、このコマンドによって、saltを使用して列が再暗号化されます。
例8-14では、first_name
列からsaltを削除しています。saltを使用して暗号化された列に索引を付ける必要がある場合は、索引を付ける前に、このコマンドを使用してsaltを削除します。
各表の列には1つの表キーのみ指定できます。表キーはALTER TABLE
コマンドを使用して再生成できます。新しい表キーに対して別の暗号化アルゴリズムを使用することを選択することもできます。
例8-15では、employee
表に対する表キーを再生成しています。
例8-16では、3DES168
アルゴリズムを使用してemployee
表に対する表キーを再生成しています。
この機能では、次のデータ型を暗号化できます。
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に、各種データ型の最大許容サイズを示します。
注意: TDE表領域暗号化には、これらのデータ型制限はありません。 |
TDE列暗号化では、SQLレイヤーでデータの暗号化と復号化を処理します。したがって、SQLレイヤーをバイパスするOracle Databaseのユーティリティや機能では、TDE列暗号化によるサービスを利用できません。TDE列暗号化は、次のデータベース機能と併用しないでください。
Bツリー以外の索引タイプ
索引内のレンジ・スキャン検索
また、TDE列暗号化では、外部キー制約で使用される列は暗号化できません。
サポート対象外のこれらの機能が必要なアプリケーションでは、DBMS_CRYPTO
パッケージを使用して暗号化を実行できます。
関連項目: 『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_CRYPTOに関する項を参照してください。 |
TDEでは、ディスクやメディアに格納されているデータを保護します。転送中のデータは保護対象外です。ネットワーク上のデータを暗号化するには、第2章「構成ツールと管理ツールの概要」に記載されているOracle Advanced Securityのネットワーク暗号化ソリューションを使用してください。
TDE表領域暗号化を使用するには、Oracle Database 11g リリース1 (11.1)以上を実行する必要があります。以前のリリースからアップグレードした場合は、データベースの互換性が11.0.0以上に設定されています。
Oracle Database 11g リリース2 (11.2)の強化された表領域暗号化機能を使用するには、データベースの互換性を11.2以上に設定する必要があります。
注意: COMPATIBLE 初期化パラメータを使用して更新したデータベース互換性を元に戻すことはできません。 |
次の手順では、TDE表領域暗号化の使用方法について説明します。
表領域を暗号化または復号化するには、マスター暗号化鍵を事前に生成または設定しておく必要があります。表領域のマスター暗号化鍵は外部セキュリティ・モジュールに格納され、TDE表領域暗号化鍵を暗号化する際に使用されます。
sqlnet.o
ra
ファイルの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
コマンドを再発行して、統合マスター暗号化鍵を作成する必要があります。
Oracle Database 11g リリース2 (11.2)では、TDE列暗号化とTDE表領域暗号化の両方で統合マスター暗号化鍵が使用されます。TDE列暗号化用にマスター暗号化鍵を再設定する(rekey
)と、TDE表領域暗号化用のマスター暗号化鍵も再設定されます。
ALTER SYSTEM SET ENCRYPTION KEY
コマンドを使用すると、表領域のマスター暗号化鍵が再設定されます。マスター暗号化鍵の再設定の詳細は、「マスター暗号化鍵の設定および再設定」を参照してください。
暗号化された表領域を作成するには、表領域のマスター暗号化鍵が格納されているOracleウォレットを事前に開く必要があります。また、このウォレットは、暗号化された表領域のデータにアクセスする前に開いている必要があります。Oracleウォレットを開く方法の詳細は、「暗号化ウォレットのオープンおよびクローズ」を参照してください。
注意: セキュリティ管理者は、Oracleインスタンスを開始した後にOracleウォレットを開く必要があります。Oracleインスタンスを再開するには、セキュリティ管理者がウォレットを再度開く必要があります。 |
セキュリティ管理者は、データベースのリカバリ操作を実行する前にもウォレットを開く必要があります。これは、バックグラウンド・プロセスで、暗号化されたREDOログおよびUNDOログへのアクセスが必要になる可能性があるためです。データベースのリカバリを実行するときは、データベースを開く前にウォレットを開く必要があります。次に例を示します。
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password";
SQL> ALTER DATABASE OPEN;
ウォレットを明示的に開くことを義務付けてセキュリティを強化する必要がない環境においては、自動ログイン・ウォレットを使用することを選択することもできます。
暗号化された表領域は、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
です。
注意:
|
関連項目: 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言語リファレンス』 を参照してください。 |
TDE表領域暗号化では、読取り/書込み操作中にデータを暗号化または復号化します。対照的に、TDE列暗号化では、SQLレイヤーでデータを暗号化または復号化します。このことは、データ型制限、索引タイプ制限など、TDE列暗号化に適用される制限のほとんどが、TDE表領域暗号化には適用されないことを意味します。
次のリストは、TDE表領域暗号化に適用される制限を示します。
TDE表領域暗号化を使用して外部ラージ・オブジェクト(BFILE
)を暗号化することはできません。これらのファイルはデータベース外部に存在するためです。
インポートおよびエクスポート操作を実行するには、Oracle Data Pumpを使用します。
ハードウェア・セキュリティ・モジュール(HSM)は、暗号化鍵のために安全な記憶域を提供する物理的なデバイスです。また、暗号化および復号化操作を実行するための安全な計算領域(メモリー)も提供します。HSMは、Oracleウォレットにかわる安全性の高い代替手段です。
TDEでは、HSMを使用して機密データのセキュリティを強化できます。HSMは、TDEに使用されるマスター暗号化鍵の格納に使用されます。HSMは物理的なデバイスであり、オペレーティング・システム・ファイルではないため、鍵は不正アクセス試行から保護されます。マスター暗号化鍵を使用する暗号化および復号化操作はすべて、HSMの内部で実行されます。これは、安全性の低いメモリーにマスター暗号化鍵がさらされないことを意味します。
HSMを使用するには、HSMデバイスの初期設定が必要になります。また、HSMを使用するようにTDEを構成する必要もあります。初期設定が終了したら、HSMをOracleソフトウェア・ウォレットと同様に使用できます。次の手順では、ハードウェア・セキュリティ・モジュールの構成および使用について説明します。
ENCRYPTION_WALLET_LOCATION
パラメータでは、Oracleウォレットの場所を指定します。ソフトウェア・ウォレットのかわりにHSMが使用されるようにするには、このパラメータを変更する必要があります。
ENCRYPTION_WALLET_LOCATION
パラメータを設定するには、次の手順を実行します。
sqlnet.ora
ファイルを開きます。このファイルは、$ORACLE_HOME/network/admin
ディレクトリにあります。
次のように、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)などのツールでソフトウェア・ウォレットの場所を特定するために必要になる場合があります。 |
ファイルを保存して閉じます。
関連する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ライブラリを以前のベンダーのものから新しいベンダーのものに置換してください。 |
HSMインタフェースを設定するための指示は、HSMベンダーによって提供されます。HSM管理インタフェースを使用し、ベンダーの指示に従ってHSMを設定してください。データベースでHSMとの相互作用に使用されるユーザー・アカウントとパスワードを作成します。
注意: HSMは、HSM管理者またはTDEの管理を担当するセキュリティ管理者が設定します。 |
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_Id とpassword は自動的には作成されません。これらは、ALTER SYSTEM SET ENCRYPTION KEY コマンドを発行する前に、HSM管理インタフェースを使用して設定しておく必要があります。これは、Oracleウォレットに使用される手順とは異なります。Oracleウォレットの場合、ALTER SYSTEM SET ENCRYPTION KEY コマンドを発行する前の事前設定は不要です。 |
透過的データ暗号化をすでに使用していて、HSMを使用していない場合は、前述のコマンドでMIGRATE USING
wallet_password
句を使用する必要があります。この句は、既存の表キーを復号化して、新しく作成したHSMベースのマスター暗号化キーで再度暗号化します。
注意: データベースに公開鍵によって暗号化された列が含まれている場合は、その列が復号化されてから、HSMベースの透過的データ暗号化によって生成されたAES対称鍵を使用して再暗号化されます。 |
この手順は、暗号化データをエクスポートした場合、またはソフトウェア・ウォレットを使用して暗号化バックアップを作成した場合に適用されます。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
の拡張子で識別されます。自動ログイン・ウォレットは、ウォレットを明示的に開くことを義務付けてセキュリティを強化する必要がない環境でのみ使用してください。
ローカルの自動ログイン・ウォレットを作成することもできます。ローカルの自動ログイン・ウォレットを別のコンピュータに移動することはできません。それらは作成されたホストで使用する必要があります。
関連項目:
|
セキュリティ管理者は、暗号化または復号化を実行する前に、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
)
HSMの使用はエンド・ユーザーに透過的です。暗号化列を含む表を作成するコマンド、暗号化データにアクセスするコマンド、またはデータを復号化するコマンドは、マスター暗号化鍵がOracleウォレットにある場合もHSMにある場合も同じです。
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ノードは、構成されると、現在のウォレットのステータス(オープンまたはクローズ)を認識します。
ウォレットの格納に共有ファイル・システムを使用しない場合は、マスター鍵を再設定した後、ウォレットをすべてのノードにコピーする必要があります。データベースのマスター暗号化鍵を再設定する必要がある場合は、次の手順を実行します。
最初のOracle RACノードのマスター暗号化鍵を再設定します。次のコマンドを使用します。詳細は、「マスター暗号化鍵の設定および再設定」を参照してください。
新しいマスター暗号化鍵が格納されたウォレットを最初のノードから他のすべてのノードにコピーします。
任意のノードのウォレットを閉じてから再度開きます。次のコマンドを使用します。
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ノードで新しいマスター暗号化鍵が使用されるようになりました。
この項の内容は次のとおりです。
透過的データ暗号化(TDE)では、マスター暗号化鍵はOracleウォレット内に格納されます。ウォレットは、セキュリティ管理者が明示的に開くことを必要としないで、暗号化データにアクセスできる自動ログイン・ウォレットにすることもできます。
TDEでは、使用するウォレットを決定する際、最初にパラメータENCRYPTION_WALLET_LOCATION
で指定されているウォレットの使用が試行されます。このパラメータが設定されていない場合は、パラメータWALLET_LOCATION
で指定されているウォレットの使用が試行されます。このことも失敗した場合は、TDEによりデフォルトのデータベースの場所でウォレットが検索されます。
TDEで使用されるマスター暗号化鍵の格納には、別のウォレットを使用することをお薦めします。別のウォレットを指定するには、sqlnet.ora
ファイルのENCRYPTION_WALLET_LOCATION
パラメータが、TDE専用のウォレットを指すように設定します。
自動ログイン・ウォレットは、Oracle Wallet Managerまたはorapki
コマンドライン・ユーティリティを使用して作成できます。自動ログイン・ウォレットを使用すると、データベース・インスタンスの再起動をまたいで暗号化データにアクセスすることが容易になります。
注意: 自動ログイン・ウォレット(.sso ファイル)を作成した後、PKCS#12 ウォレット(ewallet.p12 ファイル)を削除しないでください。将来、PKCS#12 ウォレットでマスター暗号化鍵を再生成/再設定する必要があります。 |
TDEで自動ログイン・ウォレットが使用されるのは、その自動ログイン・ウォレットが正しい場所(ENCRYPTION_WALLET_LOCATION
、
WALLET_LOCATION
またはデフォルトのウォレット・ロケーション)にあり、暗号化ウォレットを開くSQLコマンドがまだ実行されていない場合のみです。自動ログイン・ウォレットの使用中は、
ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY
"password
"コマンドを使用しないでください。
関連項目:
|
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY
"password
"コマンドを使用してマスター暗号化鍵を作成すると、TDEによって、ウォレットがデフォルトまたは指定の場所に存在しているかどうかがチェックされます。ウォレットが存在しない場合は、自動的に作成されます。
SQLコマンド以外に、Oracle Wallet Managerを使用してウォレットを作成することもできます。Oracle Wallet Managerは、ウォレットの作成とそのコンテンツの表示および変更が可能なフル機能のツールです。
orapki
コマンドのようなユーティリティを使用してウォレットを作成することもできます。
この項の内容は次のとおりです。
暗号化データには、マスター暗号化鍵なしでアクセスすることはできません。マスター暗号化鍵はOracleウォレットに格納されるため、ウォレットは安全な場所に定期的にバックアップする必要があります。新しいマスター暗号化鍵を設定するたびにウォレットのバックアップ・コピーを作成する必要があります。
Oracleウォレットは、暗号化データと一緒にバックアップしないでください。ウォレットは個別にバックアップする必要があります。自動ログイン・ウォレットを使用している場合は、開くときにパスワードが要求されないため、特に注意してください。バックアップ・テープの紛失に備えて、悪意のあるユーザーが暗号化データとウォレットの両方を取得できないようにすることが大切です。
Recovery Manager (RMAN)では、ウォレットはデータベース・バックアップの一環としてバックアップされません。Oracle Secure Backup (OSB)などのメディア・マネージャをRMANと併用している場合は、OSBによって、自動オープン・ウォレット(cwallet.sso
ファイル)がバックアップ対象から自動的に除外されます。ただし、暗号化ウォレット(ewallet.p12
ファイル)は自動的には除外されません。次のexcludeデータセット文をOSB構成に追加することをお薦めします。
exclude name *.p12
この文では、バックアップ・セットから暗号化ウォレットを除外するようにOSBに指示します。
マスター暗号化鍵を格納しているウォレットを喪失した場合は、ウォレットのバックアップを適切な場所にコピーすることで、暗号化データへのアクセスをリストアできます。リストアしたウォレットがマスター暗号化鍵の前回の再設定後にアーカイブされたものである場合、追加処置の必要はありません。
リストアしたウォレットに最新のマスター暗号化鍵が含まれていない場合に、古いデータをマスター暗号化鍵が再設定された時点までリカバリするには、データベースの状態をその時点までロールバックします。マスター暗号化鍵の再設定後に暗号化列に対して行われた変更はすべて失われます。
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
固定ビューを問い合せます。
暗号化列を含む表をエクスポートする場合は、次の点が重要になります。
転送中も機密データが解読されないよう保つ必要があります。
権限のあるユーザーは、宛先にインポートされたデータを復号化できる必要があります。
暗号化列を含む表のエクスポートとインポートには、Oracle Data Pumpユーティリティを使用できます。Oracle Data Pumpでは、ENCRYPTION
パラメータを利用してダンプ・ファイル・セットのデータを暗号化できるようにします。ENCRYPTION
パラメータには、次の値を指定できます。
ENCRYPTED_COLUMNS_ONLY
: 暗号化列が暗号化された形式でダンプ・ファイル・セットに書き込まれます。
DATA_ONLY
: すべてのデータが暗号化された形式でダンプ・ファイル・セットに書き込まれます。
METADATA_ONLY
: すべてのメタデータが暗号化された形式でダンプ・ファイル・セットに書き込まれます。
ALL
: すべてのデータとメタデータが暗号化された形式でダンプ・ファイル・セットに書き込まれます。
NONE
: ダンプ・ファイル・セットに対して暗号化は使用されません。
次の手順では、ENCRYPTION=ENCRYPTED_COLUMNS_ONLY
を使用して、暗号化列を含む表をエクスポートおよびインポートする方法について説明します。
暗号化列を含む表をエクスポートする前に、暗号化ウォレットが開いていることを確認する必要があります。これは、暗号化列の復号化には表キーを使用する必要があり、そのためにはマスター暗号化鍵にアクセスする必要があるためです。列は、エクスポートされる前にパスワードを使用して再暗号化されます。
エクスポート・ダンプ・ファイル・セットの列データを暗号化する際に使用するパスワードは、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
ターゲット・データベースにデータをインポートする際は、同じパスワードを指定する必要があります。このパスワードは、データの復号化に使用されます。データは、ターゲット・データベースに生成された新しい表キーを使用して再暗号化されます。ターゲット・データベースがマスター暗号化鍵にアクセスするためには、ウォレットが開いている必要があります。次に、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
を使用すると、ウォレットに格納されているマスター暗号化鍵を使用してダンプ・ファイル・セットを透過的に暗号化できます。この場合、パスワードは不要です。インポートの過程で復号化が正常に実行されるのは、ターゲット・データベースにウォレットが存在し、開いている場合のみです。この開いているウォレットは、ターゲット・データベースで列暗号化データを再暗号化する際にも必要です。
関連項目:
|
透過的データ暗号化(TDE)に関連するオーバーヘッドは、次のように分類されます。
TDE表領域暗号化には、わずかなオーバーヘッドが伴います。アプリケーションのパフォーマンスに対する実際の影響は様々ですが、約5%から8%までと推定されます。
TDE列暗号化がパフォーマンスに影響を与えるのは、暗号化列に対してデータの取得または挿入が行われた場合のみです。暗号化されていない列に関係する操作の場合は、これらの列が暗号化列を含む表内にあっても、パフォーマンスが低下することはありません。
暗号化列のデータへのアクセスには、わずかなオーバーヘッドが伴います。一般的な属性(クレジット・カード番号など)の暗号化または復号化に関連するオーバーヘッドは、約5%と推定されます。これは、SELECT
操作(復号化に必要)またはINSERT
操作(暗号化に必要)で、クリアテキスト・データで取得する場合よりも約5%長い時間が必要になることを意味します。
全体的なパフォーマンスのオーバーヘッドは、暗号化列の数とそのアクセス頻度によって異なります。暗号化するのが最も妥当な列は、最高機密のデータを含む列です。
既存の表で暗号化を有効化すると、表の特性を変更する他のALTER TABLE
操作と同様に、完全な表更新が行われます。管理者は、大規模な既存の表で暗号化を有効化する前に、データベース・サーバーに与えるパフォーマンスおよびREDOログの潜在的な影響を考慮する必要があります。
表に対する書込み操作は、暗号化の有効化中、表キーの再設定中または暗号化アルゴリズムの変更中は一時的に実行できなくなる場合があります。このような処理が実行されている場合は、表のオンライン再定義を使用して、表への書込み操作が可能かどうかを確認できます。
関連項目: 『Oracle Database管理者ガイド』のオンラインでの表の再定義に関する項を参照してください。 |
大規模な表に対してTDE列暗号化を有効化している場合は、操作に対応できるよう、REDOログのサイズを大きくする必要があることがあります。
索引付けされた列の暗号化には、索引のない列の暗号化よりも多くの時間を要することもすでに判明しています。索引が作成された列を暗号化する必要がある場合は、索引を削除してから列をNO SALT
で暗号化し、その後で索引を再度作成できます。
暗号化列に索引を付ける場合、索引は暗号化された値に対して作成されます。暗号化列の値を問い合せると、SQL問合せで使用される値が透過的に暗号化されます。その後、暗号化された値を使用して、索引の参照が実行されます。
注意: 索引付けされた暗号化列のレンジ・スキャンを実行する必要がある場合は、TDE列暗号化のかわりにTDE表領域暗号化を使用します。 |
TDE表領域暗号化には、記憶域のオーバーヘッドはありません。ただし、TDE列暗号化には、記憶域のオーバーヘッドが多少伴います。暗号化列のデータには、クリアテキスト・データより多くの記憶域が必要です。さらに、TDEでは、暗号化された値が16バイトの倍数に拡張されます。これは、クレジット・カード番号の格納に9バイトが必要な場合、クレジット・カード番号を暗号化して格納するには、さらに7バイトが必要になることを意味します。
暗号化された各値は、20バイトの整合性チェックにも関連付けられます。これは、NOMAC
パラメータを使用して列を暗号化した場合には当てはまりません。また、saltを使用してデータを暗号化した場合は、暗号化された各値を格納するために、さらに16バイトの記憶域が必要になります。
暗号化された各値の記憶域の最大オーバーヘッドは52バイトです。
透過的データ暗号化(TDE)を使用する場合のセキュリティに関する考慮事項は、全システム・セキュリティの広範囲に適用されます。セキュリティ管理者は、対処するリスクのレベルとサイトで保持されるデータの機密度を識別する必要があります。別の方法を使用して許容レベルの保護を実現する場合は、コストと利点を評価する必要があります。一般的に、暗号化データに対して、個別のセキュリティ管理者、TDE用の個別のウォレット、およびバックアップ保護手順を用意すると有益です。TDE用の個別ウォレットを設定すると、他のOracleコンポーネントに対して自動ログインは許可されますが、TDEウォレットに対するパスワード保護は保持されます。
セキュリティに関するその他の考慮事項は、TDEを使用している場合の通常のデータベース操作およびネットワーク操作に適用されます。暗号化列のデータは、データ・ファイル、UNDOログ、REDOログおよびシステム・グローバル領域(SGA)のバッファ・キャッシュ内では暗号化されたままになります。一方、データは式の評価時に復号化されるため、ディスク上のスワップ・ファイルには復号化後のデータを表示できます。権限のあるオペレーティング・システム・ユーザーは、このデータを表示できる可能性があります。
TDEを使用して暗号化された列値は、暗号化された形式でデータ・ファイルに格納されます。ただし、これらのデータ・ファイルには、表に対する過去のデータ操作で残されたゴースト・コピーと呼ばれるクリアテキストの断片が含まれている場合があります。これは、オペレーティング・システムによってファイルが削除された後に、ディスク上にデータが残存している場合に類似しています。
古いクリアテキストの断片は、それらの値を含んでいるブロックがデータベースによって上書きされるまで、しばらく存在し続ける可能性があります。権限のあるオペレーティング・システム・ユーザーがデータベースのアクセス制御をバイパスした場合、表領域を保持するデータ・ファイル内のこれらの値に直接アクセスされる可能性があります。このリスクを最小限に抑えるには、次の手順を実行します。
新しいデータ・ファイルに新しい表領域を作成します。CREATE TABLESPACE
文を使用できます。
暗号化列を含む表を新しい表領域に移動します。ALTER TABLE.....MOVE
文を使用できます。元の表領域のすべてのオブジェクトについて、この手順を繰り返します。
元の表領域を削除します。DROP TABLESPACE
tablespace
INCLUDING CONTENTS KEEP DATAFILES
文を使用できます。データ・ファイルは、プラットフォーム固有のユーティリティを使用して安全に削除することをお薦めします。
古いデータ・ファイルを安全に削除するには、プラットフォームおよびファイル・システムに固有のユーティリティを使用してください。このようなユーティリティの例には、shred
(Linuxの場合)やsdelete
(Windowsの場合)などがあります。
同じサーバーに複数のOracle Databaseがインストールされている場合(同じOracleバイナリを共有しているが異なるデータファイルを使用しているデータベースなど)、各データベースはそれぞれ独自の透過的データ暗号化ウォレットにアクセスする必要があります。ウォレットは、データベース間で共有されるようには設計されていません。設計によって、データベースごとに1つのウォレットが必要となっています。複数のデータベースに同じウォレットを使用することはできません。
複数データベース環境に対してsqlnet.ora
ファイルを構成するには、次のオプションを使用します。
データベースが同じOracleホームを共有する場合、sqlnet.ora
ファイルをデフォルトの場所(ORACLE_HOME
/network/admin
ディレクトリ)に保持します。
この場合、デフォルトの場所を使用することをお薦めします。sqlnet.ora
ファイルに、WALLET_LOCATION
またはENCRYPTION_WALLET_LOCATION
エントリがないことを確認します。これらの2つのエントリがsqlnet.ora
ファイルにない場合、透過的データ暗号化は、デフォルトのsqlnet.ora
の場所からウォレットにアクセスします。
オプション1がご使用のサイトで実行可能な場合、ORACLE_SID
のような環境変数設定に基づき、ウォレットの場所を指定できます。次に例を示します。
ENCRYPTION_WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /home/oracle/wallet/$ORACLE_SID)
オプション1および2が実行可能でない場合、個別のsqlnet.ora
ファイルを各データベースにつき1つ使用します。TNS_ADMIN
環境変数が、正しいデータベース構成を指すように正確に設定されていることを確認します。TNS_ADMIN
変数の詳細および設定例は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。
注意: 他のデータベースからウォレットを使用することによって、データの一部または全部が失われる可能性があります。 |
Oracle Data Guardでは、透過的データ暗号化(TDE)がサポートされています。プライマリ・データベースでTDEを使用する場合、Data Guard構成の各スタンバイ・データベースには、プライマリ・データベースからの暗号化ウォレットのコピーが必要です。プライマリ・データベースでマスター暗号化鍵を再設定した場合は、そのマスター暗号化鍵が格納されているウォレットを各スタンバイ・データベースにコピーする必要があります。
データをスタンバイ・データベースに転送する場合、ログ・ファイル内の暗号化データは暗号化されたままです。暗号化データは転送中も暗号化されたままです。
関連項目: TDEとロジカル・スタンバイ・データベースの併用の詳細は、『Oracle Data Guard概要および管理』ガイドの付録Cを参照してください。 |
TDEは、SQL*Loaderのダイレクト・パス・ロードと連携します。暗号化列にロードされるデータは、ダイレクト・パス・ロードの過程で透過的に暗号化されます。
マテリアライズド・ビューは、TDE表領域暗号化と連携します。暗号化表領域にはマテリアライズド・ビューとマテリアライズド・ビュー・ログの両方を作成できます。
マテリアライズド・ビューは、TDE列暗号化とも連携します。ただし、マテリアライズド・ビュー・ログには、暗号化列を含めることができません。
関連項目: マテリアライズド・ビューの詳細は、『Oracle Databaseアドバンスト・レプリケーション』ガイドのマテリアライズド・ビューの概念とアーキテクチャに関する項を参照してください。 |
表領域暗号化を使用すると、Oracle Databaseでは表領域を暗号化する前に表および索引を圧縮します。これにより、圧縮から最大領域およびパフォーマンスにおける恩恵を受けるとともに、停止している暗号化のセキュリティも確保します。CREATE TABLESPACE
SQL文に、COMPRESS
句とENCRYPT
句の両方を含めます。
列暗号化を使用すると、Oracle Databaseでは列を暗号化した後でデータを圧縮します。これは、圧縮には、暗号化された列で最小限の有効性があることを意味します。注目すべき例外が1つあります。列がSecureFiles LOBであり、暗号化がSecureFiles LOB暗号化を使用して実装され、圧縮(重複除外の場合もあり)がSecureFiles LOB圧縮および重複除外を使用して実装されている場合、圧縮は暗号化の前に実行されます。表領域暗号化のためのCREATE TABLESPACE
文と同様に、COMPRESS
句とENCRYPT
句の両方を含めます。
関連項目:
|
行を使用可能にする鍵は受信ポイントでは使用できないため、行の送信は使用できません。
同じサーバーに複数のOracle Databaseがインストールされている場合(同じOracleバイナリを共有しているが異なるデータファイルを使用しているデータベースなど)、各データベースはそれぞれ独自の透過的データ暗号化キーストアにアクセスする必要があります。ウォレットは、データベース間で共有されるようには設計されていません。設計によって、データベースごとに1つのウォレットが必要となっています。複数のデータベースに同じウォレットを使用することはできません。
複数データベース環境に対してsqlnet.ora
ファイルを構成するには、次のオプションを使用します。
データベースが同じOracleホームを共有する場合、sqlnet.ora
ファイルをデフォルトの場所(ORACLE_HOME
/network/admin
ディレクトリ)に保持します。
この場合、デフォルトの場所を使用することをお薦めします。sqlnet.ora
ファイルに、WALLET_LOCATION
またはENCRYPTION_WALLET_LOCATION
エントリがないことを確認します。これらの2つのエントリがsqlnet.ora
ファイルにない場合、透過的データ暗号化は、デフォルトのsqlnet.ora
の場所からウォレットにアクセスします。
オプション1がご使用のサイトで実行可能な場合、ORACLE_SID
のような環境変数設定に基づき、ウォレットの場所を指定できます。次に例を示します。
ENCRYPTION_WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /home/oracle/wallet/$ORACLE_SID)
オプション1および2が実行可能でない場合、個別のsqlnet.ora
ファイルを各データベースにつき1つ使用します。TNS_ADMIN
環境変数が、正しいデータベース構成を指すように正確に設定されていることを確認します。TNS_ADMIN変数の詳細および設定例は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。
注意: 他のデータベースからキーストアを使用することによって、データの一部または全部が失われる可能性があります。 |
次のデータ・ディクショナリ・ビューには、暗号化の詳細、表領域およびウォレットの詳細に関する情報が保持されます。
ALL_ENCRYPTED_COLUMNS
ALL_ENCRYPTED_COLUMNS
ビューには、現在のユーザーがアクセスできる表内の暗号化列に関する暗号化情報が表示されます。表8-2に、このビューに含まれる情報を示します。
表8-2 ALL_ENCRYPTED_COLUMNSデータ・ディクショナリ・ビューの説明
列 | データ型 | NULL | 説明 |
---|---|---|---|
|
|
|
表の所有者。 |
|
|
|
表の名前。 |
|
|
|
列の名前 |
|
|
この表のデータの機密性を保護するために使用される暗号化アルゴリズム:
|
|
|
|
列がSALTを使用して暗号化されているかどうか( |
|
|
|
表に使用される整合性アルゴリズム:
|
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に、このビューに含まれる情報を示します。
V$WALLET
V$WALLET
ビューには、TDEのマスター鍵として使用されるPKI証明書のメタデータ情報が表示されます。表8-4に、このビューに含まれる情報の概要を示します。
表8-4 V$WALLETビューの説明
列 | データ型 | 説明 |
---|---|---|
|
|
マスター・キーとして使用する特定のPKI証明書を指定するための一意の証明書識別子の値 |
|
|
特定のPKI証明書の識別名 |
|
|
発行者または署名者が証明書に割り当てた一意のシリアル番号 |
|
|
証明書を発行または署名した認証局または発行者の識別名 |
|
|
証明書に関連付けられたPKI鍵のサイズ |
|
|
証明書の現在の状態:
ユーザーは、この列を参照して、証明書が現在使用中かどうか、すでに透過的なデータベース暗号化に使用されているかどうかを識別できます。 |
V$ENCRYPTION_WALLET
V$ENCRYPTION_WALLET
には、TDEのウォレットおよびウォレット・ロケーションのステータスに関する情報が表示されます。表8-5に、このビューに含まれる情報の概要を示します。
関連項目: これらのデータ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。 |
この項では、TDE列暗号化とTDE表領域暗号化を開始する上で役立つチュートリアル・アプローチを使用します。次の各タスクについてサンプル・シナリオを使用して説明します。
透過的データ暗号化(TDE)を初めて使用する場合は、最初にデータベースを準備します。そのためには、Oracleウォレット・ロケーションを指定してマスター暗号化鍵を設定する必要があります。データベースでTDEを使用できるように準備するには、次の手順を実行します。
$ORACLE_HOME/network/admin
にあるsqlnet.ora
ファイルを開きます。ファイルの末尾に、次の行を入力します。
ENCRYPTION_WALLET_LOCATION= (SOURCE=(METHOD=FILE)(METHOD_DATA= (DIRECTORY=/app/wallet)))
変更を保存して、ファイルを閉じます。
注意: 暗号化ウォレットには任意のディレクトリを選択できますが、そのパスでは、データベースのインストール時に作成した不明瞭化された標準ウォレット(cwallet.sso )を指定しないでください。 |
次に、表キーの暗号化に使用されるマスター暗号化鍵を作成する必要があります。マスター暗号化鍵を作成するには、次のコマンドを入力します。
SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "Easy2rem";
このコマンドによって、次の処理が実行されます。
暗号化ウォレットが指定のディレクトリに存在しない場合は、暗号化ウォレット(ewallet.p12
)が作成され、このウォレットが開かれて、TDE用のマスター暗号化鍵が作成(または再作成)されます。
暗号化ウォレットが指定のディレクトリに存在する場合は、そのウォレットが開かれて、TDE用のマスター暗号化鍵が作成(または再作成)されます。
注意:
|
Oracleウォレットは、データベースが停止するたびに閉じます。このウォレットは明示的に閉じることもできます。
暗号化または復号化の操作を実行するには、Oracleウォレットが開いていることを事前に確認する必要があります。マスター暗号化鍵が格納されているウォレットを開くには、次のコマンドを使用します。
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "Easy2rem";
注意: このコマンドで使用したパスワードは、マスター暗号化鍵の作成で使用したパスワードと同じです。このパスワードは、ウォレットを開き、マスター暗号化鍵をアクセス可能にするためのパスワードになります。 |
次に、暗号化列を含む表を作成できます。ここでは、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
列に入力されたデータはすべて、暗号化された形式でディスク上に格納されます。
saltなしで列を暗号化した場合は、その暗号化列に対して索引を作成できます。ここでは、credit_card_number
列に対して索引を作成します。credit_card_number
列に対して索引を作成するには、次のコマンドを使用します。
CREATE INDEX cust_payment_info_idx ON cust_payment_info (credit_card_number);
既存の表は、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
列の既存のデータはすべて、ディスク上で暗号化されます。データへのアクセス権があるユーザーには、データが透過的に復号化されます。
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.
暗号化された表領域に表を作成すると、表内のデータはすべて、暗号化された形式でディスク上に格納されます。次のコマンドを使用して、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.
この項では、透過的データ暗号化(TDE)の構成時および使用時に表示される可能性がある一般的なエラー・メッセージを示します。エラー・メッセージの一般的な原因および考えられる解決策についても示します。
この項の内容は次のとおりです。
デフォルトでは、透過的データ暗号化(TDE)には、192ビット長の暗号鍵で暗号化するAdvanced Encryption Standard (AES192)が使用されます。また、特に指定しないかぎり、暗号化の前にクリアテキストにsaltがデフォルトで追加されます。暗号化の対象となる索引付けされた列にはsaltを追加できないことに注意してください。索引付けされた列に対しては、SQL ENCRYPT
句でNO SALT
パラメータを選択します。
既存の暗号化列の暗号化アルゴリズムおよび暗号化鍵を変更するには、SQL ENCRYPT
句で別のアルゴリズムを設定します。
表8-6に、サポートされる暗号化アルゴリズムを示します。
表8-6 透過的データ暗号化でサポートされる暗号化アルゴリズム
アルゴリズム | 鍵サイズ | パラメータ名 |
---|---|---|
Triple-DES (Data Encryption Standard) |
168ビット |
|
AES (Advanced Encryption Standard) |
128ビット |
|
AES |
192ビット(デフォルト) |
|
AES |
256ビット |
|
整合性保護のために、SHA-1
ハッシュ・アルゴリズムが使用されます。
表8-7に、透過的データ暗号化の実装および管理に使用可能なSQLコマンドのサマリーを示します。
表8-7 透過的データ暗号化のSQLコマンドのクイック・リファレンス