3 Oracle Database Vaultの開始

Oracle Database Vaultを使用して開始する前に、これをOracle Databaseで構成および有効化する必要があります。

3.1 Oracle DatabaseでのOracle Database Vaultの構成および有効化について

インストール・プロセスでデフォルト・データベースを含めるように選択した場合、Oracle DatabaseにはDatabase Vaultが付属していますが、使用するには構成して有効化する必要があります。

構成および有効化プロセスでは、Oracle Label Securityがまだ有効ではない場合、有効になります。Oracle Label SecurityはOracle Database Vaultに必要ですが、別にOracle Label Securityの使用を開始してOracle Label Securityポリシーを作成する場合を除き、別個のライセンスは必要ありません。

カスタム・データベースを作成する場合、DBCAを使用してDatabase Vaultをインストールし、そのデータベースに対して有効にすることができます。登録プロセスでは、Oracle Label Securityがまだ有効ではない場合、有効になります。この手順は、CDBルート、アプリケーション・ルートおよび現在のプラガブル・データベース(PDB)に適用され、単一インスタンスとOracle Real Application Clusters (Oracle RAC)の両方のインストールに適用されます。マルチテナント・データベースでは、PDBのいずれかでDatabase Vaultを構成する前に、Database VaultをCDBルートで構成する必要があります。

構成プロセスの一環として、Oracle Database Vault管理者アカウントを作成しました。Oracle Database Vault構成では、それぞれに異なるパスワードを持つ4つの管理データベース・アカウント名(2つのプライマリ・アカウントと2つのバックアップ・アカウント)を推奨します。これらは、WITH ADMIN OPTION句で付与された、Database VaultのロールであるDV_OWNERおよびDV_ACCTMGRを保持するアカウントです。これらのアカウントの2つを使用して、管理権限を持つ名前付きユーザーにロールをプロビジョニングします。DV_OWNERおよびDV_ACCTMGRロールを持つ2つのバックアップ・アカウントを保持すると、SYSまたは他のユーザーはこれらのロールを持つユーザーのパスワードをリセットできないため、名前付きユーザーの資格証明の紛失または資格証明の配置の誤りからリカバリできます。

ノート:

Oracle Database 12cより前のリリースからアップグレードした場合、Oracle Database Vaultを無効にしてアップグレードを実行します。アップグレード・プロセスが完了したら、Oracle Database Vaultを再度構成して有効にする必要があります。

リリース12cより前のリリースからDatabase Vaultが有効化されていないOracleデータベースを移行する場合、Database Vaultの手動インストールを実行する必要があります。

3.2 Oracle Database Vaultの構成および有効化

いくつかのシナリオに基づいてOracle Database Vaultを構成および有効化できます。

3.2.1 Database Vaultの構成および有効化について

関連するPDBで同じアクションを実行する前に、CDBルートでOracle Database Vaultを構成して有効化する必要があります。

CDBルートでDV_OWNERロールとDV_ACCTMGRロールを割り当てられた共通ユーザーも、PDBで同じロールを持つことができます。PDBでは、同じ共通ユーザーを使用してDatabase Vaultを構成および有効化することも、別のPDBローカル・ユーザーを使用することもできます。DV_ACCTMGRロールは、CDBルートの共通ユーザーに共通に付与されます。Database VaultをCDBルートに構成および有効化するときに、DV_OWNERをローカルに、またはCDBルート共通ユーザーに共通に付与できます。DV_OWNERを共通ユーザーにローカルに付与すると、共通DV_OWNERユーザーは、どのPDBでもこのロールを使用できなくなります。

3.2.2 CDBルートでのDatabase Vaultの構成および有効化

CDBルートからDatabase Vault管理ロールを使用する予定の共通ユーザーに、Oracle Database Vaultを構成し有効化できます。

