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

Oracle Database Vaultを開始するには、これを構成して有効にしてから、Oracle Databaseを再起動する必要があります。Oracleマルチテナント環境では、これをコンテナ・データベース(CDB)で完了してから、各プラガブル・データベース(PDB)で完了します。

Oracleでは、Oracle Database Vault内でキー・ロールを管理するために4つのアカウントを作成することをお薦めします。2つはプライマリ・アカウントで、2つはバックアップ・アカウントです。これらのアカウントのパスワードを安全な場所に保管して、紛失したり忘れたりしないようにします。特に、DV_OWNERロールを持つアカウントは最も重要なアカウントになるので、ロックしたり、そのパスワードを紛失したりしないようにします。アカウントをロックするリスクを最小限に抑えるために、Oracleでは、これらの4つのアカウントに割り当てる特定のデータベース・プロファイルを作成することをお薦めします。

2.1 コンテナ・データベースでのDatabase Vaultの構成

次のステップを実行して、コンテナ・データベースでDatabase Vaultを構成します。

  1. アカウントを作成し、コンテナ・ルートとプラガブル・データベースの両方で権限を付与できるデータベース・ユーザーとして接続します:
    connect / as sysdba
  2. 次の権限を付与します:
    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;
  3. Oracleでは、Oracle Database Vault用に作成したアカウントを永続的にロックしないプロファイルを作成することをお薦めします。これらは要件にあわせて調整できますが、Oracleでは、適切な時間の経過後にアカウントのロックを解除できるように、許容可能な長さにPASSWORD_LOCK_TIMEプロファイル・パラメータを使用することをお薦めします。この例では、次のパラメータが1分に設定されています:
    CREATE PROFILE C##DV_PROFILE LIMIT
        FAILED_LOGIN_ATTEMPTS 5
        PASSWORD_VERIFY_FUNCTION ora12c_verify_function
        PASSWORD_LOCK_TIME 1/1440
        CONTAINER=ALL;
  4. 作成したOracle Database Vaultアカウントにプロファイルを割り当てます:
    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;
  5. コンテナ・データベースで構成を実行します:
    connect / as sysdba
    
    BEGIN
        CONFIGURE_DV (
            dvowner_uname         => 'c##dvowner',
            dvacctmgr_uname       => 'c##dvacctmgr',
            force_local_dvowner   => FALSE);
    END;
    /
  6. 無効なオブジェクトを再コンパイルします。このステップは必須ではありませんが、無効なオブジェクトは最小限に抑えることをお薦めします。
    @$ORACLE_HOME/rdbms/admin/utlrp.sql
  7. C##DVOWNERとして、Oracle Database Vaultを有効にします:
    CONNECT c##dvowner
    EXEC DBMS_MACADM.ENABLE_DV;
  8. Oracleデータベースを再起動します。Oracle Real Application Clusterの環境にいる場合は、Oracle Real Application Clusterを使用してローリング有効化を実行することで停止時間を最小限に抑えることができますが、単一インスタンス環境では停止時間を取る必要があります。
    CONNECT / as sysoper
    shutdown immediate;
    startup;
  9. コンテナ・データベースから、Oracle Database VaultがCDBルートで構成および有効化されていることを確認します:
    connect / as sysdba
    
    SELECT * FROM DBA_DV_STATUS;

    Oracle Database Vault Operations Controlを有効にしていないため、DV_CONFIGURE_STATUSDV_ENABLE_STATUSの両方にTRUEが表示され、APP_PROTECTIONNOT CONFIGUREDが表示されます。

    例:
    NAME               STATUS
    ------------------- --------------
    DV_CONFIGURE_STATUS           TRUE
    DV_ENABLE_STATUS              TRUE
    DV_APP_PROTECTION   NOT CONFIGURED
  10. バックアップ・アカウントに適切なDatabase Vaultロールを付与します。

    たとえば、Oracle Database Vault所有者のバックアップであるユーザーには、DV_OWNERロールがあります:

    CONNECT c##dvowner
    GRANT DV_OWNER TO c##dvowner_backup WITH ADMIN OPTION CONTAINER=ALL;
  11. バックアップ・アカウントに適切なDatabase Vaultロールを付与します。

    たとえば、Oracle Database Vaultアカウント・マネージャのバックアップであるユーザーには、DV_ACCTMGRロールがあります:

    CONNECT c##dvacctmgr
    GRANT DV_ACCTMGR TO c##dvacctmgr_backup WITH ADMIN OPTION CONTAINER=ALL;
  12. Database Vault関連のユーザーに適切なロールがあることを確認するには、DBAロールを持つユーザーとしてロール権限ビューを問い合せます:
    connect / as sysdba
    
    column grantee format a25
    column granted_role format a25
    select grantee, granted_role, admin_option, common 
        from dba_role_privs
    where granted_role in ('DV_ACCTMGR','DV_OWNER')
    order by 1,2,3;
    次のような出力が表示されます:
    GRANTEE                GRANTED_ROLE    ADMIN_OPTION    COMMON
    ______________________ _______________ _______________ _________
    C##DVACCTMGR           DV_ACCTMGR      YES             YES
    C##DVACCTMGR_BACKUP    DV_ACCTMGR      YES             YES
    C##DVOWNER             DV_OWNER        YES             YES
    C##DVOWNER_BACKUP      DV_OWNER        YES             YES

