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

前
次

第3章 透過的データ暗号化の構成

ソフトウェアおよびハードウェアのキーストアは、個々の表列または表領域全体の両方で使用するために構成できます。

内容は次のとおりです。

ソフトウェア・キーストアの構成

ソフトウェア・キーストアとは、ソフトウェアのファイル・システム上にあるTDEマスター暗号化鍵のコンテナです。

内容は次のとおりです。

ソフトウェア・キーストアの構成について

ソフトウェア・キーストアとは、透過的データ暗号化マスター暗号化鍵を格納するコンテナです。

キーストアを構成する前に、まずsqlnet.oraファイルでその場所を定義する必要があります。1つのデータベースあたり1つのキーストアがあり、データベースは、sqlnet.oraファイルで定義したキーストアの場所を確認することで、このキーストアを探します。必要に応じて、キーストアのコピーなどの他のキーストアを作成したり、鍵が含まれているファイルをエクスポートすることができます。ただし、sqlnet.oraの場所で構成したキーストアを除去または削除したり、別のキーストアで置き換えることはできません。

sqlnet.oraファイルでソフトウェア・キーストアの場所を構成したら、データベース・インスタンスにログインしてキーストアを作成して開き、次にTDEマスター暗号化鍵を設定できます。これらの手順を完了したら、データの暗号化を開始できます。

手順1: sqlnet.oraファイルでのソフトウェア・キーストアの場所の設定

ソフトウェア・キーストアを構成するには、まずsqlnet.oraファイル内にその場所を指定します。

内容は次のとおりです。

sqlnet.oraファイルでのキーストアの場所について

ソフトウェア・キーストアであろうと、ハードウェア・モジュール・セキュリティ(HSM)・キーストアであろうと、Oracle Key Vaultのキーストアであろうと、Oracle Databaseは、sqlnet.oraファイルを確認してキーストアのディレクトリ場所を探します。

sqlnet.oraファイルを編集して、作成する予定のキーストアのディレクトリ場所を定義する必要があります。このディレクトリが事前に存在していることを確認してください。このディレクトリは空であると理想的です。

Oracle Real Application Clusters (Oracle RAC)またはマルチテナント環境でsqlnet.oraファイルを編集する必要がある場合は、次の動作に注意してください。

  • Oracle RAC環境: srvctlユーティリティを使用していて、sqlnet.ora構成ファイルに環境変数を含める場合は、各環境変数をオペレーティング・システムとsrvctl環境の両方に設定する必要があります。Oracle Automatic Storage Management (ASM)またはNFSなどの共有ファイル・システム上にキーストアを配置することをお薦めします。

  • マルチテナント環境: キーストアの場所は、個々のプラガブル・データベース(PDB)用ではなくマルチテナントのコンテナ・データベース(CDB)全体に設定されます。

sqlnet.oraファイルで、ENCRYPTION_WALLET_LOCATIONパラメータを設定してキーストアの場所を指定する必要があります。どのキーストアを使用するかを決める場合、Oracle Databaseは、次の場所においてこの順序でキーストアの場所を検索します。

  1. sqlnet.oraファイルでパラメータENCRYPTION_WALLET_LOCATIONによって指定されている場所にあるキーストアの使用を試行します。

  2. ENCRYPTION_WALLET_LOCATIONパラメータが設定されていない場合は、パラメータWALLET_LOCATIONによって指定されている場所にあるキーストアの使用を試みます。

  3. WALLET_LOCATIONパラメータも設定されていない場合は、Oracle Databaseは、デフォルトのデータベースの場所でキーストアを探します。この場所は、ORACLE_BASE/admin/DB_UNIQUE_NAME/walletまたはORACLE_HOME/admin/DB_UNIQUE_NAME/walletです。(DB_UNIQUE_NAMEは、初期化パラメータ・ファイルで指定されたデータベースの固有の名前です。)キーストアの場所がsqlnet.oraファイルに設定されていない場合、V$ENCRYPTION_WALLETビューにはデフォルトの場所が表示されます。キーストアの場所およびステータスは、V$ENCRYPTION_WALLETビューで確認できます。

デフォルトでは、sqlnet.oraファイルは、ORACLE_HOMEdbsディレクトリ、またはTNS_ADMIN環境変数によって設定されている場所にあります。正しいsqlnet.oraファイルを指すようにTNS_ADMIN環境変数が適切に設定されていることを確認してください。

関連項目:

TNS_ADMIN環境変数の設定例の詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください

ソフトウェア・キーストアの場所用のsqlnet.oraファイルの構成

sqlnet.oraファイルを使用して、通常のファイル・システム用、複数データベースのアクセス用、およびOracle Automatic Storage Management (ASM)用にキーストアの場所を構成します。

  • 通常のファイル・システムでソフトウェア・キーストアを作成するには、sqlnet.oraファイルを編集するときに次のフォーマットを使用します。

    ENCRYPTION_WALLET_LOCATION=
     (SOURCE=
      (METHOD=FILE)
       (METHOD_DATA=
        (DIRECTORY=path_to_keystore)))
    

path_to_keystoreが環境変数を含むことになる場合、データベース・インスタンスが起動した環境で、データベースを起動する前に、この変数を設定します。srvctlユーティリティを使用してデータベースを起動する場合、次のコマンドを使用してsrvctl環境にも環境変数を設定します。

srvctl setenv database -db database_name -env "environment_variable_name=environment_variable_value"

例: 通常のファイル・システム用のソフトウェア・キーストアの構成

通常のファイル・システムにソフトウェア・キーストアを構成できます。

次の例では、データベース名がorclである通常のファイル・システム用にsqlnet.oraファイルにソフトウェア・キーストアの場所を構成する方法を示します。

ENCRYPTION_WALLET_LOCATION=
  (SOURCE=
   (METHOD=FILE)
    (METHOD_DATA=
     (DIRECTORY=/etc/ORACLE/WALLETS/orcl)))

例: 複数のデータベースでsqlnet.oraファイルを共有する場合のソフトウェア・キーストアの構成

複数のデータベースでsqlnet.oraファイルを共有するように構成できます。

次の例では、複数のデータベースでsqlnet.oraファイルを共有する場合にソフトウェア・キーストアの場所を構成する方法を示します。

ENCRYPTION_WALLET_LOCATION=
 (SOURCE=
  (METHOD=FILE)
   (METHOD_DATA=
    (DIRECTORY=/etc/ORACLE/WALLETS/$ORACLE_SID/)))