開始する前に、すべてのデータベース関連オブジェクトが有効であることを確認することをお薦めします。UTL_RECOMP PL/SQLパッケージを使用して、オブジェクトの妥当性をチェックできます。『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
  1. ユーザー作成権限を持ち、CREATE SESSIONおよびSET CONTAINER権限を付与する権限を持つユーザーとして、データベース・インスタンスのCDBルートにログインします。
  2. Database Vault所有者(DV_OWNERロール)およびDatabase Vaultアカウント・マネージャ(DV_ACCTMGRロール)のアカウント用に使用されるユーザー・アカウントを選択(または新規ユーザーを作成)選択します。

    ロールごとに2つのアカウントを維持することをお薦めします。一方のアカウントはその名前付きユーザーのプライマリ・アカウントであり、日常的に使用されます。他方のアカウントは、プライマリ・アカウントのパスワードを忘れてしまいリセットする必要がある場合に備えたバックアップ・アカウントとして使用されます。アカウントのバックアップがない場合は、パスワードをリセットできません。また、プライマリ・アカウントのパスワードをリセットできるようにするには、DV_OWNERロールとWITH ADMIN OPTIONを付与する必要があります。これらのパスワードを、将来必要になる場合に備えて、特権アカウント管理(PAM)システムなどの安全な場所に格納します。

    これらのアカウント名の先頭にc##またはC##を付加します。たとえば:

    GRANT CREATE SESSION, SET CONTAINER TO c##dvowner 
      IDENTIFIED BY password CONTAINER = ALL;
    GRANT CREATE SESSION, SET CONTAINER TO c##dvowner_backup 
      IDENTIFIED BY password CONTAINER = ALL;
    GRANT CREATE SESSION, SET CONTAINER TO c##dvacctmgr 
      IDENTIFIED BY password CONTAINER = ALL;
    GRANT CREATE SESSION, SET CONTAINER TO c##dvacctmgr_backup 
      IDENTIFIED BY password CONTAINER = ALL;

    この指定では、2つのシステム権限を付与し、アカウントが存在しない場合はアカウントを作成し、パスワードを割り当て、すべてのユーザーがCDBおよびすべてのPDBデータベースにアクセスできるようにしています。

    • プライマリ・アカウント(c##dvownerおよび c##dvacctmgr)が新規ロールDV_ADMINおよびDV_ACCTMGRにまだ存在しない場合、これらを作成します。
    • passwordを、ユーザーのプロファイルのパスワードの複雑度要件を満たすパスワードに置き換えます。
  3. SYSDBA管理権限があるユーザーSYSとしてCDBルートに接続します。
  4. 2つのバックアップDatabase Vaultユーザー・アカウントを構成します。
    たとえば:
    BEGIN
     CONFIGURE_DV (
       dvowner_uname         => 'c##dvowner_backup',
       dvacctmgr_uname       => 'c##dvacctmgr_backup',
       force_local_dvowner   => FALSE);
     END;
    /
    この例では、force_local_dvownerFALSEに設定すると、共通ユーザーは、このCDBルートに関連付けられているPDBのDV_OWNER権限を持つことができます。TRUEに設定すると、共通DV_OWNERユーザーはCDBルートにのみDV_OWNERロール権限を持つように制限されます。DV_OWNERをCDBルート共通ユーザーにローカルに付与すると、そのユーザーはその他のユーザーに共通にDV_OWNERロールを付与できません。
  5. utlrp.sqlスクリプトを実行して、ルートで無効化されたオブジェクトを再コンパイルします。
    @?/rdbms/admin/utlrp.sql
    

    スクリプトから指示がある場合はそれに従い、再びスクリプトを実行します。指示がなくスクリプトが異常終了した場合は、再びスクリプトを実行します。

  6. 先ほど構成したバックアップDatabase Vault所有者ユーザーとして、ルートに接続します。

    たとえば:

    CONNECT c##dvowner_backup
    Enter password: password
    
  7. 次のいずれかのコマンドを使用して、Oracle Database Vaultを有効にします。
    • Oracle Database Vaultで通常モードを使用できるようにするには、次のようにします。

      EXEC DBMS_MACADM.ENABLE_DV;
    • 関連するすべてのPDBがこのデータベースでDatabase Vaultを有効にする必要がある場合、次のコマンドを使用します。(この手順の完了後、これらのPDBをそれぞれ有効にする必要があります。)Database Vaultを有効にしていないPDBは、データベースの再起動後、Database VaultがPDBで有効になるまで制限モードになります。

      EXEC DBMS_MACADM.ENABLE_DV (strict_mode => 'y');
  8. SYSOPER管理権限で接続します。
  9. データベースを再起動します。
    単一インスタンス・データベースの場合:
    SHUTDOWN IMMEDIATE
    STARTUP

    Oracle Real Application Clusters (Oracle RAC)環境にいる場合は、Oracle RACのローリング有効化を実行できます。

  10. SYSDBA管理権限を使用して接続します。
  11. Oracle Database VaultおよびOracle Label Securityがインストールされ、有効になっていることを確認します。
    SELECT * FROM CDB_DV_STATUS;
    SELECT * FROM CDB_OLS_STATUS;
  12. バックアップDV_OWNERユーザーとして接続し、前に作成したプライマリDV_OWNERユーザーにDV_OWNERロールを付与します(その際はWITH ADMIN OPTION句を指定します)。

    たとえば:

    CONNECT c##dvowner_backup
    Enter password: password
    
    GRANT DV_OWNER TO c##dvowner WITH ADMIN OPTION CONTAINER = ALL;
  13. バックアップDV_ACCTMGRユーザーとして接続し、DV_ACCTMGRロールをプライマリDV_ACCTMGRユーザーに付与します(その際はWITH ADMIN OPTION句を指定します)。

    たとえば:

    CONNECT c##dvacctmgr_backup
    Enter password: password
    
    GRANT DV_ACCTMGR TO c##dvacctmgr WITH ADMIN OPTION CONTAINER=ALL;
  14. 2つのバックアップ・アカウント・パスワードを、将来必要になる場合に備えて、特権アカウント管理(PAM)システムなどの安全な場所に格納します。

3.2.3 個別PDBを管理するためのDatabase Vault共通ユーザーの構成および有効化

Oracle Database VaultをまずCDBルートで構成および有効化してから、PDBで構成および有効化する必要があります。

最初にPDBで構成して有効化しようとすると、ORA-47503「Database VaultはCDB$ROOTで有効化されていません。」エラーが表示されます。
  1. まだ実行していない場合、関連するバックアップ・アカウントとともにDatabase Vaultアカウントとして使用する名前付きの共通ユーザー・アカウントを指定または作成します。
  2. CDBルートでOracle Database Vaultを構成して有効化し、共通ユーザーにDV_OWNERロールが共通に付与されていることを確認します。
  3. PDBに対してローカルである管理者としてPDBに接続します。
  4. 必要に応じて、データベースを開きます。
    ALTER DATABASE OPEN;
  5. このPDBのためにユーザーにCREATE SESSION権限およびSET CONTAINER権限を付与します。
    たとえば:
    GRANT CREATE SESSION, SET CONTAINER TO c##dvowner CONTAINER = CURRENT;
    GRANT CREATE SESSION, SET CONTAINER TO c##dvacctmgr CONTAINER = CURRENT;
  6. SYSDBA管理権限を持つユーザーSYSとして接続します
  7. PDBにいる間に、2つのバックアップDatabase Vaultユーザー・アカウントを構成します。
    BEGIN
     CONFIGURE_DV (
       dvowner_uname         => 'c##dvowner_backup',
       dvacctmgr_uname       => 'c##dvacctmgr_backup');
     END;
    /
    

    この例では、force_local_dvownerパラメータは不要なため省略されます。PDB内で構成されているすべての共通ユーザーは、PDBの範囲に制限されます。

  8. utlrp.sqlスクリプトを実行して、このPDBで無効化されたオブジェクトを再コンパイルします。
    @?/rdbms/admin/utlrp.sql
    

    スクリプトから指示がある場合はそれに従い、再びスクリプトを実行します。指示がなくスクリプトが異常終了した場合は、再びスクリプトを実行します。

  9. 先ほど構成したバックアップDatabase Vault所有者ユーザーとして、PDBに接続します。
    たとえば:
    CONNECT c##dvowner_backup@pdb_name
    Enter password: password
    
  10. このPDBでOracle Database Vaultを有効にします。
    EXEC DBMS_MACADM.ENABLE_DV;
  11. SYSDBA管理権限でCDBに接続します。
  12. PDBを閉じてから、再度開きます。
    たとえば:
    ALTER PLUGGABLE DATABASE pdb_name CLOSE IMMEDIATE;
    ALTER PLUGGABLE DATABASE pdb_name OPEN;
    
  13. PDBが構成され、Database VaultおよびOracle Label Securityに対して有効化されていることを確認します。
    CONNECT SYS@pdb_name AS SYSDBA
    Enter password: password
    
    SELECT * FROM DBA_DV_STATUS;
    SELECT * FROM DBA_OLS_STATUS;
  14. バックアップDV_OWNERユーザーとして接続し、前に作成したプライマリDV_OWNERユーザーに、WITH ADMIN OPTION句を含むDV_OWNERロールを付与します。

    たとえば:

    CONNECT c##dvowner_backup@pdb_name
    Enter password: password
    
    GRANT DV_OWNER TO c##dvowner WITH ADMIN OPTION;
    
  15. バックアップDV_ACCTMGRユーザーとして接続し、DV_ACCTMGRロールをプライマリDV_ACCTMGRユーザーに付与します(その際はWITH ADMIN OPTION句を指定します)。

    たとえば:

    CONNECT c##dvacctmgr_backup@pdb_name
    Enter password: password
    
    GRANT DV_ACCTMGR TO c##dvacctmgr WITH ADMIN OPTION;
  16. 2つのバックアップ・アカウント・パスワードを、将来必要になる場合に備えて、特権アカウント管理(PAM)システムなどの安全な場所に格納します。

3.2.4 特定のPDBを管理するためのDatabase Vaultローカル・ユーザーの構成および有効化

Oracle Database Vaultをまずルートで構成および有効化してから、PDBで構成および有効化する必要があります。

先にPDBに構成および有効化しようとすると、「ORA-47503: Database VaultはCDB$ROOTで有効化されていません。」というエラーが発生します。
  1. ユーザー作成権限を持ち、CREATE SESSIONおよびSET CONTAINER権限を付与する権限を持つユーザーとしてPDBにログインします。
  2. 必要に応じて、データベースを開きます。
    ALTER DATABASE OPEN;
  3. 新しいDatabase Vaultロールに対して既存のローカル・ユーザーの名前付きアカウントを使用していない場合は、新しい名前付きローカル・ユーザー・アカウントを作成します。
    どちらの場合も、名前付きユーザーがパスワードを紛失した場合またはパスワードを忘れた場合に備えて、Database Vaultロールを保持するためにバックアップ・アカウントを作成する必要があります。
    GRANT CREATE SESSION, SET CONTAINER TO dvowner 
      IDENTIFIED BY password;
    GRANT CREATE SESSION, SET CONTAINER TO dvowner_backup 
      IDENTIFIED BY password;
    GRANT CREATE SESSION, SET CONTAINER TO dvacctmgr 
      IDENTIFIED BY password;
    GRANT CREATE SESSION, SET CONTAINER TO dvacctmgr_backup 
      IDENTIFIED BY password;
    

    ロールごとに2つのアカウントを維持することをお薦めします。一方のアカウントはその名前付きユーザーのプライマリ・アカウントであり、日常的に使用されます。他方のアカウントは、プライマリ・アカウントのパスワードを忘れてしまいリセットする必要がある場合に備えたバックアップ・アカウントとして使用されます。アカウントのバックアップがない場合は、パスワードをリセットできません。また、プライマリ・アカウントのパスワードをリセットできるようにするには、DV_OWNERロールとWITH ADMIN OPTIONを付与する必要があります。これらのパスワードを、将来必要になる場合に備えて、特権アカウント管理(PAM)システムなどの安全な場所に格納します。

  4. CDBルートでOracle Database Vaultを構成して有効化したことを確認します。
    ルートに一時的に接続してから、DBA_DV_STATUSビューを問い合せます。
    CONNECT SYS / AS SYSDBA
    Enter password: password
    
    SELECT * FROM DBA_DV_STATUS;
    
  5. SYSDBA管理権限を持つユーザーSYSとしてPDBに接続します。
  6. PDBにいる間に、2つのバックアップDatabase Vaultユーザー・アカウントを構成します。
    BEGIN
     CONFIGURE_DV (
       dvowner_uname     => 'dvowner_backup',
       dvacctmgr_uname   => 'dvacctmgr_backup');
     END;
    /
    

    この例では、force_local_dvownerパラメータは不要なため省略されます。Database Vaultロールは、PDBで構成したときにローカルに付与されます。

  7. utlrp.sqlスクリプトを実行して、このPDBで無効化されたオブジェクトを再コンパイルします。
    @?/rdbms/admin/utlrp.sql

    スクリプトから指示がある場合はそれに従い、再びスクリプトを実行します。指示がなくスクリプトが異常終了した場合は、再びスクリプトを実行します。

  8. 先ほど構成したバックアップDatabase Vault所有者ユーザーとして、PDBに接続します。
    たとえば:
    CONNECT dvowner_backup@pdb_name
    Enter password: password
    
  9. このPDBでOracle Database Vaultを有効にします。
    EXEC DBMS_MACADM.ENABLE_DV;
  10. SYSDBA管理権限でCDBに接続します。
    CONNECT / AS SYSDBA
  11. PDBを閉じてから、再度開きます。
    ALTER PLUGGABLE DATABASE pdb_name CLOSE IMMEDIATE;
    ALTER PLUGGABLE DATABASE pdb_name OPEN;
    
  12. PDBが構成され、Database VaultおよびOracle Label Securityに対して有効化されていることを確認します。
    CONNECT SYS@pdb_name AS SYSDBA
    Enter password: password
    
    SELECT * FROM DBA_DV_STATUS;
    SELECT * FROM DBA_OLS_STATUS;
  13. バックアップDV_OWNERユーザーとして接続し、前に作成したプライマリDV_OWNERユーザーに、WITH ADMIN OPTION句を含むDV_OWNERロールを付与します。

    たとえば:

    CONNECT dvowner_backup@pdb_name
    Enter password: password
    
    GRANT DV_OWNER TO dvowner WITH ADMIN OPTION;
    
  14. バックアップDV_ACCTMGRユーザーとして接続し、DV_ACCTMGRロールをプライマリDV_ACCTMGRユーザーに付与します(その際はWITH ADMIN OPTION句を指定します)。

    たとえば:

    CONNECT dvacctmgr_backup@pdb_name
    Enter password: password
    
    GRANT DV_ACCTMGR TO dvacctmgr WITH ADMIN OPTION;
  15. 2つのバックアップ・アカウント・パスワードを、将来必要になる場合に備えて、特権アカウント管理(PAM)システムなどの安全な場所に格納します。

3.2.5 Oracle Real Application Clusters環境でのOracle Database Vaultの構成および有効化

各Oracle RACノードを含むOracle Real Application Clusters (Oracle RAC)環境用にOracle Database Vaultを構成できます。

Oracle RAC環境にOracle Database Vaultを構成するには、1つのノードでOracle Database Vaultを構成して有効化し、各インスタンス・ノードを再起動して、すべてのノードで有効にする必要があります。次の手順では、ノードごとに別個のOracleホームがあると仮定します。Oracle RACでのローリング・パッチのインストールをよく理解している場合は、同様のステップを実行して、すべてのOracle RACノードでOracle Database Vaultを有効化します。
  1. CDBルートでOracle Database Vaultを構成して有効化します。
  2. SYSDBA管理権限を持つユーザーSYSとしてPDBにログインします。
  3. 必要に応じて、データベースを開きます。
    ALTER DATABASE OPEN;
  4. いずれかのOracle RACノードで次のALTER SYSTEM文を実行します:
    ALTER SYSTEM SET OS_ROLES=FALSE SCOPE=SPFILE; 
    ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE='EXCLUSIVE' SCOPE=SPFILE;
    ALTER SYSTEM SET SQL92_SECURITY=TRUE SCOPE=SPFILE; 
  5. PDBを閉じてから、再度開きます。
    ALTER PLUGGABLE DATABASE pdb_name CLOSE IMMEDIATE;
    ALTER PLUGGABLE DATABASE pdb_name OPEN;

3.2.6 DV_OWNERおよびDV_ACCTMGRユーザーを保護するプロファイルの作成

プロファイルは、DV_OWNERおよびDV_ACCTMGRロールを付与されたユーザーに追加の保護を提供します。

DV_OWNERまたはDV_ACCTMGRロールを付与されたデータベース・ユーザーは、クリティカルな特権アカウントとみなされます。通常、これらのアカウントはサービス・アカウントとみなしてパスワードのロックアウト要件が適用されないようにする必要があります。Oracleでは、アカウントがロックされないカスタム・プロファイルを作成することをお薦めします。また、これらのDatabase Vault関連のアカウントの失敗したログイン試行の監査も必要です。
  1. CREATE PROFILEシステム権限を持つユーザーとして、データベース・インスタンスにログインします。
    • 共通DV_OWNERおよびDV_ACCTMGRユーザーの場合: データベース・インスタンスのルートにログインします。
    • ローカルのDV_OWNERおよびDV_ACCTMGRユーザーの場合: ユーザーを作成したPDBにログインします。
  2. 次のようなプロファイルを作成します。
    • 共通DV_OWNERおよびDV_ACCTMGRユーザーの場合: ルートで、次のようなプロファイルを作成します。
      CREATE PROFILE c##dv_profile limit
      FAILED_LOGIN_ATTEMPTS 5
      PASSWORD_VERIFY_FUNCTION ORA12C_VERIFY_FUNCTION
      PASSWORD_LOCK_TIME 1/1440
      CONTAINER=ALL;

      password_lock_timeを1/1440に設定すると、ログイン試行が5回失敗した後、ユーザー・アカウントが1分間ロックされます。これにより、DV_OWNER関連のアカウントを永久にロックアウトできなくなります。組織や業界標準に合わせてこの制限を調整する必要があります。

    • ローカルDV_OWNERおよびDV_ACCTMGRユーザーの場合: PDBで、次のようなプロファイルを作成します。
      CREATE PROFILE dv_profile limit
      FAILED_LOGIN_ATTEMPTS 5
      PASSWORD_VERIFY_FUNCTION ORA12C_VERIFY_FUNCTION
      PASSWORD_LOCK_TIME 1/1440
      CONTAINER=CURRENT;

      password_lock_timeを1/1440に設定すると、ログイン試行が5回失敗した後、ユーザー・アカウントが1分間ロックされます。これにより、DV_OWNER関連のアカウントを永久にロックアウトできなくなります。組織や業界標準に合わせてこの制限を調整する必要があります。

  3. このプロファイルを使用するために、DV_OWNERおよびDV_ACCTMGRユーザー・アカウントを更新します。
    • 共通DV_OWNERおよびDV_ACCTMGRユーザーの場合:
      ALTER USER c##dvowner PROFILE c##dv_profile CONTAINER = ALL;
      ALTER USER c##dvowner_backup PROFILE c##dv_profile CONTAINER = ALL;
      ALTER USER c##dvacctmgr PROFILE c##dv_profile CONTAINER = ALL;
      ALTER USER c##dvacctmgr_backup PROFILE c##dv_profile CONTAINER = ALL;
    • ローカルDV_OWNERおよびDV_ACCTMGRユーザーの場合:
      ALTER USER dvowner PROFILE dv_profile CONTAINER = CURRENT;
      ALTER USER dvowner_backup PROFILE dv_profile CONTAINER = CURRENT;
      ALTER USER dvacctmgr PROFILE dv_profile CONTAINER = CURRENT;
      ALTER USER dvacctmgr_backup PROFILE dv_profile CONTAINER = CURRENT;
  4. AUDIT_ADMINロールを付与されたユーザーとして接続します。
  5. 統合監査ポリシーを作成して有効化し、DV_OWNERまたはDV_ACCTMGRロールを付与されたユーザーによる失敗したログインを追跡します。
    • 共通DV_OWNERおよびDV_ACCTMGRユーザーの場合: ルートで、次のようなポリシーを作成します。
      CREATE AUDIT POLICY c##dv_logins ACTIONS LOGON;
      AUDIT POLICY c##dv_logins BY USERS WITH GRANTED ROLES DV_OWNER, DV_ACCTMGR 
      WHENEVER NOT SUCCESSFUL;
    • ローカルDV_OWNERおよびDV_ACCTMGRユーザーの場合: PDBで、次のようなポリシーを作成します。
      CREATE AUDIT POLICY dv_logins ACTIONS LOGON;
      AUDIT POLICY dv_logins BY USERS WITH GRANTED ROLES DV_OWNER, DV_ACCTMGR 
      WHENEVER NOT SUCCESSFUL;

3.2.7 Oracle Database Vaultの手動インストール

特定の条件下では、Oracle Database Vaultを手動でインストールする必要があります。

たとえば、Database Vaultのないリリース19c Oracle Databaseをリリース23aiにアップグレードしてから、23ai Database Vault対応データベースに接続するPDBに変換する場合は、Oracle Database Vaultを手動でインストールする必要があります。さらに、Database VaultおよびLabel SecurityがインストールされているCDBにPDBが接続されており、このPDBにこれらの製品がない場合は、Oracle Database Vault (およびOracle Label Security)をPDBに手動でインストールする必要があります。
  1. SYSDBA管理権限を付与されているユーザーとして、Oracle Database VaultをインストールするPDBにログインします。

    または、DV_OWNERまたはDV_ADMINロールを持つユーザーとしてCDBルートにログインし、すべてのPDBが開いていること、およびOracle Database Vaultが関連付けられているすべてのPDBにあることを確認します。PDBが開いているかどうかを確認するには、PDBに接続し、V$DATABASEビューからOPEN_MODE列を問い合せます。CDBにOracle Database Vaultがインストールされているかどうかを確認するには、SYSDBA管理権限を持つユーザーとして、次の問合せを実行します。

    SELECT * FROM DBA_DV_STATUS;
  2. 必要な場合は、Oracle Database VaultおよびOracle Label SecurityがこのPDBにすでにインストールされているかどうかを確認します。
    DVSYSおよびDVFアカウント(Database Vault用)および LBACSYSアカウント(Label Security用)が存在する場合、Database VaultおよびLabel SecurityがPDBに存在します。
    SELECT USERNAME FROM DBA_USERS WHERE USERNAME IN ('DVSYS', 'DVF', 'LBACSYS');

    正しくインストールされている場合、この結果には、Oracle Label SecurityとOracle Database Vaultの両方のメジャー・データベース・バージョンおよびVALIDのステータスが表示されます。

    SELECT COMP_NAME, VERSION, STATUS FROM DBA_REGISTRY WHERE COMP_ID IN ('DV','OLS');
  3. Database VaultもLabel Securityもインストールされていない場合は、catols.sqlスクリプトを実行してOracle Label Securityをインストールします。
    @$ORACLE_HOME/rdbms/admin/catols.sql

    Oracle Database Vaultをインストールする前に、Oracle Label Securityをインストールする必要があります。

  4. catmac.sqlスクリプトを実行することで、Oracle Database Vaultをインストールします。
    @$ORACLE_HOME/rdbms/admin/catmac.sql
  5. 「1に値を入力してください」プロンプトで、DVSYSをインストールするための表領域としてSYSTEMを入力します。
  6. 「2に値を入力してください」プロンプトで、PDBの一時表領域を入力します。
  7. 3つのスキーマが存在することを確認します。
    SELECT USERNAME FROM DBA_USERS WHERE USERNAME IN ('DVSYS', 'DVF', 'LBACSYS');
  8. ビューが存在し、現在設定されていることを確認します。
    SELECT * FROM DBA_DV_STATUS;

    次のような出力が表示されます。

    NAME                 STATUS
    -------------------  --------------
    DV_CONFIGURE_STATUS  FALSE
    DV_ENABLE_STATUS     FALSE
    DV_APP_PROTECTION    NOT CONFIGURED
CDBルートでDatabase Vaultを構成および有効化し、データベースを再起動した後、PDBでDatabase Vaultを構成および有効化できます。

3.3 Database Vaultが構成および有効化されていることの確認

DBA_DV_STATUSCDB_DV_STATUSおよびDBA_OLS_STATUSデータ・ディクショナリ・ビューでは、Oracle Databaseが構成され有効になっているかどうか確認されます。

Oracle Database Vault管理者の他に、Oracle Database SYSユーザー、およびDBAロールを付与されているユーザーが、これらのビューを問合せできます。
  • Database Vaultの場合:

    • ルートのみ、または個々のPDBのDatabase Vaultステータスを確認する場合は、DBA_DV_STATUSを問い合せます。たとえば:

      SELECT * FROM DBA_DV_STATUS;

      次のような出力が表示されます。

      NAME                 STATUS
      -------------------- -----------
      DV_APP_PROTECTION    NOT CONFIGURED
      DV_CONFIGURE_STATUS  TRUE
      DV_ENABLE_STATUS     TRUE

      DV_APP_PROTECTIONは、Oracle Databaseマルチテナント環境のPDBローカル・データに共通ユーザーを自動的にアクセスすることを制限する操作制御を参照します。

    • マルチテナント環境のすべてのPDBのDatabase Vaultステータスを確認する場合は、管理権限を持つ共通ユーザーとして、コンテナID (CON_ID)フィールドの追加を提供するCDB_DV_STATUSを問い合せます。

  • Oracle Label Securityの場合は、DBA_OLS_STATUSデータ・ディクショナリ・ビューを問い合せます。

3.4 Oracle Enterprise Cloud ControlからのOracle Database Vaultへのログイン

Oracle Enterprise Manager Cloud Control (Cloud Control)には、Oracle Database Vaultの管理用のページが用意されています。

Oracle EM Expressではなく、Oracle Enterprise Manager Cloud Controlのみがサポートされています。Oracle Database Vaultページを使用して、Database Vaultで保護されたデータベースを一元的なコンソールから管理および監視できます。このコンソールでは、アラートの自動化、Database Vaultレポートの表示、およびDatabase Vaultで保護されたその他のデータベースへのDatabase Vaultポリシーの伝播が可能です。
ログインする前に、Oracle Enterprise Managerのオンライン・ヘルプに従って、Database Vaultとともに使用するCloud Controlターゲット・データベースを構成していることを確認してください。また、OracleデータベースでOracle Database Vaultを構成して有効化することも必要です。
  1. Cloud Control管理者から提供された資格証明を使用してOracle Enterprise Manager Cloud Controlにログインします。
  2. Cloud Controlのホーム・ページで、「ターゲット」メニューから「データベース」を選択します。
  3. 「データベース」ページで、接続先のOracle Database Vaultで保護されているデータベースのリンクを選択します。

    データベースのホームページが表示されます。

  4. 「セキュリティ」メニューから、「Database Vault」を選択します。

    「データベース・ログイン」ページが表示されます。

  5. 次の情報を入力します。
    • ユーザー名: 適切なOracle Database Vaultロールを付与されているユーザーの名前を入力します。

      • Database Vaultポリシーの作成および伝播: DV_OWNERまたはDV_ADMINロール、SELECT ANY DICTIONARY権限

      • Database Vaultアラートおよびレポートの表示: DV_OWNERDV_ADMINまたはDV_SECANALYSTロール、SELECT ANY DICTIONARY権限

    • パスワード: パスワードを入力します。

    • ロール: リストから「通常」を選択します。

    • 別名保存: 次回このページが表示されるときに、これらの資格証明が自動入力されているようにするには、このチェック・ボックスを選択します。資格証明は、Enterprise Managerに安全な方法で格納されます。これらの資格証明へのアクセスは、現在ログインしているユーザーによって異なります。

    Database Vaultホームページが表示されます。


    em_dv_home_page.pngの説明が続きます
    図em_dv_home_page.pngの説明

3.5 クイック・スタート・チュートリアル: DBAアクセスからのスキーマの保護

このチュートリアルでは、HRスキーマの周辺でレルムを作成する方法を示します。

3.5.1 このチュートリアルについて

このチュートリアルでは、Oracle Database VaultのPL/SQLパッケージを使用して、HRサンプル・データベース・スキーマのEMPLOYEES表の周辺でレルムを作成します。

レルム違反を記録して確認するための統合監査ポリシーを作成する方法についても学習します。

HRスキーマのEMPLOYEES表には、管理権限を使用したアクセスも含め、企業内のほとんどの社員に公開しない給与などの情報が含まれています。これを実現するには、HRスキーマをデータベース内の保護ゾーン(Oracle Database Vaultではレルムと呼ぶ)のセキュア・オブジェクトに追加します。そして、このレルムに制限付きの認可を付与します。その後、レルムをテストして適切に保護されていることを確認します。

3.5.2 ステップ1: SYSTEMとしてログインしHRスキーマにアクセスする

このチュートリアル用にHRスキーマを有効にする必要があります。

このチュートリアルを開始する前に、HRサンプル・スキーマがインストールされていることを確認してください。
  1. DBAロールを付与されたユーザーとしてPDBにログインしてから、HRスキーマにアクセスします。
  2. HR.EMPLOYEES表に次のように問い合せます。
    SELECT FIRST_NAME, LAST_NAME, SALARY FROM HR.EMPLOYEES WHERE ROWNUM < 10;
    

    次のような出力が表示されます。

    FIRST_NAME           LAST_NAME                     SALARY
    -------------------- ------------------------- ----------
    Steven               King                           24000
    Neena                Kochhar                        17000
    Lex                  De Haan                        17000
    Alexander            Hunold                          9000
    Bruce                Ernst                           6000
    David                Austin                          4800
    Valli                Pataballa                       4800
    Diana                Lorentz                         4200
    Nancy                Greenberg                      12008
    
    9 rows selected.
    
  3. HRスキーマがロックされて無効になっている場合は、DV_ACCTMGRユーザーとしてデータベース・インスタンスにログインし、アカウントをロック解除して有効にします。たとえば:
    ALTER USER HR ACCOUNT UNLOCK IDENTIFIED BY password

    passwordを、ユーザーのプロファイルのパスワードの複雑度要件を満たすパスワードに置き換えます。

    DBAロールを持つユーザーは、HRスキーマのEMPLOYEES表の給与情報にアクセスできます。SYSTEMには、SELECT ANY TABLEシステム権限を持つDBAロールがあるため、SYSTEMとしてログインすればうまくいきます。

  4. SQL*Plusを終了しないでください。

3.5.3 ステップ2: レルムの作成

レルムでは、1つ以上のスキーマ、個々のスキーマ・オブジェクトおよびデータベース・ロールを保護できます。

レルムを作成したら、レルム内のスキーマやスキーマ・オブジェクトに適用するセキュリティ制限を作成します。HRスキーマのEMPLOYEES表にレルムを作成する必要があります。
  1. DV_OWNERロールを付与されているユーザーとしてPDBに接続します。
  2. HR.EMPLOYEES表の周囲でHR Appsレルムを作成します。
    1. HR Appsレルム自体を作成します。
      BEGIN
       DBMS_MACADM.CREATE_REALM(
        realm_name    => 'HR Apps', 
        description   => 'Realm to protect the HR schema', 
        enabled       => DBMS_MACUTL.G_YES, 
        audit_options => DBMS_MACUTL.G_REALM_AUDIT_OFF,
        realm_type    => DBMS_MACADM.REGULAR_REALM);
      END; 
      /
    2. このレルムにHR.EMPLOYEES表を追加します。
      BEGIN
       DBMS_MACADM.ADD_OBJECT_TO_REALM(
        realm_name   => 'HR Apps', 
        object_owner => 'HR', 
        object_name  => 'EMPLOYEES', 
        object_type  => 'TABLE'); 
      END;
      /

この段階で、レルムが作成されていますが、それに対する認可は割り当てられていません。これは従来のレルム(realm_type => DBMS_MACADM.REGULAR_REALM)であるため、直接付与されたユーザーはHR.EMPLOYEESからREADまたはSELECTしてこの表を引き続き表示できますが、READ ANY TABLESELECT ANY TABLEなどのシステム権限に依存するユーザーは表示できません。このチュートリアルで後ほど対応します。

3.5.4 ステップ3: レルム違反に対する統合監査ポリシーの作成

Oracle Database Vaultのレルム、ルール・セットおよびファクタの統合監査ポリシーを作成できます。

統合監査ポリシーは、レルム、ルール・セットまたはファクタへのアクセスが成功しないとき、アクセスが成功したとき、またはアクセスが成功しても成功しなくても監査レコードを作成するように設計できます。Oracle Database Vaultの統合監査ポリシーの作成については、Oracle Databaseセキュリティ・ガイドを参照してください。

レルムを作成した後、統合監査ポリシーを作成して、レルムの違反を取得できます。

  1. DBAロール、AUDIT SYSTEMシステム権限またはAUDIT_ADMINロールを付与されたユーザーとしてPDBに接続します。
    チュートリアル用に、この権限を持つユーザーを作成するほうが簡単な場合があります。
    1. DV_ACCTMGRロールを持つユーザーで、監査管理者としての役割を果たす一時ユーザーを作成します。
      GRANT CREATE SESSION TO cmack IDENTIFIED BY password;
    2. SYSDBA管理権限を持つユーザーで、この新しいユーザーにAUDIT_ADMINロールを付与します。
      GRANT AUDIT_ADMIN TO cmack;
    3. DV_OWNERロールを持つユーザーで、AUDIT_ADMINロールを使用する認可を、この新規ユーザーに付与します。
      EXEC DBMS_MACADM.AUTHORIZE_AUDIT_ADMIN('CMACK');
  2. AUDIT_ADMINユーザーcmackで、HR Appsレルムに違反するすべてのアクションを監査する統合監査ポリシーを作成します。
    1. 統合監査ポリシーを作成します。
      CREATE AUDIT POLICY aud_hrapps_dv
      ACTIONS COMPONENT=DV REALM VIOLATION ON "HR Apps";
    2. 統合監査ポリシーを有効にします。
      AUDIT POLICY aud_hrapps_dv;
この段階で、統合監査ポリシーは作成しましたが、レルム違反はまだ犯していません。これについては、このチュートリアルで後ほど対応します。

3.5.5 ステップ4: SEBASTIANユーザー・アカウントの作成

この段階では、オブジェクト権限が直接付与されたHRスキーマおよびデータベースのユーザーまたはロールのみが、レルムで保護されるデータベース・オブジェクトを操作できます。システム権限に依存しているユーザーはできません。

それで、次のステップでは、レルムで保護されているスキーマまたはオブジェクトにアクセスできるように、データベース・アカウントまたはデータベース・ロールを認可します。このチュートリアルで保護したオブジェクトはHR.EMPLOYEES表のみです。ユーザーcmackにはAUDIT_ADMINロールが付与されており、以前に実行したDBMS_MACADM.AUTHORIZE_AUDIT_ADMINの認可により、AUDIT_ADMINロールを使用して、統合監査ポリシーを管理して、統合監査レコードを表示すること認可されています。sebastianユーザー・アカウントを作成します。
  1. SQL*Plusで、DV_ACCTMGRロールを持つDatabase Vaultアカウント・マネージャとしてPDBに接続し、ローカル・ユーザーsebastianを作成します。

    たとえば:

    GRANT CREATE SESSION TO sebastian IDENTIFIED BY password;

    passwordを、ユーザーのプロファイルのパスワードの複雑度要件を満たすパスワードに置き換えます。

  2. SYSDBA権限を持つSYSとして接続し、SEBASTIANに次の追加権限を付与します。
    GRANT READ ANY TABLE TO sebastian;
  3. SQL*Plusを終了しないでください。

3.5.6 ステップ5: ユーザーSEBASTIANによるレルムのテスト

この段階で、ユーザーsebastianは、HR.EMPLOYEES表を問い合せてレルムをテストできます。

  1. ユーザーsebastianとして接続します。
  2. HR.EMPLOYEES表を問い合せます。
    SELECT COUNT(*) FROM HR.EMPLOYEES;

    次の出力が表示されます。

    ERROR at line 1:
    ORA-01031: insufficient privileges
ユーザーsebastianにはREAD ANY TABLEシステム権限がありますが、HR.EMPLOYEES表は問合せできません。これは、HR AppsレルムがREAD ANY TABLEシステム権限よりも優先されるためです。

3.5.7 ステップ6: レルムの認可の作成

次に、HR.EMPLOYEES表にアクセスできるように、ユーザーSEBASTIANHR Appsレルムへの認可を与える必要があります。

  1. DV_OWNERロールを付与されているユーザーとしてPDBに接続します。
  2. HR Appsレルムの認可を作成します。

    この認可により、SEBASTIANは、このレルムによって保護されているHR.EMPLOYEES表に対するREAD ANY TABLEシステム権限を使用できます。

    BEGIN
     DBMS_MACADM.ADD_AUTH_TO_REALM(
      realm_name  => 'HR Apps', 
      grantee     => 'SEBASTIAN'); 
    END;
    /

3.5.8 ステップ7: レルムのテスト

レルムをテストするには、HR以外のユーザーとしてEMPLOYEES表にアクセスを試みる必要があります。

(このチュートリアルでは、HRが独自のオブジェクトにアクセスできないようにする機能は説明しません。)

SYSTEMアカウントには通常、SELECT ANY TABLE権限があるため、HRスキーマのすべてのオブジェクトに対するアクセス権がありますが、この場合はOracle Database Vaultを使用してEMPLOYEES表を保護しているため、アクセス権はありません。

  1. SQL*Plusで、SYSTEMとしてPDBに接続します。
  2. EMPLOYEES表の任意の行を再度問い合せてみます。
    たとえば:
    SELECT FIRST_NAME, LAST_NAME, SALARY FROM HR.EMPLOYEES WHERE ROWNUM <10;
    

    次の出力が表示されます。

    Error at line 1:
    ORA-01031: insufficient privileges
    

    SYSTEMにはEMPLOYEES表へのアクセス権はなくなります。(実際に、ユーザーSYSでもこの表にはアクセスできません。)ただし、sebastianHR Appsレルム内で認可された参加者であるため、ユーザーSEBASTIANはこの情報にアクセスできます。

  3. ユーザーsebastianとして接続します。
    次の問合せを実行します。
    SELECT FIRST_NAME, LAST_NAME, SALARY FROM HR.EMPLOYEES WHERE ROWNUM <10;

    次のような出力が表示されます。

    FIRST_NAME           LAST_NAME                     SALARY
    -------------------- ------------------------- ----------
    Steven               King                           24000
    Neena                Kochhar                        17000
    Lex                  De Haan                        17000
    Alexander            Hunold                          9000
    Bruce                Ernst                           6000
    David                Austin                          4800
    Valli                Pataballa                       4800
    Diana                Lorentz                         4200
    Nancy                Greenberg                      12008
    
    9 rows selected.

3.5.9 ステップ8: レルム違反からの監査レコードの表示

作成した統合監査ポリシーに対する違反は定期的にレビューしてください。

これらの統合監査ポリシーを作成して、レルム、ルール・セットおよびファクタに対する違反を追跡してください。理想的には、この情報をOracle Data Safeなどのセキュリティ・ソリューションに組み込めば、すべての違反についてすぐに通知を送信できます。
  1. ユーザーcmackとしてPDBに接続します。
    統合監査ポリシー・レコードを表示するには、少なくともユーザーにAUDIT_VIEWERロールが必要です。ユーザーcmackにはAUDIT_ADMINロールが付与されており、以前に実行したDBMS_MACADM.AUTHORIZE_AUDIT_ADMINの認可により、AUDIT_ADMINロールを使用して、統合監査ポリシーを管理して、統合監査レコードを表示すること認可されています。
  2. ユーザーcmackで、統合監査レコードが格納されるUNIFIED_AUDIT_TRAILビューを問い合せます。
    column dbusername format a20
    column action_name format a20
    column object_name format a20
    column object_schema format a20
    column dv_action_object_name format a25
    
    SELECT DBUSERNAME, ACTION_NAME, OBJECT_SCHEMA, OBJECT_NAME, DV_ACTION_OBJECT_NAME, DV_RETURN_CODE 
    FROM UNIFIED_AUDIT_TRAIL
    WHERE AUDIT_TYPE = 'Database Vault'
    AND DV_ACTION_NAME = 'Realm Violation Audit'
    ORDER BY EVENT_TIMESTAMP;

    次のような出力が表示されます。

    DBUSERNAME           ACTION_NAME          OBJECT_SCHEMA        OBJECT_NAME          DV_ACTION_OBJECT_NAME     DV_RETURN_CODE
    -------------------- -------------------- -------------------- -------------------- ------------------------- --------------
    SEBASTIAN            SELECT               HR                   EMPLOYEES            HR Apps                             1031
    SYSTEM               SELECT               HR                   EMPLOYEES            HR Apps                             1031

3.5.10 ステップ9: このチュートリアルのコンポーネントの削除

コンポーネントが不要になった場合、このチュートリアルで作成したコンポーネントを削除できます。

  1. ユーザーcmackとして、aud_hrapps_dv統合監査ポリシーを無効化および削除します。
    NOAUDIT POLICY aud_hrapps_dv;
    DROP AUDIT POLICY aud_hrapps_dv;
  2. DV_ACCTMGRロールを持つユーザーとして、ユーザーcmackおよびsebastianを削除します。
    DROP USER cmack;
    DROP USER sebastian;
  3. HR Appsレルムを削除します。
    1. DV_OWNERロールを付与されているユーザーとしてPDBに接続します。
    2. 次の文を実行して、HR Appsレルムとその認可を削除します。
      EXEC DBMS_MACADM.DELETE_REALM_CASCADE('HR Apps');
  4. 必要な場合、HRアカウントをロックし、無効にします。
    1. DV_ACCTMGRロールを持つユーザーとして接続します(ユーザーdvacctmgrなど)。
    2. 次のALTER USER文を実行します。
      ALTER USER HR ACCOUNT LOCK PASSWORD EXPIRE;