17 データ・ディクショナリ内の機密性の高い資格証明データの暗号化

データ・ディクショナリ内に格納されているパスワードなどの機密性の高い資格証明情報を暗号化できます。

17.1 データ・ディクショナリ内の機密性の高い資格証明データの暗号化について

データ・ディクショナリSYS.LINK$およびSYS.SCHEDULER$_CREDENTIALシステム表にはユーザー・パスワードなどの機密性の高い資格証明データが格納されています。

SYS.LINK$表には、データベース・リンクに関する情報が格納されます。SYS.SCHEDULER$_CREDENTIALには、Oracle Schedulerイベントに関する情報が格納されます。デフォルトでは、これらの表に格納されている機密性の高い資格証明データは不明瞭化されています。

ALTER DATABASE DICTIONARY文を使用して、SYS.LINK$表およびSYS.SCHEDULER$_CREDENTIAL表に格納されているデータを手動で暗号化できます。この機能は透過的データ暗号化(TDE)を使用しますが、暗号化を実行するにはAdvanced Securityオプション・ライセンスは必要なく、SYSKM管理権限を持っている必要があります。TDEは、AES256(Advanced Encryption Standard)アルゴリズムを使用して暗号化を実行します。暗号化は、TDEを使用して暗号化されたその他のデータと同じ動作を行います。

最適なセキュリティ・プラクティスとして、この機密性の高い資格証明データを暗号化することをお薦めします。データ・ディクショナリの資格証明のステータスを確認するために、DICTIONARY_CREDENTIALS_ENCRYPTデータ・ディクショナリ・ビューを問い合せることができます。

17.2 マルチテナント・オプションが機密データの暗号化に及ぼす影響

アプリケーション・ルートから、および個々のプラガブル・データベース(PDB)内で、機密のデータ・ディクショナリ情報を暗号化できます。

SYS.LINK$システム表およびSYS.SCHEDULER$_CREDENTIALシステム表内の機密性の高い資格証明データの暗号化、キー更新、または復号化を行う場合は、プロセスの完了後に影響を受けたPDBを同期させる必要があります。これを行う方法については、これらのトピックについて取り上げている手順を参照してください。

17.3 システム表内の機密性の高い資格証明データの暗号化

ALTER DATABASE DICTIONARY文は、SYS.LINK$システム表およびSYS.SCHEDULER$_CREDENTIALシステム表内の機密性の高い資格証明データを暗号化できます。

ENCRYPT CREDENTIALS句を指定したALTER DATABASE DICTIONARY文を実行してSYS.LINK$およびSYS.SCHEDULER$_CREDENTIALを暗号化する前に、データベースにオープン・キーストアおよび暗号化キーが必要です。資格証明データ暗号化プロセスは、不明瞭化されたパスワードの不明瞭化を解除してから、パスワードを暗号化します。この暗号化は、このプロセスが完了した後にユーザーが行う可能性のある今後のすべてのパスワード変更に適用されます。
  1. SYSKM管理権限を付与されたユーザーとして、アプリケーション・ルートまたはプラガブル・データベース(PDB)に接続します。
    たとえば:
    CONNECT hr_admin@pdb_name AS SYSKM
    Enter password: password

    CDB内の使用可能なPDBを確認するには、CDBルート・コンテナにログインし、DBA_PDBSデータ・ディクショナリ・ビューのPDB_NAME列を問い合せます。現在のコンテナを確認するには、show con_nameコマンドを実行します。

  2. 必要に応じて、キーストアを作成して開き、次に暗号化キーを設定します。
    V$ENCRYPTION_WALLET動的ビューを問い合せて、キーストアのステータスを確認できます。
    ADMINISTER KEY MANAGEMENT文を使用してこれらの3個のタスクを実行します。たとえば:
    ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/etc/ORACLE/WALLETS/orcl' IDENTIFIED BY password;
    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "password";
    ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY IDENTIFIED BY "password" WITH BACKUP;

    現在の場所がアプリケーション・ルートの場合はCONTAINER = ALL句を含めます。これは統合モードのPDBのキーストア操作に適用されます。分離モードであるPDBの場合、PDB内から文を実行します。

  3. ALTER DATABASE DICTIONARY文を実行して、データを暗号化します。
    たとえば:
    ALTER DATABASE DICTIONARY ENCRYPT CREDENTIALS;

    アプリケーション・ルートで、関連付けられたPDBに暗号化を適用するには、CONTAINER = ALL句を含めます。

    ALTER DATABASE DICTIONARY ENCRYPT CREDENTIALS CONTAINER = ALL;
  4. アプリケーション・ルートから暗号化を実行した場合、関連付けられたPDBを同期します。
    ALTER PLUGGABLE DATABASE APPLICATION APP$CDB$SYSTEM SYNC;