例: Oracle Automatic Storage Management用のソフトウェア・キーストアの構成

Automatic Storage Management (ASM)ファイル・システムにsqlnet.oraを構成できます。

次の例では、ASMファイル・システム用にsqlnet.oraファイルにソフトウェア・キーストアの場所を構成する方法を示します。

ENCRYPTION_WALLET_LOCATION=
 (SOURCE=
  (METHOD=FILE)
   (METHOD_DATA=
    (DIRECTORY=+disk1/mydb/wallet)))

例: Oracle Automatic Storage Managementディスク・グループ用のソフトウェア・キーストアの構成

Oracle Automatic Storage Management (ASM)ディスク・グループにsqlnet.oraを構成できます。

次のフォーマットは、ASMディスク・グループでソフトウェア・キーストアの場所を作成する場合にソフトウェア・キーストアを構成する方法を示しています。

ENCRYPTION_WALLET_LOCATION=
 (SOURCE=
  (METHOD=FILE)
   (METHOD_DATA=
    (DIRECTORY=+ASM_file_path_of_the_diskgroup)))

手順2: ソフトウェア・キーストアの作成

ソフトウェア・キーストアのディレクトリの場所を指定したら、キーストアを作成できます。

内容は次のとおりです。

ソフトウェア・キーストアを作成することについて

3つの異なるタイプのソフトウェア・キーストアがあります。

パスワードベースのソフトウェア・キーストア、自動ログイン・ソフトウェア・キーストアおよびローカル自動ログイン・ソフトウェア・キーストアを作成できます。

問合せSELECT * FROM V$ENCRYPTION_WALLETを実行すると、自動ログイン・ソフトウェア・キーストアが自動的に開くため、注意してください。たとえば、パスワードベースのキーストアと自動ログイン・キーストアがあるとします。パスワードベースのキーストアが開いているときに、このパスワードベースのキーストアを閉じて、V$ENCRYPTION_WALLETビューを問い合せると、出力にキーストアが開いていることが示されます。ところが、これはV$ENCRYPTION_WALLETが自動ログイン・ソフトウェア・キーストアを開いて、自動ログイン・キーストアのステータスを表示したことによるものです。

関連項目:

ソフトウェア・キーストアの詳細は、キーストアのタイプを参照してください。

パスワードベースのソフトウェア・キーストアの作成

パスワードベースのソフトウェア・キーストアには、キーストアに格納される鍵と資格証明を保護するために使用するユーザー・パスワードが必要です。

  1. 「手順1: sqlnet.oraファイルでのソフトウェア・キーストアの場所の設定」で説明した手順が完了していることを確認します。

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

    マルチテナント環境では、rootとしてログインします。例:

    sqlplus c##sec_admin as syskm
    Enter password: password
    Connected.
    

    SQL*Plusがすでに開かれていて、この間にsqlnet.oraファイルを変更した場合、SQL*Plusに再接続します。データベース・セッションはsqlnet.oraの変更が有効になる前に変更される必要があります。

  3. ADMINISTER KEY MANAGEMENT SQL文を実行してキーストアを作成します。

    構文は次のとおりです。

    ADMINISTER KEY MANAGEMENT CREATE KEYSTORE 'keystore_location' IDENTIFIED BY software_keystore_password;
    

    ここでは次のように指定します。

    • keystore_locationは、自動ログイン・キーストアを作成するパスワードベースのキーストアのキーストア・ディレクトリの場所に対するパスです(/etc/ORACLE/WALLETS/orclなど)。keystore_location設定は一重引用符(' ')で囲みます。この場所を見つけるには、V$ENCRYPTION_WALLETビューのWRL_PARAMETER列を問い合せます。(キーストアがデフォルトの場所に作成されていない場合、V$ENCRYPTION_WALLETビューのSTATUS列はNOT_AVAILABLEになります。)

    • software_keystore_passwordは、セキュリティ管理者が作成するキーストアのパスワードです。

    たとえば、/etc/ORACLE/WALLETS/orclディレクトリにキーストアを作成する場合、次のようになります。

    ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/etc/ORACLE/WALLETS/orcl' IDENTIFIED BY password;
    
    keystore altered.
    

    この文を実行すると、キーストアとなるewallet.p12ファイルがキーストアの場所に生成されます。

自動ログイン・ソフトウェア・キーストアまたはローカル自動ログイン・ソフトウェア・キーストアの作成

パスワードベースのキーストアの別の方法として、自動ログイン・ソフトウェア・キーストアまたはローカル自動ログイン・ソフトウェア・キーストアのいずれかを作成できます。

これらのキーストアの両方は、システム生成パスワードを持っています。これらは、PKCS#12ベースのファイルでもあります。自動ログイン・ソフトウェア・キーストアは、このキーストアがあるコンピュータとは違うコンピュータから開くことができますが、ローカル自動ログイン・ソフトウェア・キーストアは、このキーストアが作成されたコンピュータからしか開けません。自動ログイン・キーストアとローカル自動ログイン・キーストアの両方は、パスワードベースのソフトウェア・キーストアから作成されます。

  1. 「手順1: sqlnet.oraファイルでのソフトウェア・キーストアの場所の設定」で説明した手順が完了していることを確認します。

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

    マルチテナント環境では、rootとしてログインします。例:

    sqlplus c##sec_admin as syskm
    Enter password: password
    Connected.
    

    SQL*Plusがすでに開かれていて、この間にsqlnet.oraファイルを変更した場合、SQL*Plusに再接続します。データベース・セッションはsqlnet.oraの変更が有効になる前に変更される必要があります。

  3. パスワードベースのソフトウェア・キーストアの作成に記載されているように、パスワードベースのソフトウェア・キーストアを作成します。

  4. ADMINISTER KEY MANAGEMENT SQL文を実行してキーストアを作成します。

    構文は次のとおりです。

    ADMINISTER KEY MANAGEMENT CREATE [LOCAL] AUTO_LOGIN KEYSTORE FROM KEYSTORE 'keystore_location' IDENTIFIED BY software_keystore_password;
    

    ここでは次のように指定します。

    • LOCALでは、ローカル自動ログイン・ソフトウェア・キーストアを作成できます。そうでない場合、キーストアに他のコンピュータからアクセスできるようにするときは、この句を省略します。

    • keystore_locationは、自動ログイン・キーストアを作成するパスワードベースのキーストアのディレクトリの場所に対するパスです(/etc/ORACLE/WALLETS/orclなど)。この設定は一重引用符(' ')で囲みます。この場所を確認するには、V$ENCRYPTION_WALLETビューのWRL_PARAMETER列を問い合せます。

    • software_keystore_passwordは、自動ログイン・キーストアを作成するパスワードベースのキーストアです。

    たとえば、パスワードベースのキーストアの自動ログイン・ソフトウェア・キーストアを/etc/ORACLE/WALLETS/orclディレクトリに作成するには、次のようにします。

    ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE '/etc/ORACLE/WALLETS/orcl' IDENTIFIED BY password;
    
    keystore altered.
    

    この文を実行した後、cwallet.ssoファイルがキーストアの場所に表示されます。ewallet.p12ファイルがパスワードベースのウォレットです。

注意:

自動ログイン・キーストア(.ssoファイル)の作成後は、PKCS#12ウォレット(ewallet.p12ファイル)は削除しないでください。将来、TDEマスター暗号化鍵を再生成またはキー更新するには、PKCS#12ウォレットが必要です。デフォルトでは、このファイルは、$ORACLE_HOME/admin/ORACLE_SID/walletディレクトリにあります。

透過的データ暗号化が自動ログイン・キーストアを使用するのは、このキーストアが正しい場所(ENCRYPTION_WALLET_LOCATIONWALLET_LOCATIONまたはデフォルトのキーストアの場所)にあり、かつ、暗号化されたキーストアを開くためのSQLがまだ実行されていない場合のみです。(自動ログイン・キーストアにはシステム生成のパスワードがあり、暗号化されていることに注意してください。)

手順3: ソフトウェア・キーストアを開く

作成したキーストアの種類に応じて、使用する前にキーストアを手動で開く必要があります。

内容は次のとおりです。

ソフトウェア・キーストアを開くことについて

キーストアでTDEマスター暗号化鍵を作成するか、これにアクセスする前に、パスワードベースのソフトウェア・キーストアを手動で開く必要があります。

自動ログイン・ソフトウェア・キーストアまたはローカル自動ログイン・ソフトウェア・キーストアは手動で開く必要はありません。これらのキーストアは、必要時に(暗号化操作で鍵にアクセスする必要がある場合に)自動的に開かれます。必要に応じて、これらのタイプのどのキーストアでも明示的に閉じることができます。V$ENCRYPTION_WALLETビューのSTATUS列を問い合せることで、キーストアが開いているか、閉じているか、開いていてもマスター鍵がないか、開いていても不明なマスター鍵があるかといったステータスを確認できます。

キーストアを開くと、手動で閉じるまでキーストアは開いたままになります。データベース・インスタンスを再起動するたびに、パスワード・キーストアを手動で開いて暗号化と復号化の操作を再有効化する必要があります。

ソフトウェア・キーストアを開く

ソフトウェア・キーストアを開くには、SET KEYSTORE OPEN句を含むADMINISTER KEY MANAGEMENT文を使用する必要があります。

  1. 手順2: ソフトウェア・キーストアの作成に記載されている手順を完了したことを確認します。
  2. ADMINISTER KEY MANAGEMENTまたはSYSKM権限が付与されたユーザーとして、データベース・インスタンスにログインします。

    マルチテナント環境の場合、キーストアをPDBで開く前に、まずrootで開く必要があります。たとえば、rootにログインするには、次のようにします。

    sqlplus c##sec_admin as syskm
    Enter password: password
    Connected.
    

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

  3. ADMINISTER KEY MANAGEMENT文を実行します。

    次の構文を使用します。

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

    ここでは次のように指定します。

    • software_keystore_passwordは、「手順2: ソフトウェア・キーストアの作成」でキーストアを作成するために使用したものと同じパスワードです。

    • CONTAINERは、マルチテナント環境で使用するために用意されています。このCDBのすべてのPDBでキーストアを設定するには、ALLを入力するか、現在のPDBでキーストアを設定するには、CURRENTを入力します。

      例:

      ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY password;
      
      keystore altered.
      

キーストアが開いていても、TDEマスター暗号化鍵をまだ作成していない場合は(後で説明します)、V$ENCRYPTION_WALLETビューのSTATUS列によってOPEN_NO_MASTER_KEYステータスが知らされます。

手順4: ソフトウェアTDEマスター暗号化鍵の設定

キーストアが開いたら、それに対してTDEマスター暗号化鍵を設定できます。

内容は次のとおりです。

ソフトウェアTDEマスター暗号化鍵の設定について

TDEマスター暗号化鍵はキーストアに格納されます。

この鍵によって、TDE表キーおよび表領域暗号化鍵が保護されます。デフォルトでは、TDEマスター暗号化鍵は、透過的データ暗号化(TDE)によって生成される鍵です。V$ENCRYPTION_WALLETビューのSTATUS列を問い合せることで、キーストアに、設定されているマスター鍵がないかどうか、または不明なマスター鍵がないかどうかを確認できます。

マルチテナント環境では、rootまたはPDBからTDEマスター暗号化鍵を作成および管理できます。

注意:

後で使用するためにTDEマスター暗号化鍵を作成でき、その後それらを手動で有効にできます。詳細は、後で使用するためのTDEマスター暗号化鍵の作成を参照してください。

ソフトウェア・キーストアのTDEマスター暗号化鍵の設定

