5 表の列の暗号化
透過的データ暗号化を使用すると、データベース表の個々の列を暗号化できます。
- 表の列の暗号化について
表の個々の列を暗号化できます。 - TDE列暗号化で暗号化できるデータ型
Oracle Databaseでは、TDE列暗号化で使用できる特定のセットのデータ型をサポートしています。 - TDE列暗号化の使用に関する制限
TDE列暗号化は、SQLレイヤーで実行されます。SQLレイヤーをバイパスするOracle Databaseユーティリティは、TDEの列暗号化サービスを使用できません。 - 暗号化列を含む表の作成
Oracle Databaseには、暗号化列に使用される暗号化を定義するために使用できる様々なアルゴリズムが用意されています。 - 既存の表にある列の暗号化
既存の表にある列を暗号化できます。新しい表の場合、暗号化の定義に使用する様々なアルゴリズムを選択できます。 - 暗号化列に対する索引の作成
暗号化された列に対して索引を作成できます。 - 暗号化列へのSaltの追加
Saltは、暗号化される前のデータに追加されるランダムな文字列で、暗号化されたデータのセキュリティを強化する方法です - 暗号化列からのSaltの削除
ALTER TABLE SQL文を使用して、暗号化列からsaltを削除できます。 - 暗号化列を含む表に対する暗号化キーまたはアルゴリズムの変更
ALTER TABLE
SQL文を使用して、暗号化列で使用される暗号化キーまたはアルゴリズムを変更できます。 - 最新サポート済アルゴリズムへの表のアルゴリズムの移行
すでに暗号化された表の列を再暗号化すると、以前のアルゴリズム(3DES168
など)を最新のサポート済アルゴリズムに移行できます。
親トピック: 透過的データ暗号化の使用
5.1 表の列の暗号化について
表の個々の列を暗号化できます。
個々の列または表領域全体のどちらを暗号化するかは、表のデータ型によって決まります。また、TDE列暗号化をサポートしていない機能もいくつかあります。
親トピック: 表の列の暗号化
5.2 TDE列暗号化で暗号化できるデータ型
Oracle Databaseでは、TDE列暗号化で使用できる特定のセットのデータ型をサポートしています。
様々なデータ型が使用されるデータ列を暗号化することができます。
サポートされるデータ型は次のとおりです。
-
BINARY_DOUBLE
-
BINARY_FLOAT
-
CHAR
-
DATE
-
INTERVALDAYTOSECOND
-
INTERVALYEARTOMONTH
-
NCHAR
-
NUMBER
-
NVARCHAR2
-
RAW
(レガシーまたは拡張) -
TIMESTAMP
(TIMESTAMP WITH TIME ZONE
およびTIMESTAMP WITH LOCAL TIME ZONE
を含む) -
VARCHAR2
(レガシーまたは拡張)
ラージ・バイナリ・オブジェクト(LOB)を暗号化する必要がある場合は、Oracle SecureFilesを使用できます。Oracle SecureFilesを使用すると、LOBデータを安全に格納できます。SecureFilesを使用してLOBを暗号化するには、CREATE TABLE
文またはALTER TABLE
文を使用します。
暗号化列のサイズが列のデータ型で許容されるサイズより大きい場合は、列を暗号化できません。
表5-1に、各種データ型の最大許容サイズを示します。
表5-1 各データ型の最大許容サイズ
データ型 | 最大サイズ |
---|---|
|
1932バイト |
|
3932バイト |
|
32,699バイト |
|
1966バイト |
|
16,315バイト |
|
966バイト |
|
32,699バイト |
ノート:
TDE表領域暗号化には、これらのデータ型制限はありません。
5.3 TDE列暗号化の使用に関する制限
TDE列暗号化は、SQLレイヤーで実行されます。SQLレイヤーをバイパスするOracle Databaseユーティリティは、TDEの列暗号化サービスを使用できません。
TDE列暗号化は、次のデータベース機能と併用しないでください。
-
Bツリー以外の索引タイプ
-
索引内のレンジ・スキャン検索
-
同期チェンジ・データ・キャプチャ
-
トランスポータブル表領域
-
ID列として作成された列
また、TDE列暗号化では、外部キー制約で使用される列は暗号化できません。
サポートされていないこれらの機能を使用する必要があるアプリケーションは、DBMS_CRYPTO
PL/SQLパッケージを使用して暗号化を実行できます。
透過的データ暗号化は、ディスクまたは他のメディアに格納されているデータを保護します。転送中のデータは保護対象外です。ネットワーク上のデータを暗号化するには、『Oracle Databaseセキュリティ・ガイド』に記載されているネットワーク暗号化ソリューションを使用します。
5.4 暗号化列を含む表の作成
Oracle Databaseには、暗号化列に使用される暗号化を定義するために使用できる様々なアルゴリズムが用意されています。
- 暗号化列を含む表の作成について
CREATE TABLE
SQL文を使用して、暗号化列を持つ表を作成できます。 - デフォルト・アルゴリズムを使用する暗号化列を含む表の作成
TDEでは、192ビットのキーの長さを使用するAES
暗号化アルゴリズム(AES192
)がデフォルトで使用されます。 - アルゴリズムを使用しないまたは非デフォルト・アルゴリズムを使用する暗号化列を含む表の作成
CREATE TABLE
SQL文を使用して、暗号化列を持つ表を作成します。 - NOMACパラメータを使用したディスク領域の節約およびパフォーマンスの向上
透過的データ暗号化(TDE)で実行するチェックを省略できます。この場合、暗号化された値ごとに20バイトのディスク領域を節約できます。 - 例: CREATE TABLE文でのNOMACパラメータの使用
CREATE TABLE
SQL文を使用し、NOMACパラメータを使用して表の列を暗号化できます。 - 例: 表の整合性アルゴリズムの変更
異なるオフライン表領域を並列で変換するには、異なるフォアグラウンドでALTER TABLE
SQL文を使用できます。 - 外部表への暗号化列の作成
外部表の機能を使用すると、データベース表内のデータであるかのように、外部ソースのデータにアクセスできます。
親トピック: 表の列の暗号化
5.4.1 暗号化列を含む表の作成について
CREATE TABLE
SQL文を使用して、暗号化列を持つ表を作成できます。
暗号化列を含むリレーショナル表を作成するには、CREATE TABLE
SQL文でデータベース列を定義するときにSQL ENCRYPT
句を指定します。
親トピック: 暗号化列を含む表の作成
5.4.2 デフォルト・アルゴリズムを使用する暗号化列を含む表の作成
TDEでは、192ビット長のキーを使用するAES
暗号化アルゴリズム(AES192
)がデフォルトで使用されます。
AES192
アルゴリズムを使用して暗号化されます。暗号化の前にTDEは、saltを平文に追加します。saltを追加すると、攻撃者が総当たり攻撃によってデータを盗むことがより困難になります。また、TDEにより整合性をチェックするために、データにメッセージ認証コード(MAC)が追加されます。デフォルトでは、SHA-1
整合性アルゴリズムが使用されます。(Oracle Databaseリリース21c以降、SHA-1
は非推奨になりました。TDE列暗号化を使用する場合は、かわりにTDE表領域暗号化を実装することをお薦めします。)
親トピック: 暗号化列を含む表の作成
5.4.3 アルゴリズムを使用しないまたは非デフォルト・アルゴリズムを使用する暗号化列を含む表の作成
CREATE TABLE
SQL文を使用して、暗号化列を持つ表を作成します。
NO SALT
パラメータを使用する必要があります。
- デフォルト以外のアルゴリズムの暗号化列、またはアルゴリズムなしの暗号化列を使用する表を作成するには、次のように
CREATE TABLE
SQL文を実行します。- アルゴリズムを使用しない場合は、
ENCRYPT NO SALT
句を含めます。 - デフォルト以外のアルゴリズムを使用する場合は、
ENCRYPT USING
句を使用し、その後に一重引用符で囲んだ次のいずれかのアルゴリズムを続けます。-
3DES168
-
AES128
-
AES192
(デフォルト) -
AES256
次の例では、
empID
列およびsalary
列の暗号化設定の指定方法を示します。CREATE TABLE employee ( first_name VARCHAR2(128), last_name VARCHAR2(128), empID NUMBER ENCRYPT NO SALT, salary NUMBER(6) ENCRYPT USING '3DES168');
この例では、次のようになります。
-
empID
列は暗号化されますが、saltを使用しません。表のすべての暗号化列は、同じ暗号化アルゴリズムを使用する必要があるため、empID
列とsalary
列の両方は、3DES168
暗号化アルゴリズムを使用します。 -
salary
列は、3DES168
暗号化アルゴリズムを使用して暗号化されます。アルゴリズムを指定する文字列は、一重引用符(' ')で囲む必要があることに注意してください。salary
列では、デフォルトでsaltが使用されます。
-
- アルゴリズムを使用しない場合は、
親トピック: 暗号化列を含む表の作成
5.4.4 NOMACパラメータを使用したディスク領域の節約およびパフォーマンスの向上
透過的データ暗号化(TDE)で実行されるチェックを省略できます。この場合、暗号化された値ごとに20バイトのディスク領域を節約できます。
SHA-1
整合性アルゴリズムが使用されます。(Oracle Databaseリリース21c以降、SHA-1
は非推奨になりました。TDE列暗号化を使用する場合は、かわりにTDE表領域暗号化を実装することをお薦めします。)表のすべての暗号化列で同じ整合性アルゴリズムが使用される必要があります。表の列ですでにSHA-1
アルゴリズムを使用している場合は、NOMAC
パラメータによって同じ表の別の列を暗号化することはできません。
- 暗号化および復号化操作での整合性チェックをバイパスするには、
CREATE TABLE
文およびALTER TABLE
文でNOMAC
パラメータを使用します。
親トピック: 暗号化列を含む表の作成
5.4.5 例: CREATE TABLE文でのNOMACパラメータの使用
CREATE TABLE
SQL文を使用し、NOMACパラメータを使用して表の列を暗号化できます。
例5-1では、暗号化列を含む表を作成しています。empID
列は、NOMAC
パラメータを使用して暗号化されます。
例5-1 CREATE TABLE文でのNOMACパラメータの使用
CREATE TABLE employee (
first_name VARCHAR2(128),
last_name VARCHAR2(128),
empID NUMBER ENCRYPT 'NOMAC' ,
salary NUMBER(6));
親トピック: 暗号化列を含む表の作成
5.4.6 例: 表の整合性アルゴリズムの変更
異なるオフライン表領域を並列で変換するには、異なるフォアグラウンドでALTER TABLE
SQL文を使用できます。
例5-2に、表内の暗号化列の整合性アルゴリズムを変更する方法を示します。暗号化アルゴリズムをAES256
に、整合性アルゴリズムをSHA-1
に設定しています。2番目のALTER TABLE
文では、整合性アルゴリズムをNOMAC
に設定しています。
例5-2 表の整合性アルゴリズムの変更
ALTER TABLE EMPLOYEE REKEY USING 'AES256' 'SHA-1'; ALTER TABLE EMPLOYEE REKEY USING 'AES256' 'NOMAC';
親トピック: 暗号化列を含む表の作成
5.4.7 外部表への暗号化列の作成
外部表の機能を使用すると、データベース表内のデータであるかのように、外部ソースのデータにアクセスできます。
ORACLE_DATAPUMP
アクセス・ドライバを使用して更新できます。
親トピック: 暗号化列を含む表の作成
5.5 既存の表にある列の暗号化
既存の表にある列を暗号化できます。新しい表の場合、暗号化の定義に使用する様々なアルゴリズムを選択できます。
- 既存の表にある列の暗号化について
ALTER TABLE
SQL文では、既存の表にある列を暗号化できます。 - 既存の表への暗号化列の追加
既存の表の列を暗号化したり、異なるアルゴリズムを使用したり、NO SALT
を使用して列を索引付けすることができます。 - 暗号化されていない列の暗号化
ALTER TABLE MODIFY
文を使用して、既存の暗号化されていない列を暗号化できます。 - 列の暗号化の無効化
互換性やパフォーマンスの理由から、暗号化を無効にすることが必要になる場合があります。
親トピック: 表の列の暗号化
5.5.1 既存の表にある列の暗号化について
ALTER TABLE
SQL文では、既存の表にある列を暗号化できます。
既存の表に暗号化列を追加したり、既存の列を暗号化または復号化するには、ADD
句またはMODIFY
句を含むALTER TABLE
SQL文を使用します。
親トピック: 既存の表にある列の暗号化
5.6 暗号化列に対する索引の作成
暗号化された列に対して索引を作成できます。
ORA-28338: 索引付けされた列は、saltを使用して暗号化できません
エラーが発生します。
親トピック: 表の列の暗号化
5.7 暗号化列へのSaltの追加
ソルトは、暗号化される前のデータに追加されるランダムな文字列で、暗号化されたデータのセキュリティを強化する方法です
親トピック: 表の列の暗号化
5.9 暗号化列を含む表に対する暗号化キーまたはアルゴリズムの変更
ALTER TABLE
SQL文を使用して、暗号化列で使用される暗号化キーまたはアルゴリズムを変更できます。
ALTER TABLE
文を使用して再生成できます。このプロセスでは、新しいキーを生成し、以前のキーを使用して表のデータを復号化し、新しいキーを使用してデータを再暗号化し、表のメタデータを新しいキー情報で更新します。新しいTDE表キーに対して別の暗号化アルゴリズムを使用することもできます。
親トピック: 表の列の暗号化
5.10 最新サポート済アルゴリズムへの表のアルゴリズムの移行
すでに暗号化された表の列を再暗号化すると、以前のアルゴリズム(3DES168
など)を最新のサポート済アルゴリズムに移行できます。
親トピック: 表の列の暗号化