17.4 SYS.LINK$システム表内の機密性の高い資格証明データのキー更新

ALTER DATABASE DICTIONARY文を使用して、データ・ディクショナリSYS.LINK$およびSYS.SCHEDULER$_CREDENTIALシステム表内の機密性の高い資格証明データのキーを更新できます。

この機密性の高い資格証明データのキー更新を行うには、REKEY CREDENTIALS句を指定してALTER DATABASE DICTIONARY文を実行する必要があります。キー更新操作は列暗号化を使用しますが、他のTDEマスター暗号化キーには影響しません。
  1. SYSKM管理権限を付与されたユーザーとして、アプリケーション・ルートまたはプラガブル・データベース(PDB)に接続します。
    たとえば、PDBに接続するには、次の手順を実行します。
    CONNECT hr_admin@pdb_name AS SYSKM
    Enter password: password
  2. 必要に応じて、キーストアを作成して開き、次に暗号化キーを設定します。
    V$ENCRYPTION_WALLET動的ビューを問い合せて、キーストアのステータスを確認できます。
    ADMINISTER KEY MANAGEMENT文を使用してこれらの3個のタスクを実行します。たとえば:
    ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/etc/ORACLE/WALLETS/orcl' IDENTIFIED BY password;
    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "password";
    ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY IDENTIFIED BY "password" WITH BACKUP;

    現在の場所がアプリケーション・ルートの場合はCONTAINER = ALL句を含めます。

  3. ALTER DATABASE DICTIONARY文を実行してデータのキー更新を行います。
    たとえば:
    ALTER DATABASE DICTIONARY REKEY CREDENTIALS;

    アプリケーション・ルートで、関連付けられたPDBに暗号化を適用するには、CONTAINER = ALL句を含めます。

    ALTER DATABASE DICTIONARY REKEY CREDENTIALS CONTAINER = ALL;
  4. アプリケーション・ルートからキー更新操作を実行した場合、関連付けられたPDBを同期します。
    ALTER PLUGGABLE DATABASE APPLICATION APP$CDB$SYSTEM SYNC;

17.5 システム表内の機密性の高い資格証明データの削除

ALTER DATABASE DICTIONARY文は、SYS.LINK$およびSYS.SCHEDULER$_CREDENTIAL内の既存の資格証明を無効にし、それらの表に対する今後の資格証明エントリを不明瞭化できます。

この資格証明データを削除するには、DELETE CREDENTIALS句を指定してALTER DATABASE DICTIONARY文を実行する必要があります。この文は主に透過的データ暗号化(TDE)キーストアの消失からデータベース・リンクをリカバリする必要がある場合に使用されます。
  1. SYSKM管理権限を付与されたユーザーとして、アプリケーション・ルートまたはプラガブル・データベース(PDB)に接続します。
    たとえば:
    CONNECT hr_admin@pdb_name AS SYSKM
    Enter password: password
  2. 必要に応じて、キーストアを作成して開き、次に暗号化キーを設定します。
    V$ENCRYPTION_WALLET動的ビューを問い合せて、キーストアのステータスを確認できます。
    ADMINISTER KEY MANAGEMENT文を使用してこれらの3個のタスクを実行します。たとえば:
    ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/etc/ORACLE/WALLETS/orcl' IDENTIFIED BY password;
    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "password";
    ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY IDENTIFIED BY "password" WITH BACKUP;

    現在の場所がアプリケーション・ルートの場合はCONTAINER = ALL句を含めます。

  3. ALTER DATABASE DICTIONARY文を実行してパスワード資格証明を削除します。
    たとえば:
    ALTER DATABASE DICTIONARY DELETE CREDENTIALS KEY;

    アプリケーション・ルートで、関連付けられたPDB内のSYS.LINK$およびSYS.SCHEDULER$_CREDENTIALパスワード資格証明を削除するには、CONTAINER = ALL句を含めます。

    ALTER DATABASE DICTIONARY DELETE CREDENTIALS CONTAINER = ALL;
  4. アプリケーション・ルートからの資格証明の削除を実行した場合、関連付けられたPDBを同期します。
    ALTER PLUGGABLE DATABASE APPLICATION APP$CDB$SYSTEM SYNC;