TDEマスター暗号化鍵をソフトウェア・キーストアに設定するには、SET KEY句を含むADMINISTER KEY MANAGEMENT文を使用する必要があります。

  1. パスワード・ソフトウェア・キーストアの場合、手順3: ソフトウェア・キーストアを開くに記載されている、鍵を開くための手順を完了したことを確認します。

    自動ログイン・ソフトウェア鍵またはローカル自動ログイン・ソフトウェア鍵は、作成された後で自動的に開きます。パスワードベースのソフトウェア・キーストアは、TDEマスター暗号化鍵を設定する前に開かれている必要があります。自動ログイン・ソフトウェア・キーストアが開いている場合、それを閉じてパスワードベースのソフトウェア・キーストアを開く必要があります。パスワードベースのキーストアと自動ログイン・キーストアの両方が構成済の場所に存在し、パスワードベースのキーストアが開いている場合、自動ログイン・キーストアにもTDEマスター暗号化鍵が自動的に書き込まれます。

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

    マルチテナント環境で、rootまたはPDBにログインします。たとえば、PDBとしてログインするには次を実行します。

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

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

  3. データベースがREAD WRITEモードでオープンしていることを確認します。

    OPEN_MODEREAD WRITEに設定されている場合、TDEマスター暗号化鍵を設定できます。マルチテナント環境以外の環境に関するステータスを検索するには、V$DATABASE動的ビューのOPEN_MODE列を問い合せます。マルチテナント環境を使用している場合は、V$PDBSビューを問合せます。(これらのビューにアクセスできない場合は、SYSDBAとして接続し、問合せを再試行します。このタイプの問合せに対してSYSKMとして接続するには、これに対するパスワード・ファイルを作成する必要があります。詳細は、Oracle Database管理者ガイドを参照してください。)

  4. SYSKM管理権限を使用して接続し、ADMINISTER KEY MANAGEMENT SQL文を実行してソフトウェア管理キーストアを設定します。

    ADMINISTER KEY MANAGEMENT SET KEY [USING TAG 'tag'] IDENTIFIED BY keystore_password [WITH BACKUP [USING 'backup_identifier']] [CONTAINER = ALL | CURRENT];
    

    ここでは次のように指定します。

    • tagは、定義する関連の属性および情報です。この設定は一重引用符(' ')で囲みます。

    • passwordは、「手順2: ソフトウェア・キーストアの作成」でキーストアを作成したときに作成した必須キーストア・パスワードです。

    • WITH BACKUPを使用すると、キーストアのバックアップが作成されます。パスワードベースのキーストアの場合、このオプションを使用する必要があります。オプションでUSING句を使用し、バックアップの簡単な説明を追加できます。この説明は一重引用符(' ')で囲みます。この識別子は名前付きキーストア・ファイルに付加されます(たとえば、emp_key_backupがバックアップ識別子になっているewallet_time_stamp_emp_key_backup.p12)。オペレーティング・システムで使用されているファイル命名規則に従ってください。

    • CONTAINERは、マルチテナント環境で使用するために用意されています。このCDBのすべてのPDBで鍵を設定するには、ALLを入力し、現在のPDBで設定するには、CURRENTを入力します。

    例:

    ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY keystore_password WITH BACKUP USING 'emp_key_backup';
    
    keystore altered.

手順5: データの暗号化

ソフトウェア・キーストアの構成が完了すると、データの暗号化を開始できます。

個別の表の列または表領域全体のデータを暗号化できます。

ハードウェア・キーストアの構成

ハードウェア・キーストアは暗号化鍵を保存するために設計された、ハードウェア・セキュリティ・モジュール(HSM)内にあります。

内容は次のとおりです。

(外部の)ハードウェア・キーストアの構成について

ハードウェア・キーストアは、暗号化鍵のために安全な記憶域を提供する独立したサーバーまたはデバイスです。

外部のキーストアは、Oracle Databaseの外部にあります。Oracle Databaseは外部のキーストアと相互に接続できますが、Oracleインタフェースの外部でキーストアを操作できません。Oracle Databaseは外部キーストアに鍵を作成するように要求できますが、この鍵を外部データベースに格納する方法を定義することはできません。(反対に、TDEを使用して作成されたソフトウェア・キーストアの場合、Oracle Databaseでは完全に制御できます。すなわち、SQL文を使用してこのタイプのキーストアを操作できます。)外部キーストアの例には、ハードウェア・セキュリティ・モジュールやOracle Key Vaultキーストアがあります。複数のデータベースの外部キーストアは、Oracle Key Vaultなどを使用して集中管理できます。

ハードウェア・セキュリティ・モジュール(ハードウェア・キーストア)のキーストアを構成するには、まずsqlnet.oraファイルにキーストア・タイプを含め、ハードウェア・キーストアを構成して開き、ハードウェア・キーストアTDEマスター暗号化鍵を設定します。要するに、1つのデータベースあたり1つのハードウェア・キーストアがあり、データベースは、sqlnet.oraファイルで定義したキーストア・タイプを確認することで、このキーストアを探します。

ハードウェア・キーストアを構成すると、データの暗号化を開始する準備ができます。

手順1: sqlnet.oraファイルでのハードウェア・キーストアのタイプの設定

ハードウェア・キーストアを構成する前に、sqlnet.oraファイルを変更する必要があります。

デフォルトでは、このファイルは、ORACLE_HOMEdbsディレクトリ、またはTNS_ADMIN環境変数によって設定されている場所にあります。

  • sqlnet.oraファイルの次の設定を使用して、ハードウェア・キーストアのタイプ(HSM)を定義します。

    ENCRYPTION_WALLET_LOCATION=
     (SOURCE=
      (METHOD=HSM))

関連項目:

手順2: ハードウェア・セキュリティ・モジュールの構成

サード・パーティのハードウェア・セキュリティ・モジュールを構成するには、PKCS#11ライブラリを正しい場所にコピーして、ベンダーの指示に従う必要があります。

  1. 手順1: sqlnet.oraファイルでのハードウェア・キーストアのタイプの設定に記載されている手順を完了したことを確認します。

  2. PKCS#11ライブラリを正しいパスにコピーします。

    ハードウェア・セキュリティ・モジュール・ベンダーから関連のPKCS#11ライブラリの提供を受けているはずです。一度にサポートされるのは、1つのPKCS#11ライブラリのみです。新しいベンダーのHSMを使用する場合は、PKCS#11ライブラリを以前のベンダーのものから新しいベンダーのものに置き換える必要があります。

    このライブラリを適切な場所にコピーして、Oracle Databaseがこのライブラリを見つけられるようにします。

    • UNIXシステム: 次の構文を使用して、このディレクトリにライブラリをコピーします。

      /opt/oracle/extapi/[32,64]/hsm/{VENDOR}/{VERSION}/libapiname.so
      
    • Windowsシステム: 次の構文を使用して、このディレクトリにライブラリをコピーします。

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

    ここでは次のように指定します。

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

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

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

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

  3. ベンダーの指示に従ってハードウェア・セキュリティ・モジュールを設定してください。

    ハードウェア・セキュリティ・モジュール管理インタフェース、およびHSMベンダーが提供する指示に従って、ハードウェア・セキュリティ・モジュールを設定します。ハードウェア・セキュリティ・モジュールと相互作用するためにデータベースが使用する必要があるユーザー・アカウントおよびパスワードを作成します。このプロセスは、Oracle Databaseと通信するハードウェア・キーストアを作成および構成します。

手順3: ハードウェア・キーストアを開く

ハードウェア・セキュリティ・モジュールを構成したら、使用する前にハードウェア・キーストアを開く必要があります。