2.2 プラガブル・データベースでのDatabase Vaultの構成

プラガブル・データベースでDatabase Vaultを構成するには、次のステップを実行します。0個以上のプラガブル・データベースでDatabase Vaultを有効にできます。

次の構成では、共通データベース・ユーザーを使用し、それぞれDV_OWNERロールとDV_ACCTMGRロールを付与します。ただし、これは一般的な構成であり、他の構成もあります。共通ユーザーではなく、プラガブル・データベースにローカルなデータベース・ユーザーを作成および使用できます。様々な構成オプションの詳細は、『Oracle Database Vault管理者ガイド』を参照してください。

  1. プラガブル・データベースで、SYSDBA管理権限を持つユーザーとして構成を実行します:
    alter session set container=pdb_name;
    
    BEGIN
        CONFIGURE_DV (
            dvowner_uname         => 'c##dvowner',
            dvacctmgr_uname       => 'c##dvacctmgr');
    END;
    /
  2. 無効なオブジェクトを再コンパイルします。このステップは必須ではありませんが、無効なオブジェクトは最小限に抑えることをお薦めします。
    $ORACLE_HOME/rdbms/admin/utlrp.sql
  3. 次に、C##DVOWNERとして、プラガブル・データベースでOracle Database Vaultを有効にします:
    CONNECT c##dvowner@pdb_name
    
    EXEC DBMS_MACADM.ENABLE_DV;
  4. SYSOPERロールを持つユーザーとして、Oracleプラガブル・データベースを再起動します。Oracle Real Application Clusterの環境にいる場合は、ローリング有効化を実行して停止時間を最小限に抑えることができますが、単一インスタンス環境では停止時間を取る必要があります。
    connect / as sysoper
    
    ALTER PLUGGABLE DATABASE pdb_name CLOSE IMMEDIATE;
    ALTER PLUGGABLE DATABASE pdb_name OPEN;
  5. すべてのコンテナおよびプラガブル・データベースでOracle Database Vaultのステータスを確認する場合は、コンテナ・データベースから次のコマンドを実行できます。これで、Database Vaultがコンテナ・データベースおよびプラガブル・データベースで有効になりました。
    connect / as sysdba
    
    SELECT * FROM CDB_DV_STATUS;
    次のような出力が表示されます。赤い強調表示された行に注目します。これは、コンテナ・データベースとプラガブル・データベースの両方でOracle Database Vaultが有効になっていることを示しています:
    NAME                            STATUS               CON_ID
    ______________________          _________________    _________
    DV_CONFIGURE_STATUS             TRUE                 1
    DV_ENABLE_STATUS                TRUE                 1
    DV_APP_PROTECTION               NOT CONFIGURED       1
    DV_CONFIGURE_STATUS             TRUE                 3
    DV_ENABLE_STATUS                TRUE                 3
    DV_APP_PROTECTION               NOT CONFIGURED       3
    または、コンテナIDのかわりにコンテナ名を表示する場合は、次の問合せを実行します:
    SELECT CON_ID_TO_CON_NAME(CON_ID) CON_NAME, NAME, STATUS FROM CDB_DV_STATUS;
    次のような出力が表示されます:
    NAME                            STATUS                 CON_ID
    ______________________          _________________      _________
    CDB$ROOT                        DV_CONFIGURE_STATUS    TRUE
    CDB$ROOT                        DV_ENABLE_STATUS       TRUE
    CDB$ROOT                        DV_APP_PROTECTION      NOT CONFIGURED
    pdb_name                        DV_CONFIGURE_STATUS    TRUE
    pdb_name                        DV_ENABLE_STATUS       TRUE
    pdb_name                        DV_APP_PROTECTION      NOT CONFIGURED

    CON_ID_TO_CON_NAMEファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください