23 CDBでのOracle Database Vaultの使用

Oracle Database Vaultは、マルチテナント・コンテナ・データベース(CDB)で使用できます。

この項では、次の項目について説明します。

Oracle Database Vaultについて

Oracle Database Vaultのセキュリティ統制により、アプリケーション・データを不正アクセスから守るとともに、プライバシおよび規制の要件に順守できます。

統制によって特権アカウントによるアプリケーション・データへのアクセスをブロックすることや、信頼できるパスの認可を使用してデータベース内での要注意操作を統制することができます。権限およびロールの分析により、最小権限のベスト・プラクティスを使用することで、既存のアプリケーションのセキュリティを強化できます。Oracle Database Vaultは、既存のデータベース環境のセキュリティを透過的に強化するので、コストと時間をかけてアプリケーションを変更する必要はありません。

マルチテナント環境におけるOracle Database Vaultの動作について

統合のセキュリティをさらに強化するために、Oracle Database VaultをOracle Multitenantとともに使用できます。

Oracle Database Vaultでは、プラガブル・データベース(PDB)内や、PDBとコンテナ・データベースでの共通特権ユーザーとの間での、特権ユーザー・アクセスを禁止できます。各PDBには、レルム、ルール・セット、コマンド・ルール、デフォルト・ポリシー(デフォルト・レルムなど)など独自のDatabase Vaultメタデータがあります。また、任意の子のPDBでDVSYSスキーマやDVFスキーマ内のオブジェクトを自動的に利用できます。どちらのスキーマも共通のユーザー・スキーマです。

共通レルムはアプリケーション・ルートのみで構成できますが、共通ルール・セットおよびコマンド・ルールは、アプリケーション・ルートまたはCDBルートのどちらでも作成できます。アプリケーション・ルート内の共通コマンド・ルールは、その関連付けられたPDBに適用され、CDBルート内の共通コマンド・ルールは、CDB環境内のすべてのPDBに適用されます。共通レルムおよびコマンド・ルールを作成できることにより、CDB環境全体で共有の一連のレルム、ルール・セットまたはコマンド・ルールを使用するポリシーを作成できます。マルチテナント環境ですべてのPDBに対してこれらの同じコンポーネントを作成する必要はありません。共通保護は、Oracle Database Vaultが有効になっているアプリケーション・ルートに関連付けられたすべてのPDBに適用されます。

PDBごとに個別のローカル・ポリシーを作成できます。Database Vaultを使用してオブジェクトを保護する場合、Database Vaultは、共通のオブジェクトの共通の権限を、ローカル・システム権限と同じ強制ルール下に置きます。

Database Vaultを有効にしたPDBを構成すると、DVSYSスキーマが共通ユーザー・スキーマとなり、ルートに格納されます。つまり、DVSYSスキーマ内のすべてのオブジェクト(表、データ・ディクショナリ・ビュー、ユーザー・アカウント、PL/SQLパッケージ、デフォルト・ポリシーなど)が、このスキーマに利用可能な共通の権限の影響下にあるということになります。すなわち、レルム、ファクタなどをルートに作成してルートのスキーマを保護できます。Database Vaultは、関連付けられたPDBで構成する前に、まずルートで構成するようにしてください。

CDBルートでOracle Database Vaultを有効にするときは、通常モードまたは厳密モードのどちらかを選択できます。設定は、選択した設定に基づいてCDB全体に伝播されます。たとえば、CDBに、Database Vaultが有効になっているPDBとDatabase Vaultが有効になっていないPDBが含まれているとします。通常モードを使用してDatabase Vaultを有効にした場合は、両方のタイプのPDBが通常どおり機能し続けます。厳密モードを使用してDatabase Vaultを有効にした場合、Database Vaultが無効になっているPDBは、制限されたモードで動作します。

図23-1では、Database Vaultが有効になっているかどうかによって、標準モードのデータベースで共通およびローカル・データベース管理者に可能になるアクセスがどのように異なるかを示します。このシナリオでは、共通ユーザーおよびローカル・ユーザーのいずれも、PDB1とPDB2のレルムにアクセスできません。共通ユーザーとPDB3のローカル・ユーザーはどちらも、Database Vaultが有効化されていないPDB3内のCustom Appアプリケーションにアクセスできます。

図23-1 標準モードでのマルチテナント環境におけるOracle Database Vault

図23-1の説明が続きます
「図23-1 標準モードでのマルチテナント環境におけるOracle Database Vault」の説明

マルチテナント環境でのOracle Database Vaultの手動インストール

特定の条件のマルチテナント環境に対しては、Oracle Database Vaultを手動でインストールする必要があります。

たとえば、Database Vaultのないリリース11g Oracle Databaseをリリース12cにアップグレードしてから、12c 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にログインします。

    たとえば、hr_pdbというPDBにログインするには、次のようにします。

    sqlplus sec_admin@hr_pdb as sysdba
    Enter password: password

    使用可能なPDBを検索するには、show pdbsコマンドを実行します。現在のPDBを確認するには、show con_nameコマンドを実行します。

  2. 必要な場合は、Oracle Database VaultおよびOracle Label SecurityがこのPDBにすでにインストールされているかどうかを確認します。
    DVSYSアカウント(Database Vault用)とLBACSYSアカウント(Label Security用)が存在している場合は、PDBにDatabase VaultとLabel Securityが存在しています。
    SELECT USERNAME FROM DBA_USERS WHERE USERNAME IN ('DVSYS', 'LBACSYS');
  3. Database VaultとLabel Securityのどちらもインストールされていない場合は、catols.sqlスクリプトを実行してOracle Label Securityをインストールします。
    @$ORACLE_HOME/rdbms/admin/catols.sql

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

  4. catmac.sqlスクリプトを実行することで、Oracle Database Vaultをインストールします。
    @$ORACLE_HOME/rdbms/admin/catmac.sql
  5. 「1に値を入力してください」プロンプトで、DVSYSをインストールする表領域としてSYSTEMを入力します。
  6. 「2に値を入力してください」プロンプトで、PDBの一時表領域を入力します。
インストールの完了後、PDBにOracle Database Vaultを登録できます。Database VaultがまだCDBに登録されていない場合は、PDBをクローズしてからCDBルートでDatabase Vaultを登録する必要があります。Database VaultはPDBで登録する前に、CDBルートで登録しておく必要があります。CDBルートでDatabase Vaultを登録してからデータベースを再起動すると、PDBをオープンしてDatabase Vaultを登録できます。

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

DBA_DV_STATUSCDB_DV_STATUSDBA_OLS_STATUSおよびCDB_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_CONFIGURE_STATUS  TRUE
      DV_ENABLE_STATUS     TRUE
    • 管理権限がある共通ユーザーとして、マルチテナント環境ですべてのPDBのDatabase Vaultステータスを確認する場合は、コンテナID (CON_ID)フィールドの追加を提供する、CDB_DV_STATUSを問い合せます。

  • Oracle Label Securityの場合は、次のデータ・ディクショナリ・ビューを問い合せます。これらは、Database Vaultのそれらに相当するビューに似ています。

    • DBA_OLS_STATUS

    • CDB_OLS_STATUS

CDBルートでのDatabase Vaultの登録

マルチテナント環境では、CDBルートでDatabase Vault適用対象のロールを使用する共通ユーザーにOracle Database Vaultを登録します。

  1. マルチテナント環境において、ユーザー作成権限を持ち、CREATE SESSIONおよびSET CONTAINER権限を付与する権限を持つユーザーとして、データベース・インスタンスのルートにログインします。

    次に例を示します。

    sqlplus c##dba_debra
    Enter password: password
    
  2. Database Vault所有者(DV_OWNERロール)およびDatabase Vaultアカウント・マネージャ(DV_ACCTMGRロール)のアカウント用に使用するユーザー・アカウントを選択します(または新しいユーザーを作成します)。

    ロールごとに2つのアカウントを維持することをお薦めします。一方のアカウントはその名前付きユーザーのプライマリ・アカウントであり、日常的に使用されます。他方のアカウントは、プライマリ・アカウントのパスワードを忘れてしまいリセットする必要がある場合に備えたバックアップ・アカウントとして使用されます。

    これらのアカウント名の先頭にc##またはC##を付加します。次に例を示します。

    GRANT CREATE SESSION, SET CONTAINER TO c##sec_admin_owen IDENTIFIED BY password CONTAINER = ALL;
    GRANT CREATE SESSION, SET CONTAINER TO c##dbv_owner_root_backup IDENTIFIED BY password CONTAINER = ALL;
    GRANT CREATE SESSION, SET CONTAINER TO c##accts_admin_ace IDENTIFIED BY password CONTAINER = ALL;
    GRANT CREATE SESSION, SET CONTAINER TO c##dbv_acctmgr_root_backup IDENTIFIED BY password CONTAINER = ALL;
    

    詳細は、次のとおりです。

    • プライマリ・アカウント(c##sec_admin_owenおよび c##accts_admin_ace)は、新しいロールのDV_ADMINおよびDV_ACCTMGRに対してまだ存在していない場合に作成します。
    • passwordを安全なパスワードに置き換えます。
  3. SYSDBA管理権限を持つユーザーSYSとしてルートに接続します。
    CONNECT SYS AS SYSDBA
    Enter password: password
    
  4. 2つのバックアップDatabase Vaultユーザー・アカウントを構成します。
    次に例を示します。
    BEGIN
     CONFIGURE_DV (
       dvowner_uname         => 'c##dbv_owner_root_backup',
       dvacctmgr_uname       => 'c##dbv_acctmgr_root_backup',
       force_local_dvowner   => FALSE);
     END;
    /
    
    この例では、force_local_dvownerFALSEに設定しているため、共通ユーザーは、このCDBルートに関連付けられているPDBのDV_OWNER権限を持つことができます。TRUEに設定すると、共通のDV_OWNERユーザーはCDBルートに対してのみDV_OWNERロール権限を持つように制限されます。CDBルート共通ユーザーにローカルにDV_OWNERを付与すると、そのユーザーはDV_OWNERロールを別のユーザーに共通に付与できなくなります。
  5. utlrp.sqlスクリプトを実行して、ルートで無効化されたオブジェクトを再コンパイルします。
    @?/rdbms/admin/utlrp.sql
    

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

  6. 先ほど構成したプライマリDatabase Vault所有者ユーザーとして、ルートに接続します。

    次に例を示します。

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

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

      EXEC DBMS_MACADM.ENABLE_DV (strict_mode => 'y');
  8. SYSDBA管理権限を使用して接続します。
    CONNECT / AS SYSDBA
    
  9. データベースを再起動します。
    SHUTDOWN IMMEDIATE
    STARTUP
    
  10. Oracle Database VaultとOracle Label Securityがインストールされていて、有効になっていることを確認します。
    SELECT * FROM DBA_DV_STATUS;
    SELECT * FROM DBA_OLS_STATUS;
    SELECT * FROM CDB_DV_STATUS;
    SELECT * FROM CDB_OLS_STATUS;
  11. バックアップDV_OWNERユーザーとして接続し、前に作成したプライマリDV_OWNERユーザーにDV_OWNERロールを付与します。

    次に例を示します。

    CONNECT c##dbv_owner_root_backup
    Enter password: password
    
    GRANT DV_OWNER TO c##sec_admin_owen WITH ADMIN OPTION;
    
  12. バックアップDV_ACCTMGRユーザーとして接続してから、DV_ACCTMGRロールをバックアップDV_ACCTMGRユーザーに付与します。

    次に例を示します。

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

個別PDBを管理するためのDatabase Vault共通ユーザーの登録

マルチテナント環境では、Oracle Database Vaultをまずルートに登録して、後からPDBに登録する必要があります。

先にPDBに登録しようとすると、ORA-47503「Database VaultはCDB$ROOTで有効化されていません。」エラーが表示されます。
  1. まだ実行していない場合は、関連するバックアップ・アカウントとともにDatabase Vaultアカウントとして使用する名前付きの共通ユーザー・アカウントを特定するか作成します。
  2. CDBルートにOracle Database Vaultを登録していることと、DV_OWNERロールが共通ユーザーに共通に付与されていることを確認します。
  3. PDBに対してローカルである管理者として、PDBに接続します。
    次に例を示します。
    CONNECT dba_debra@pdb_name
    Enter password: password
    

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

  4. このPDBのためにユーザーにCREATE SESSION権限およびSET CONTAINER権限を付与します。
    次に例を示します。
    GRANT CREATE SESSION, SET CONTAINER TO c##sec_admin_owen CONTAINER = CURRENT;
    GRANT CREATE SESSION, SET CONTAINER TO c##accts_admin_ace CONTAINER = CURRENT;
    
  5. SYSDBA管理権限を持つユーザーSYSとして接続します
    CONNECT SYS@pdb_name AS SYSDBA
    Enter password: password
    
  6. PDBにいる間に、2つのバックアップDatabase Vaultユーザー・アカウントを構成します。
    BEGIN
     CONFIGURE_DV (
       dvowner_uname         => 'c##dbv_owner_root_backup',
       dvacctmgr_uname       => 'c##dbv_acctmgr_root_backup');
     END;
    /
    

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

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

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

  8. 前の手順で構成したバックアップDatabase Vault所有者ユーザーとして、PDBに接続します。
    次に例を示します。
    CONNECT c##dbv_owner_root_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に対して有効になっていることを確認します。
    CONNECT SYS@pdb_name AS SYSDBA
    Enter password: password
    
    SELECT * FROM DBA_DV_STATUS;
  13. バックアップDV_OWNERユーザーとして接続し、前に作成したプライマリDV_OWNERユーザーにDV_OWNERロールを付与します。

    次に例を示します。

    CONNECT c##dbv_owner_root_backup
    Enter password: password
    
    GRANT DV_OWNER TO c##sec_admin_owen WITH ADMIN OPTION;
    
  14. バックアップDV_ACCTMGRユーザーとして接続してから、DV_ACCTMGRロールをプライマリDV_ACCTMGRユーザーに付与します。

    次に例を示します。

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

プラグインされたDatabase Vault PDB用の共通Database Vaultアカウント作成

マルチテナント環境では、SQL*Plusから、すでにDatabase Vaultが有効になっているデータベースに接続できます。

このシナリオでは、接続されるPDBには、独自のローカルDatabase Vaultアカウントがあります。Database Vault対応データベースをDatabase Vaultが有効になっていないCDBに接続する場合は、CDBでDatabase Vaultを有効にしてCDBを再起動するまで、PDBは制限されたモードのままになるということを知っておいてください。Database Vaultが有効になっていないPDBをDatabase Vaultが有効になっているCDBに接続する場合は、PDBでDatabase Vaultを有効にしてPDBを再起動するまで、PDBは制限されたモードのままになります。この接続された、Database Vaultが有効になっていないPDBは、引き続き使用可能です。ただし、CDBで厳密オプションが設定されてDatabase Vaultが有効になっている場合は、PDBでDatabase Vaultを有効にする必要があります。

このPDBのDatabase Vault構成を管理するための共通ユーザーを有効化するには:

  1. ローカル・プライマリDatabase Vault所有者として、PDBにログインします。
    次に例を示します。
    sqlplus dbv_owner@pdb_name
    Enter password: password
    

    次に例を示します。

    使用可能なPDBを検索するには、show pdbsコマンドを実行します。現在のPDBを確認するには、show con_nameコマンドを実行します。

  2. 共通Database Vault DV_OWNERユーザーに、CREATE SESSION権限とSET CONTAINER権限、および適切なDatabase Vaultロールを付与します。
    次のアカウントは、プライマリおよびバックアップ・アカウントになります。
    GRANT CREATE SESSION, SET CONTAINER, DV_OWNER TO c##dbv_owner_root WITH ADMIN OPTION;
    GRANT CREATE SESSION, SET CONTAINER, DV_OWNER TO c##dbv_owner_root_backup WITH ADMIN OPTION;
    
  3. DV_ACCTMGRロールを付与されているユーザーとして接続します。
  4. DV_ACCTMGR共通アカウントを作成します。
    GRANT CREATE SESSION, SET CONTAINER, DV_ACCTMGR TO c##dbv_acctmgr_root WITH ADMIN OPTION;
    GRANT CREATE SESSION, SET CONTAINER, DV_ACCTMGR TO c##dbv_acctmgr_root_backup WITH ADMIN OPTION;

マルチテナント環境におけるレルム

マルチテナント環境では、アプリケーション・ルート内の共通オブジェクトを保護するためにレルムを作成できます。

個々のプラガブル・データベース(PDB)内でこれらのオブジェクトの周りに多数のオブジェクトおよびレルムを作成するのでなく、アプリケーション・ルートでレルムを作成する利点は、それらをアプリケーション・ルートという1つの場所で作成できるということです。このような方法で、それらを一元的に管理できます。

CDBルートでは、共通レルムは作成できません。

Database Vaultの共通レルムは、通常レルムか必須レルムのどちらかにできます。このレルムは、PDB内のローカル・オブジェクトではなく、アプリケーション・ルート内のオブジェクトのみを保護します。CDBルート、アプリケーション・ルート、および影響を受けるPDBはすべて、Database Vaultに対応している必要があります。

共通レルムを構成するには、一般に、DV_OWNERまたはDV_ADMINロールが付与されている必要があります。共通レルムの共通認可を付与するには、アプリケーション・ルートにいる必要があります。アプリケーション・ルートに関連付けられているPDBにレルムを伝播するには、アプリケーション・ルートを同期させる必要があります。たとえば、saas_sales_appというアプリケーションを同期させるには、次のようにします。

ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app SYNC;

マルチテナント環境におけるレルム認可

マルチテナント環境では、共通レルム認可のルールおよび動作は、他の共通オブジェクトの認可と同様です。

共通レルムのローカル認可

共通レルムのローカル認可とは、ユーザーがアクセスしているPDBのためにこのユーザーが保持している認可のことを指します。

共通レルムのローカル認可のルールは、次のとおりです。

  • DV_OWNERまたはDV_ADMINロールを共通で付与されているユーザーは、共通ユーザー、共通ロール、ローカル・ユーザーおよびローカル・ロールにローカル認可を付与できます。共通DV_OWNERまたはDV_ADMINユーザーは、PDB内の共通レルムからローカル認可を削除することもできます。

  • ローカルDatabase Vault管理者は、PDB内のローカルで認可できます(つまり、ローカル認可をローカル・ユーザーと共通ユーザーの両方に付与する)。また、共通Database Vault管理者は、各PDBで認可を付与できます。共通レルム認可は、アプリケーション・ルートで共通Database Vault管理者のみが付与できます。

  • 共通Database Vault管理者は、ローカル認可を、PDB内から共通レルムに追加することも、それから削除することもできます。

  • 共通ユーザーに共通レルムのローカル認可しかない場合、このユーザーは、このローカル認可以外のPDB内の共通レルムにはアクセスできません。

  • 共通ユーザーまたは共通ロールは、共通レルムへのローカル認可と共通認可の両方を同時に保持できます。共通レルムから共通ユーザーのローカル認可を削除しても、共通ユーザーの共通認可には影響しません。共通レルムから共通ユーザーの共通認可を削除しても、共通ユーザーのローカル認可には影響しません。

共通レルムの共通認可

共通レルムの共通認可とは、Database Vaultに対応しているすべてのコンテナで認可が有効になっていると同時に、共通ユーザーまたは共通ロールがアプリケーション・ルートで保持している認可のことを指します。

共通レルムのローカル認可のルールは、次のとおりです。

  • DV_OWNERまたはDV_ADMINロールを共通で付与されているユーザーは、アプリケーション・ルート内の共通ユーザーまたはロールに共通レルム認可を付与できます。この共通Database Vault管理者は、アプリケーション・ルート内にいながら、共通認可の削除を実行できます。

  • この共通認可は、CDB内の、Database Vaultに対応しているコンテナに適用されます。

  • 共通ユーザーにアプリケーション・ルート内の共通レルムに対する権限がある場合、このユーザーは、アプリケーション・ルート内およびアプリケーションPDB内の共通レルムによって保護されているオブジェクトにアクセスできます。

  • 共通レルムに関連付けられているルール・セットは、共通ルール・セットである必要があります。共通認可に関連付けられている共通ルール・セットに追加されるルールに、ローカル・オブジェクトを含めることはできません。

アプリケーション・ルート内と個々のPDB内でのレルムの認可の動作

コンテナでのDatabase Vault強制の間に、共通レルムは、それがPDBでローカルで使用される場合の同じレルムと同じ強制動作を実行します。

マルチテナント環境におけるルール・セットとルール

マルチテナント環境では、アプリケーション・ルートでルール・セットおよびその関連付けられたルールを作成できます。

共通レルムでは、関連付けられたレルムまたはコマンド・ルールをDatabase Vaultで評価するときに、共通ルール・セットを使用する必要があります。共通ルール・セットとそのルールは、アプリケーション・ルートでのみ作成できます。共通ルール・セットは、作成後、共通ルール・セットを作成したルートに関連付けられているすべてのコンテナ内に存在します。共通ルール・セットは、共通ルールのみを含むことができます。

共通ルール・セットとそのルールを構成するには、DV_OWNERまたはDV_ADMINロールが共通で付与されている必要があります。

マルチテナント環境におけるコマンド・ルール

マルチテナント環境では、CDBルートまたはアプリケーション・ルートのどちらかで、共通およびローカルのコマンド・ルールを作成できます。

共通コマンド・ルールは、共通のレルム、ルール・セットおよびルールのみに関連付けることができます。ローカル・コマンド・ルールは、ローカルのレルム、ルール・セットおよびルールのみに関連付けることができます。

これらのコマンド・ルールをマルチテナント環境全体に適用するには、DVADMまたはDVOWNERロールを付与された共通ユーザーとして、CDBルートまたはアプリケーション・ルートからコマンド・ルール・プロシージャを実行する必要があります。CDBルートで作成される共通コマンド・ルールは、そのCDB環境内のすべてのPDBに適用されます。アプリケーション・ルートで作成される共通コマンド・ルールは、このアプリケーション・ルートに関連付けられているPDBのみに適用されます。CDBルートまたはアプリケーション・ルートに関連付けられているPDBにコマンド・ルールを伝播するには、PDBを同期させる必要があります。たとえば、saas_sales_appというアプリケーション・ルートをアプリケーションPDBと同期するには、次のようにします。

ALTER PLUGGABLE DATABASE APPLICATION saas_sales_app SYNC;

CDBルートの共通コマンド・ルールをPDBと同期するには:

ALTER PLUGGABLE DATABASE APPLICATION APP$CDB$SYSTEM SYNC;

USER_ROLE_PRIVSデータ・ディクショナリ・ビューを問い合せることで、ユーザーのロールを確認できます。コマンド・ルールに関する情報を確認するには、DBA_DV_COMMAND_RULEデータ・ディクショナリ・ビューを問い合せます。

マルチテナント環境におけるOracle Database Vaultポリシー

Oracle Database Vaultポリシーは、それらが作成されたプラガブル・データベース(PDB)に対してのみローカルとなります。

つまり、PDBでポリシーを作成した場合は、ローカルのレルムおよびコマンド・ルールのみをそれに追加できます。共通レルムまたは共通コマンド・ルールを保持できるDatabase Vaultポリシーは作成できません。

スタンドアロンのOracle DatabaseをPDBに変換してCDBにプラグイン

リリース12c以降のスタンドアロンのOracle DatabaseはPDBに変換可能で、さらにそのPDBはCDBにプラグインできます。

  1. DV_OWNERロールを付与されているユーザーとしてルートに接続します。

    次に例を示します。

    sqlplus c##sec_admin
    Enter password: password
    
  2. CONTAINER = CURRENTを指定して、ユーザーSYSDV_PATCH_ADMINロールを付与します。
    GRANT DV_PATCH_ADMIN TO SYS CONTAINER = CURRENT;
    
  3. ルートで、SYSOPERシステム権限を持つユーザーSYSとして接続します。

    次に例を示します。

    CONNECT SYS AS SYSOPER -- Or, CONNECT SYS@hrpdb AS SYSOPER
    Enter password: password
    
  4. データベースを読取り専用モードで再起動します。

    次に例を示します。

    SHUTDOWN IMMEDIATE
    STARTUP MOUNT
    ALTER DATABASE OPEN READ ONLY
    
  5. Database Vault対応のデータベースに、DV_OWNERロールを持つユーザーとして接続します。

    次に例を示します。

    CONNECT sec_admin@dv_db
    
  6. このデータベースで、ユーザーSYSDV_PATCH_ADMINロールを付与します。
    GRANT DV_PATCH_ADMIN TO SYS;
    
  7. オプションで、DBMS_PDB.CHECK_PLUG_COMPATIBILITYファンクションを実行して、切断されたPDBがCDBと互換性があるかどうかを確認します。

    このファンクションを実行する場合は、次のパラメータを設定します。

    • pdb_descr_file: PDBの記述を含むXMLファイルへのフルパスを設定します。

    • store_report: PDBにCDBと互換性がない場合にレポートを生成するかどうかを指定します。レポートを生成する場合はTRUEに、レポートを生成しない場合はFALSEに設定します。生成されたレポートは、PDB_PLUG_IN_VIOLATIONS一時表に格納され、PDBにCDBとの互換性がない場合にのみ生成されます。

    たとえば、/disk1/usr/dv_db_pdb.xmlファイルで記述されているPDBに現在のCDBと互換性があるかどうかを判断するには、次のPL/SQLブロックを実行します。

    SET SERVEROUTPUT ON
    DECLARE
      compatible CONSTANT VARCHAR2(3) := 
        CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
               pdb_descr_file => '/disk1/usr/dv_db_pdb.xml',
               store_report   => TRUE)
        WHEN TRUE THEN 'YES'
        ELSE 'NO'
    END;
    BEGIN
      DBMS_OUTPUT.PUT_LINE(compatible);
    END;
    /
    

    出力がYESの場合はPDBに互換性があり、次のステップに進むことができます。

    出力がNOの場合は、PDBに互換性がありません。PDB_PLUG_IN_VIOLATIONS一時表を調べると、互換性がない理由を確認できます。

  8. PDBを記述するXMLファイルを作成します。

    次に例を示します。

    BEGIN
      DBMS_PDB.DESCRIBE(
        pdb_descr_file => '/disk1/oracle/dv_db.xml');
    END;
    /
    
  9. CREATE PLUGGABLE DATABASE文を実行し、USING句でXMLファイルを指定します。要求された場合には、他の句を指定します。

    次に例を示します。

    CREATE PLUGGABLE DATABASE dv_db_pdb AS CLONE USING 'dv_db.xml' NOCOPY;
    
  10. 作成したPDBに、SYSDBA管理権限を持つユーザーSYSとして接続します。
    CONNECT SYS@dv_db_pdb AS SYSDBA
    
  11. noncdb_to_pdb.sqlスクリプトを実行します。
    @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
    
  12. このPDBを読取り/書込み制限モードでオープンします。
    ALTER PLUGGABLE DATABASE dv_db_pdb OPEN READ WRITE RESTRICTED;
    
  13. 次のプロシージャを実行してPDBを同期します。
    EXECUTE DBMS_PDB.SYNC_PDB;
    
  14. DV_OWNERロールを付与されているユーザーとしてルートに接続します。
    sqlplus c##sec_admin
    Enter password: password
    
  15. CONTAINER = CURRENTを指定して、ユーザーSYSからDV_PATCH_ADMINロールを取り消します。
    REVOKE DV_PATCH_ADMIN FROM SYS CONTAINER = CURRENT;
    
  16. Database Vault対応のレガシー・データベースに、SYSOPERシステム権限を持つユーザーSYSとして接続します。
    CONNECT SYS@dv_db_pdb AS SYSOPER
    
  17. このデータベースを再起動します。

    次に例を示します。

    SHUTDOWN IMMMEDIATE
    STARUP
    
  18. ユーザーSYSからDV_PATCH_ADMINロールを取り消します。
    REVOKE DV_PATCH_ADMIN FROM SYS;