内容は次のとおりです。

ハードウェア・キーストアを開くことについて

暗号化または復号化を実行する前に、ハードウェア・キーストアがデータベースにアクセスできるようにするために、ハードウェア・キーストアを開く必要があります。

V$ENCRYPTION_WALLETビューのSTATUS列を問い合せることで、キーストアが開いているか、閉じているか、開いていてもTDEマスター暗号化鍵がないか、開いていても不明なマスター暗号化鍵があるかといったステータスを確認できます。

ハードウェア・キーストアを開く

ハードウェア・キーストアを開くには、SET KEYSTORE OPEN句を含むADMINISTER KEY MANAGEMENT文を使用します。

  1. 手順2: ハードウェア・セキュリティ・モジュールの構成で説明した手順が完了していることを確認します。

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

    マルチテナント環境の場合、キーストアをPDBで開く前に、まずrootで開く必要があります。たとえば、rootにログインするには、次のようにします。

    sqlplus sec_admin as syskm
    Enter password: password
    Connected.
    

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

    SQL*Plusがすでに開かれていて、この間にsqlnet.oraファイルを変更した場合、SQL*Plusに再接続します。データベース・セッションはsqlnet.oraの変更が有効になる前に変更される必要があります。

  3. 次の構文を使用して、ADMINISTER KEY MANAGEMENT SQL文を実行します。

    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "user_id:password" [CONTAINER = ALL | CURRENT];
    

    ここでは次のように指定します。

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

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

      user_id:password文字列を二重引用符(" ")で囲み、user_idpasswordをコロン(:)で区切ります。

    • CONTAINERは、マルチテナント環境で使用するために用意されています。このCDBのすべてのPDBでキーストアを設定するには、ALLを入力するか、現在のPDBでキーストアを設定するには、CURRENTを入力します。

    例:

    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "psmith:password";
    
    keystore altered.
    
  4. データベース・インスタンスを再起動するたびにこの手順を繰り返します。

手順4: ハードウェア・キーストアのTDEマスター暗号化鍵の設定

ハードウェア・キーストアを開いた後で、ハードウェア・キーストアのTDEマスター暗号化鍵を設定できます。

内容は次のとおりです。

ハードウェア・キーストアのTDEマスター暗号化鍵の設定について

ハードウェア・キーストア内に格納されたTDEマスター暗号化鍵を作成する必要があります。

Oracle Databaseは、TDEマスター暗号化鍵を使用して、ハードウェア・セキュリティ・モジュール内部のTDE表キーまたは表領域暗号化鍵の暗号化または復号化を行います。

透過的データ暗号化用にソフトウェア・キーストアをまだ構成していない場合、まだ構成していない場合のTDEマスター暗号化鍵の設定の手順に従います。TDE用にソフトウェア・キーストアをすでに構成している場合、前に構成したTDEマスター暗号化鍵の移行の説明に従ってそれをハードウェア・セキュリティ・モジュールに移行する必要があります。

現在のTDEマスター・キーとともに、Oracleウォレットでは、TDEマスター・キーをローテーションするキーの更新操作のたびに生成される履歴TDEマスター・キーを保持します。これらのTDEマスター・キーにより、履歴TDEマスター・キーのいずれかを使用して、以前に作成されたOracleデータベースのバックアップをリストアすることができます。

まだ構成していない場合のTDEマスター暗号化鍵の設定

透過的データ暗号化用にソフトウェア・キーストアをまだ構成していない場合は、この手順を完了する必要があります。

マルチテナント環境では、rootまたはPDBからTDEマスター暗号化鍵を作成および管理できます。

注意:

後で使用するためにTDEマスター暗号化鍵を作成でき、その後それらを手動で有効にできます。詳細は、後で使用するためのTDEマスター暗号化鍵の作成を参照してください。

  1. 手順3: ハードウェア・キーストアを開くに記載されている手順を完了したことを確認します。

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

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

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

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

  3. データベースがREAD WRITEモードでオープンしていることを確認します。

    OPEN_MODEREAD WRITEに設定されている場合、TDEマスター暗号化鍵を設定できます。マルチテナント環境以外の環境に関するステータスを検索するには、V$DATABASE動的ビューのOPEN_MODE列を問い合せます。マルチテナント環境を使用している場合は、V$PDBSビューを問合せます。(これらのビューにアクセスできない場合は、SYSDBAとして接続し、問合せを再試行します。このタイプの問合せに対してSYSKMとして接続するには、これに対するパスワード・ファイルを作成する必要があります。詳細は、Oracle Database管理者ガイドを参照してください。)

  4. 次のSQL文を実行します。

    ADMINISTER KEY MANAGEMENT SET KEY [USING TAG 'tag'] [FORCE KEYSTORE] IDENTIFIED BY [EXTERNAL STORE | "user_id:password"] [CONTAINER = ALL | CURRENT];
    

    ここでは次のように指定します。

    • tagは、定義する関連の属性および情報です。この設定は一重引用符(' ')で囲みます。

    • FORCE KEYSTOREは、キーストアが閉じている場合に、キーストア操作を有効にします。

    • IDENTIFIED BYは次のいずれかの設定にできます。

      • EXTERNAL STOREは、外部ストアに格納されたキーストア・パスワードを使用して、キーストア操作を実行します。

      • user_id:password: user_idは、ハードウェア・キーストア用に作成されたユーザーIDです。passwordは、ハードウェア・キーストア用に作成されたパスワードです。user_id:password文字列を二重引用符(" ")で囲み、user_idpasswordをコロン(:)で区切ります。

    • CONTAINERは、マルチテナント環境で使用するために用意されています。このCDBのすべてのPDBでキーストアを設定するには、ALLを入力するか、現在のPDBでキーストアを設定するには、CURRENTを入力します。

    例:

    ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "psmith:password";
    
    keystore altered.

前に構成したTDEマスター暗号化鍵の移行

ソフトウェア・キーストアを以前に構成した場合は、前に構成したTDEマスター暗号化鍵を移行する必要があります。

Oracle Data PumpやOracle Recovery Managerなどのツールでは、ソフトウェア・キーストアを使用してエクスポートまたはバックアップされたデータに対して復号化と暗号化の操作を実行するために、古いソフトウェア・キーストアにアクセスする必要があります。ソフトウェア・パスワード・キーストアとハードウェア・キーストア間の移行の説明に従って、ソフトウェア・キーストアからハードウェア・キーストアに移行できます。