17.6 キーストアの消失後のデータベース・リンクの機能の復元

TDEキーストアおよびそのマスター暗号化キーが誤って失われると、データベース・リンクが悪影響を受ける可能性があります。

TDEキーストアとマスター暗号化キーが失われた場合、暗号化されたパスワードを使用して認証されている既存のデータベース・リンクが使用できなくなります。
  1. SYSKM管理権限とALTER DATABASE LINKシステム権限があるユーザーとして、アプリケーション・ルートまたはプラガブル・データベース(PDB)に接続します。
    たとえば:
    CONNECT hr_admin@pdb_name AS SYSKM
    Enter password: password
  2. SYS.LINK$システム表から暗号化された資格証明を削除します。
    ALTER DATABASE DICTIONARY DELETE CREDENTIALS KEY;

    アプリケーション・ルートからの削除を実行している場合、CONTAINER = ALL句を含めます。

    ALTER DATABASE DICTIONARY DELETE CREDENTIALS CONTAINER = ALL;
  3. キーストアを作成して開き、次に暗号化キーを設定します。
    たとえば:
    ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/etc/ORACLE/WALLETS/orcl' IDENTIFIED BY password;
    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "password";
    ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY IDENTIFIED BY "password" WITH BACKUP;

    現在の場所がアプリケーション・ルートの場合はCONTAINER = ALL句を含めます。

  4. SYS.LINK$およびSYS.SCHEDULER$_CREDENTIALのパスワード資格証明を暗号化します。
    ALTER DATABASE DICTIONARY ENCRYPT CREDENTIALS;

    アプリケーション・ルートから暗号化を実行している場合、CONTAINER = ALL句を含めます。

    ALTER DATABASE DICTIONARY ENCRYPT CREDENTIALS CONTAINER = ALL;
  5. データベース・リンクに関連付けられているユーザーのパスワードを使用して、ALTER DATABASE DICTIONARY DELETE CREDENTIALS KEY文の影響を受けたデータベース・リンクのパスワードをリセットします。
    たとえば:
    ALTER DATABASE LINK database_link_name CONNECT TO user_id IDENTIFIED BY password CONTAINER = ALL;

    既存のデータベース・リンクおよびその所有者を検索するには、DBA_DB_LINKSデータ・ディクショナリ・ビューを問い合せます。

  6. アプリケーション・ルートからの資格証明の削除を実行した場合、関連付けられたPDBを同期します。
    ALTER PLUGGABLE DATABASE APPLICATION APP$CDB$SYSTEM SYNC;

17.7 暗号化データ・ディクショナリ資格証明のデータ・ディクショナリ・ビュー

Oracle Databaseには、データ・ディクショナリ内の機密性の高い資格証明データの暗号化に関する情報を提供する一連のデータ・ディクショナリ・ビューが用意されています。

表17-1に、データ・ディクショナリ・ビューを示します。

表17-1 暗号化データ・ディクショナリ資格証明のデータ・ディクショナリ・ビュー

ビュー 説明

ALL_DB_LINKS

現行のユーザーがアクセスできるデータベース・リンクを示します。VALID列の値がYESの場合、データベース・リンクが使用可能であることを示します。

DBA_DB_LINKS

データベース内のデータベース・リンクをすべて示します。VALID列の値がYESの場合、データベース・リンクが使用可能であることを示します。(このビューは、SYSまたはDBAロールを付与されているユーザーなどの管理ユーザーのみ使用できます。)

DICTIONARY_CREDENTIALS_ENCRYPT

ディクショナリ資格証明のステータスを示します。ENFORCEMENT列は、資格証明が暗号化されている場合はENABLEDを、資格証明が暗号化されていない場合はDISABLEDをリストします。

USER_DB_LINKS

現行のユーザーが所有するデータベース・リンクを示します。VALID列の値がYESの場合、データベース・リンクが使用可能であることを示します。