現在のTDEマスター・キーとともに、Oracleウォレットでは、TDEマスター・キーをローテーションするキーの更新操作のたびに生成される履歴TDEマスター・キーを保持します。これらのTDEマスター・キーにより、履歴TDEマスター・キーのいずれかを使用して、以前に作成されたOracleデータベースのバックアップをリストアすることができます。

手順5: データの暗号化

ハードウェア・キーストアの構成が完了すると、データの暗号化を開始できます。

表の個別の列または表領域全体を暗号化できます。

表の列の暗号化

透過的データ暗号化を使用すると、データベース表の個々の列を暗号化できます。

内容は次のとおりです。

表の列の暗号化について

表の個々の列を暗号化できます。

個々の列または表領域全体のどちらを暗号化するかは、表のデータ型によって決まります。また、TDE列暗号化をサポートしていない機能もいくつかあります。

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 (レガシーまたは拡張)

暗号化列のサイズが列のデータ型で許容されるサイズより大きい場合は、列を暗号化できません。

表3-1に、各種データ型の最大許容サイズを示します。

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

データ型 最大サイズ

CHAR

1932バイト

VARCHAR2 (レガシー)

3932バイト

VARCHAR2 (拡張)

32,699バイト

NVARCHAR2 (レガシー)

1966バイト

NVARCHAR2 (拡張)

16,315バイト

NCHAR

966バイト

RAW (拡張)

32,699バイト

注意:

TDE表領域暗号化には、これらのデータ型制限はありません。詳細は、「表領域の暗号化」を参照してください。

透過的データ暗号化列暗号化の使用に関する制限

TDEの暗号化はSQLレイヤーで行われます。SQLレイヤーをバイパスするOracle Databaseユーティリティは、TDEの列暗号化サービスを使用できません。

TDE列暗号化は、次のデータベース機能と併用しないでください。

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

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

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

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

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

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

透過的データ暗号化は、ディスクまたは他のメディアに格納されているデータを保護します。転送中のデータは保護対象外です。ネットワーク上のデータを暗号化するには、Oracle Databaseセキュリティ・ガイドに記載されているネットワーク暗号化ソリューションを使用します。

関連項目:

暗号化列を含む表の作成

暗号化された列がある新しい表を作成できます。Oracle Databaseには、暗号化を定義するために使用できる様々なアルゴリズムが用意されています。

内容は次のとおりです。

暗号化列を含む表の作成について

CREATE TABLE SQL文を使用して、暗号化列を持つ表を作成できます。

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

デフォルト・アルゴリズムを使用する暗号化列を含む表の作成

TDEでは、192ビット長の鍵を使用するAES暗号化アルゴリズム(AES192)がデフォルトで使用されます。

アルゴリズムを指定しないで表の列を暗号化すると、その列はAES192アルゴリズムを使用して暗号化されます。

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

  • 列を暗号化する表を作成するには、ENCRYPT句を含むCREATE TABLE SQL文を使用します。

    たとえば、デフォルト・アルゴリズムを使用して表の列を暗号化するには、次のようにします。

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

    この例では、暗号化列を含む新しい表を作成しています(salary)。この列は、デフォルトの暗号化アルゴリズム(AES192)を使用して暗号化されます。saltおよびMACはデフォルトで追加されます。この例では、ウォレットがオープン状態であり、マスター鍵が設定されていると想定しています。

注意:

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

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

アルゴリズムを使用しないまたは非デフォルト・アルゴリズムを使用する暗号化列を含む表の作成

CREATE TABLE SQL文を使用して、暗号化列を持つ表を作成します。

暗号化の前に、デフォルトでTDEは、saltを平文に追加します。saltを追加すると、攻撃者が総当たり攻撃によってデータを盗むことがより困難になります。ただし、暗号化列を索引付けする場合、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が使用されます。

NOMACパラメータを使用したディスク領域の節約およびパフォーマンスの向上

TDEで実行するチェックはバイパスできます。この場合、暗号化された値ごとに20バイトのディスク領域を節約できます。

表の行および暗号化列の数が多い場合、TDEチェックをバイパスすることで、かなりの量のディスク領域になることがあります。さらに、処理サイクルが節約され、TDEに関連するパフォーマンス・オーバーヘッドが減少します。

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

  • 暗号化および復号化操作での整合性チェックをバイパスするには、CREATE TABLE文およびALTER TABLE文でNOMACパラメータを使用します。

例: CREATE TABLE文でのNOMACパラメータの使用

CREATE TABLE SQL文を使用し、NOMACパラメータを使用して表の列を暗号化できます。

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

例3-1 CREATE TABLE文でのNOMACパラメータの使用

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

例: 表の整合性アルゴリズムの変更

ALTER TABLE SQL文を使用して、データベース表の整合性アルゴリズムを変更できます。

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

例3-2 表の整合性アルゴリズムの変更

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

ALTER TABLE EMPLOYEE REKEY USING '3DES168' 'NOMAC';

外部表への暗号化列の作成

外部表の機能を使用すると、データベース表内のデータであるかのように、外部ソースのデータにアクセスできます。

外部表は、ORACLE_DATAPUMPアクセス・ドライバを使用して更新できます。

  • 外部表の特定の列を暗号化するには、列を定義するときにENCRYPT句を使用します。

    列は、システム生成鍵によって暗号化されます。たとえば、次のCREATE TABLE SQL文は、3DES168アルゴリズムを使用してssn列を暗号化します。

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

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

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

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

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

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

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

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

既存の表にある列を暗号化できます。新しい表の場合、暗号化の定義に使用する様々なアルゴリズムを選択できます。

内容は次のとおりです。

既存の表にある列の暗号化について

ALTER TABLE SQL文では、既存の表にある列を暗号化できます。

既存の表に暗号化列を追加したり、既存の列を暗号化または復号化するには、ADD句またはMODIFY句を含むALTER TABLE SQL文を使用します。

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

既存の表の列を暗号化したり、異なるアルゴリズムを使用したり、NO SALTを使用して列を索引付けすることができます。

  • 既存の表に暗号化列を追加するには、ALTER TABLE ADD文を使用して、ENCRYPT句で新しい列を指定します。

例3-4では、employeeという既存の表に暗号化列ssnを追加しています。ssn列は、デフォルトのAES192アルゴリズムを使用して暗号化されます。saltおよびMACはデフォルトで追加されます。

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

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

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

ALTER TABLE MODIFY文を使用して、既存の暗号化されていない列を暗号化できます。

  • 暗号化されていない既存の列を暗号化するには、ALTER TABLE MODIFY文を使用して、ENCRYPT句で、暗号化されてない列を指定します。

次の例では、employee表のfirst_name列を暗号化しています。first_name列は、デフォルトのAES192アルゴリズムを使用して暗号化されます。saltはデフォルトでデータに追加されます。別のアルゴリズムを使用して列を暗号化できます。列を索引付けする場合、NO SALTを指定する必要があります。NOMACパラメータを使用して、整合性チェックをバイパスすることもできます。

ALTER TABLE employee MODIFY (first_name ENCRYPT);

次の例では、NOMACパラメータを使用してemployee表のfirst_name列を暗号化しています。

ALTER TABLE employee MODIFY (first_name ENCRYPT 'NOMAC');

列の暗号化の無効化

互換性やパフォーマンスの理由から、暗号化を無効にすることが必要になる場合があります。

  • 列の暗号化を無効にするには、ALTER TABLE MODIFYコマンドを使用し、DECRYPT句を指定します。

例3-5では、employee表のfirst_name列を復号化しています。

例3-5 列の暗号化の無効化

ALTER TABLE employee MODIFY (first_name DECRYPT);

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

暗号化された列に対して索引を作成できます。

索引付け対象の列は、saltなしで暗号化されている必要があります。saltを使用して列が暗号化されている場合、ORA-28338: 索引付けされた列は、saltを使用して暗号化できませんエラーが発生します。

  • 暗号化列に索引を作成する場合は、ENCRYPT NO SALT句を含むCREATE INDEX文を使用します。

例3-6に、saltなしで暗号化された列に対して索引を作成する方法を示します。

例3-6 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の追加

ソルトは、暗号化される前のデータに追加されるランダムな文字列で、暗号化されたデータのセキュリティを強化する方法です。

Saltにより、同じ平文データが常に同じ暗号化テキストに変換されることがなくなります。saltを追加すると、侵入者がデータを盗むために使用する一般的な方法の1つである暗号化テキストのパターン一致を排除できます。saltを追加するには、暗号化されたデータ値ごとに16バイトの追加記憶域が必要です。

  • 暗号化列に対してsaltを追加または削除するには、ALTER TABLE MODIFY SQL文を使用します。

たとえば、saltを使用してfirst_name列を暗号化するとします。first_name列が以前にsaltなしで暗号化されていた場合は、ALTER TABLE MODIFY文によって、saltを使用して列が再暗号化されます。

ALTER TABLE employee MODIFY (first_name ENCRYPT SALT);

暗号化列からのSaltの削除

ALTER TABLE SQL文を使用して、暗号化列からsaltを削除できます。

  • 暗号化列からsaltを削除するには、ALTER TABLE SQL文でENCRYPT NO SALT句を使用します。

たとえば、first_name列からsaltを削除するとします。saltを使用して暗号化された列に索引を付ける必要がある場合は、索引を付ける前に、この文を使用してsaltを削除します。

ALTER TABLE employee MODIFY (first_name ENCRYPT NO SALT);

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

ALTER TABLE SQL文を使用して、暗号化列で使用される暗号化鍵またはアルゴリズムを変更できます。

各表では、その列に1つのTDE表キーのみ指定できます。TDE表キーはALTER TABLE文を使用して再生成できます。このプロセスでは、新しい鍵を生成し、以前の鍵を使用して表のデータを復号化し、新しい鍵を使用してデータを再暗号化し、表のメタデータを新しい鍵情報で更新します。新しいTDE表キーに対して別の暗号化アルゴリズムを使用することもできます。

  • 暗号化列を含む表の暗号化鍵またはアルゴリズムを変更するには、ALTER TABLE SQL文でREKEYまたはREKEY USING句を使用します。

例:

ALTER TABLE employee REKEY;

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

例3-7 暗号化された表の列の暗号化鍵およびアルゴリズムの変更

ALTER TABLE employee REKEY USING '3DES168';

表領域の暗号化

オンラインとオフラインの両方の表領域およびデータベースで暗号化操作を実行できます。

内容は次のとおりです。

透過的データ暗号化表領域暗号化の使用に関する制限

表領域を暗号化する際は、透過的データ暗号化の使用に関する制限事項に注意する必要があります。

次の制約に注意してください:

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

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

関連項目:

Oracle Data Pumpの詳細は、『Oracle Databaseユーティリティ』を参照してください。

手順1: 表領域暗号化のCOMPATIBLE初期化パラメータの設定

暗号化された表領域を作成する前に、COMPATIBLE初期化パラメータを設定する必要があります。

内容は次のとおりです。

表領域暗号化のためのCOMPATIBLE初期化パラメータの設定について

11.2.0.0の最小限のCOMPATIBLE設定により、すべての表領域暗号化機能が有効になります。

互換性を11.1.0.0ではなく11.2.0.0に設定することで、次の追加機能を使用できます。

  • 11.2.0.0に設定することにより、データベースでは、データの暗号化にサポートしている4つのアルゴリズム(3DES168AES128AES192およびAES256)の任意のものを使用できます。

  • 11.2.0.0に設定することにより、ソフトウェア・キーストアからハードウェア・キーストアに鍵を移行できます(TDEマスター暗号化鍵がハードウェア・キーストア用に構成されていることを確認します)。

  • 11.2.0.0に設定することにより、TDEマスター暗号化鍵を再設定およびローテーションできます。

このパラメータを11.2.0.0に設定すると、変更は元に戻せないことに注意してください。表領域暗号化を使用するには、互換性設定が最低でも11.1.0.0であることを確認します。

関連項目:

  • COMPATIBLEパラメータの詳細は、Oracle Database SQL言語リファレンスを参照してください。

  • 初期化パラメータ・ファイルの詳細は、Oracle Database管理者ガイドを参照してください。

表領域暗号化のためのCOMPATIBLE初期化パラメータの設定

COMPATIBLE初期化パラメータを設定するには、データベース・インスタンスの初期化パラメータを編集する必要があります。

  1. データベース・インスタンスにログインします。

    マルチテナント環境の場合、PDBにログインします。例:

    sqlplus sec_admin@hrpdb
    Enter password: password
    Connected.
    

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

  2. COMPATIBLEパラメータの現在の設定を確認します。

    例:

    SHOW PARAMETER COMPATIBLE
     
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    compatible                           string      11.0.0.0
    noncdbcompatible                     BOOLEAN     FALSE
    
  3. COMPATIBLEパラメータを変更する必要がある場合、この手順の残りのステップを実行します。

    値は、11.2.0.0以上である必要があります。

  4. データベース・インスタンスの初期化パラメータ・ファイルを特定します。

    • UNIXシステム: このファイルは、ORACLE_HOME/dbsディレクトリにあり、initORACLE_SID.ora (initmydb.oraなど)という名前です。

    • Windowsシステム: このファイルは、ORACLE_HOME\databaseディレクトリにあり、initORACLE_SID.ora (initmydb.oraなど)という名前です。

  5. 初期化パラメータ・ファイルを新しいCOMPATIBLE設定を使用するよう編集します。

    例:

    compatible=11.2.0.0.0
  6. SQL*Plusで、SYSDBA管理権限を持つユーザーとして接続し、データベースを停止します。

    例:

    CONNECT /AS SYSDBA
    SHUTDOWN
    
  7. 正しいCOMPATIBLE設定を使用して初期化パラメータ・ファイルを編集します。

    例:

    COMPATIBLE = 12.1.0.0
    
  8. SQL*Plusで、SYSDBA管理権限を持つユーザーとして接続していることを確認し、データベースを起動します。

    例:

    CONNECT /AS SYSDBA
    STARTUP
    

    表領域の暗号化を使用している場合は、データベース・マウントでキーストアを開きます。キーストアは、暗号化された表領域のデータにアクセスする前に開いている必要があります。

    STARTUP MOUNT;
    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY keystore_password;
    ALTER DATABASE OPEN;

手順2: 表領域TDEマスター暗号化鍵の設定

TDEマスター暗号化鍵が構成されていることを確認する必要があります。

手順3: 暗号化された表領域の作成

COMPATIBLE初期化パラメータを設定したら、暗号化された表領域の作成は完了です。

内容は次のとおりです。

暗号化された表領域の作成について

暗号化された表領域を作成するには、CREATE TABLESPACE SQL文を使用します。

暗号化された表領域を作成するには、CREATE TABLESPACEシステム権限が必要です。

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

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

表領域が暗号化されたかどうかを確認するために、DBA_TABLESPACESデータ・ディクショナリ・ビューおよびUSER_TABLESPACESデータ・ディクショナリ・ビューのENCRYPTED列を問い合せることができます。

関連項目:

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

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

暗号化された表領域を作成するには、ENCRYPTION USING句を含むCREATE TABLESPACE文を使用する必要があります。

  1. CREATE TABLESPACEシステム権限が付与されたユーザーとして、データベース・インスタンスにログインします。

    マルチテナント環境の場合、PDBにログインします。例:

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

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

  2. 暗号化句を使用してCREATE TABLESPACE文を実行します。

    例:

    CREATE TABLESPACE encrypt_ts
      DATAFILE '$ORACLE_HOME/dbs/encrypt_df.dbf' SIZE 1M
      ENCRYPTION USING 'AES256'
      DEFAULT STORAGE (ENCRYPT);
    

    ここでは次のように指定します。

    • ENCRYPTION USING 'AES256'には、暗号化アルゴリズムおよび暗号化鍵の長さを指定します。この設定は一重引用符(' ')で囲みます。鍵長は、アルゴリズムの名前に含まれています。暗号化アルゴリズムを指定しない場合は、デフォルトの暗号化アルゴリズムAES128が使用されます。次のアルゴリズムから選択します。

      • 3DES168

      • AES128

      • AES192

      • AES256

    • DEFAULT STORAGE句のENCRYPTは、表領域を暗号化します。

関連項目:

CREATE TABLESPACE文の構文の詳細は、Oracle Database SQL言語リファレンスを参照してください。

例: 3DES168を使用する暗号化された表領域の作成

CREATE TABLESPACE SQL文を使用して、暗号化された表領域を作成できます。

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

例3-8 3DES168を使用する暗号化された表領域の作成

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

例: デフォルト・アルゴリズムを使用する暗号化された表領域の作成

CREATE TABLESPACE SQL文を使用して、デフォルト・アルゴリズムを使用する暗号化された表領域を作成できます。

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

既存の表領域は暗号化できません。

例3-9 デフォルト・アルゴリズムを使用する暗号化された表領域の作成

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

透過的データ暗号化のデータの動的ビューおよびデータ・ディクショナリ・ビュー

Oracle Databaseには、透過的データ暗号化データに関する詳細情報を検索するために問い合せできる、一連の動的ビューおよびデータ・ディクショナリ・ビューが用意されています。

表3-2に、これらの動的ビューおよびデータ・ディクショナリ・ビューを示します。

表3-2 透過的データ暗号化の関連ビュー

ビュー 説明

ALL_ENCRYPTED_COLUMNS

現在のユーザーがアクセスできる表内の暗号化列に関する暗号化情報が表示されます。

DBA_ENCRYPTED_COLUMNS

データベースにあるすべての暗号化列の暗号化情報が表示されます。

USER_ENCRYPTED_COLUMNS

現在のユーザーのスキーマにある暗号化された表の列の暗号化情報が表示されます。

DBA_TABLESPACE_USAGE_METRICS

永続、一時、およびUNDO表領域を含むすべてのタイプの表領域についての表領域使用状況メトリックを示します

V$CLIENT_SECRETS

様々な機能(クライアント)用のキーストアに格納された文字列(シークレット)のプロパティが一覧表示されます。

マルチテナント環境では、PDB内のこのビューを問い合せると、現在のPDB用に作成またはアクティブ化された鍵に関する情報が表示されます。rootでこのビューを問い合せると、すべてのPDBの鍵に関するこの情報が表示されます。

V$ENCRYPTED_TABLESPACES

暗号化された表領域に関する情報が表示されます。

V$ENCRYPTION_KEYS

ADMINISTER KEY MANAGEMENT文でローテーションされた鍵とともに使用されたときには、TDEマスター暗号化鍵についての情報を表示します。

マルチテナント環境では、PDB内のこのビューを問い合せると、現在のPDB用に作成またはアクティブ化された鍵に関する情報が表示されます。rootでこのビューを問い合せると、すべてのPDBの鍵に関するこの情報が表示されます。

V$ENCRYPTION_WALLET

TDEのキーストアのステータスおよびキーストアの場所に関する情報が表示されます。

V$WALLET

TDEのマスター暗号化鍵として使用できるPKI証明書のメタデータ情報が表示されます。

関連項目:

これらのビューの詳細は、Oracle Databaseリファレンスを参照してください。