日本語PDF

24 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は、制限されたモードで動作します。

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

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

図24-1の説明が続きます
「図24-1 標準モードでのマルチテナント環境におけるOracle 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

マルチテナント環境におけるOracle DatabaseへのOracle Database Vaultの登録

Oracle Database Vaultは、いくつかのシナリオに基づいてマルチテナント環境で登録できます。

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

特定のPDBを管理するDatabase Vaultローカル・ユーザーの登録

Oracle Database Vaultをまずルートで登録してから、PDBで登録する必要があります。

先にPDBに登録しようとすると、ORA-47503「Database VaultはCDB$ROOTで有効化されていません。」エラーが表示されます。
  1. ユーザー作成とCREATE SESSION権限およびSET CONTAINER権限の付与の権限があるユーザーとしてPDBにログインします。
    次に例を示します。
    sqlplus sec_admin@pdb_name
    Enter password: password
    

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

  2. 新しいDatabase Vaultロールに既存のローカル・ユーザーの名前付きアカウントを使用しない場合は、新しい名前付きローカル・ユーザー・アカウントを作成します。
    どちらの場合も、名前付きユーザーがパスワードを紛失または忘れた場合に備えて、Database Vaultロールを保持するバックアップ・アカウントを作成しておく必要があります。
    GRANT CREATE SESSION, SET CONTAINER TO sec_admin_owen 
      IDENTIFIED BY password;
    GRANT CREATE SESSION, SET CONTAINER TO dbv_owner_backup 
      IDENTIFIED BY password;
    GRANT CREATE SESSION, SET CONTAINER TO accts_admin_ace 
      IDENTIFIED BY password;
    GRANT CREATE SESSION, SET CONTAINER TO dbv_acctmgr_backup 
      IDENTIFIED BY password;
    
  3. CDBルートにOracle Database Vaultを登録したことを確認します。
    一時的にrootに接続して、DBA_DV_STATUSビューを問合せします。
    CONNECT SYS / AS SYSDBA
    Enter password: password
    
    SELECT * FROM DBA_DV_STATUS;
    
  4. SYSDBA管理権限を持つユーザーSYSとして、PDBに接続します。
    CONNECT SYS@pdb_name AS SYSDBA
    Enter password: password
    
  5. PDBにいる間に、2つのバックアップDatabase Vaultユーザー・アカウントを構成します。
    BEGIN
     CONFIGURE_DV (
       dvowner_uname     => 'dbv_owner_backup',
       dvacctmgr_uname   => 'dbv_acctmgr_backup');
     END;
    /
    

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

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

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

  7. 前の手順で構成したバックアップDatabase Vault所有者ユーザーとして、PDBに接続します。
    次に例を示します。
    CONNECT dbv_owner_backup@pdb_name
    Enter password: password
    
  8. このPDBでOracle Database Vaultを有効にします。
    EXEC DBMS_MACADM.ENABLE_DV;
  9. SYSDBA管理権限でCDBに接続します。
    CONNECT / AS SYSDBA
  10. PDBを閉じてから、再度開きます。
    ALTER PLUGGABLE DATABASE pdb_name CLOSE IMMEDIATE;
    ALTER PLUGGABLE DATABASE pdb_name OPEN;
    
  11. 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;
  12. バックアップDV_OWNERユーザーとして接続し、前に作成したプライマリDV_OWNERユーザーにDV_OWNERロールを付与します。

    次に例を示します。

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

    次に例を示します。

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

Database Vault対応PDBへの接続

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

このシナリオでは、接続されるデータベースには、独自のローカル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を有効にする必要があります。

Database Vault対応PDBを接続する前に、Database Vaultロールが共通ユーザーに付与されている場合は、PDBの接続が共通ユーザーに与える影響を完全に理解しておいてください。

マルチテナント環境での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を登録できます。

レルムの構成

データベース・オブジェクトを保護するために、これらのオブジェクトの周辺にレルムを作成し、このデータへのユーザー・アクセスを制御するための認可を設定します。

レルムの概要

レルムを使用すると、特定のオブジェクト・タイプなど、データベース・オブジェクトを保護できます。

レルムについて

レルムは、特定のアプリケーションのために保護する必要のあるデータベース・スキーマ、データベース・オブジェクトおよびデータベース・ロールのグループです。

レルムは、データベース・オブジェクトの保護ゾーンとみなすことができます。スキーマは、表、ビューおよびパッケージなどのデータベース・オブジェクトの論理的な集合で、ロールは権限の集合です。スキーマおよびロールを機能グループに分類することにより、システム権限を使用するユーザーがこれらのグループに対して行える操作を制御し、データベース管理者またはシステム権限を持つその他の強力なユーザーによる不正なデータ・アクセスを防ぐことができます。Oracle Database Vaultは、既存のOracleデータベースの任意アクセス制御モデルを置き換えません。レルムおよびコマンド・ルールの両方で、このモデルの上位の層として機能します。

Oracle Database Vaultには、通常と必須という2つのタイプのレルムがあります。どちらのタイプのレルムでも、スキーマ全体の保護と、スキーマ内の重要オブジェクト(表や索引)の選択的な保護が可能です。通常レルムの場合、オブジェクト権限を付与されているオブジェクトの所有者またはユーザーはレルム認可なしで問合せやDML操作を実行できますが、DDL操作の実行にはレルム認可が必要です。必須レルムの場合、レルム内のオブジェクトにさらに厳格な保護が適用されます。必須レルムの場合、オブジェクト権限およびシステム権限に基づくアクセスの両方がブロックされ、オブジェクト権限を持つユーザーはレルム認可なしで問合せやDML操作またはDDL操作を実行することができません。つまり、オブジェクト所有者であっても、自身のオブジェクトが必須レルムで保護されている場合、適切なレルム認可を受けないとそのオブジェクトにアクセスできません。

Oracle Flashback Technologyを使用するデータベースの場合、標準レルムと必須レルムのどちらも、フラッシュバック表に対する動作が強制的に同じになります。ユーザーにレルムに対する権限がある場合、ユーザーは、レルムで保護された表に対してFLASHBACK TABLE SQL文を実行できます。

情報ライフサイクル管理(ILM)を使用するデータベースの場合、Database Vault管理者は、DBMS_MACADM.AUTHORIZE_MAINTENANCE_USERおよびDBMS_MACADM.UNAUTHORIZE_MAINTENANCE_USERプロシージャを使用して、レルムで保護されたオブジェクトに誰がILM操作を実行可能かを制御できます。

スキーマ、スキーマ内の特定のタイプのすべてのオブジェクト、またはスキーマ内の個々のオブジェクトをレルムに登録できます。レルムを作成すると、レルムで保護する一連のスキーマ・オブジェクトまたはロール(セキュア・オブジェクト)を登録し、セキュア・オブジェクトにアクセスする一連のユーザーやロールを認可できます。通常レルムで保護されるオブジェクトは、直接オブジェクト権限を持つユーザーからのDMLアクセスを許可します。

たとえば、経理部で使用される既存のすべてのデータベース・スキーマを保護するレルムを作成できます。レルムに対して認可されていないユーザーは、保護された経理データにシステム権限を使用してアクセスすることを許可されません。スキーマ全体が保護される場合は、表、索引、プロシージャおよびその他のオブジェクトなど、スキーマ内のすべてのオブジェクトが保護されます。

Oracle Database Vaultに作成するレルム上でレポートを実行できます。開発フェーズやテスト・フェーズの間、また、本番フェーズの間でも、シミュレーション・モードを使用して、アクセスをブロックするかわりにレルム違反のみを記録できます。これにより、Database Vaultレルムを使用してアプリケーションを迅速にテストできます。

Oracle Enterprise Manager Cloud ControlでOracle Database Vault Administratorページを使用することで、レルムを構成できます。別の方法としては、Oracle Database Vaultで提供されるPL/SQLインタフェースおよびパッケージを使用することで、レルムを構成できます。

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

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

個々のプラガブル・データベース(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ポリシーは作成できません。

Database Vault操作制御を使用したローカルPDBデータへのマルチテナント共通ユーザー・アクセスの制限

インフラストラクチャ・データベース管理者など、CDBルートの共通ユーザーでPDBアクセスを制御できます。

Database Vault操作制御の使用について

自律環境、通常のクラウド環境またはオンプレミス環境で、共通ユーザーによるプラガブル・データベース(PDB)のローカル・データへのアクセスを自動的に制限できます。

これを実現するために、共通ユーザー(インフラストラクチャ・データベース管理者やアプリケーションなど)に適用されるOracle Database Vault操作制御を使用できます。

Database Vault操作制御は、データベース管理者が高い権限を持つユーザーとしてCDBルートにログインする必要があるときに、PDBの顧客データにはアクセスできないようにするような状況で役立ちます。データベース操作制御では、PDBデータベース管理者をブロックしません。こうしたユーザーをブロックするには、PDBでOracle Database Vaultを有効にして、該当するユーザーをブロックするレルム制御などのDatabase Vault機能を使用します。

共通ユーザーやアプリケーションが、PDBのローカル・データへのアクセスが必要なタスクを実行する必要がある場合は、共通ユーザーとパッケージについてのDatabase Vault操作制御の例外リストを作成できます。例外リストに指定する共通ユーザーのタイプの例として、Oracle Textを担当するCTXSYSアプリケーション・アカウントが挙げられます。例外リストでパッケージを指定すると、例外リスト内のユーザーにフル・アクセスを提供することなく詳細な制御を適用できます。

Database Vault操作制御する一般的なプロセスは、次のとおりです。

  1. Database Vault操作制御を有効にして、本番環境でも有効にしたままにします。
  2. この段階では、Database Vault操作制御が環境内のすべてのPDBに適用されます。PDBでDatabase Vaultを有効にしているかどうかは関係ありません。
  3. 特定のユーザーとパッケージがPDBのローカル・スキーマにアクセスできるようにするには、それらを例外リストに追加します。ユーザーまたはパッケージがアクセスを必要としなくなったら、それらを例外リストから削除します。たとえば、データベースでOracle Textを使用している場合は、例外リストにCTXSYS管理ユーザー・アカウントとパッケージを追加できます。

Database Vault操作制御の有効化

Database Vault操作制御を有効にするには、DBMS_MACADM.ENABLE_APP_PROTECTION PL/SQLプロシージャを使用します。

マルチテナント本番サーバーにDatabase Vault操作制御を使用する場合は、Database Vault操作制御を常時有効にしておくことをお薦めします。

ほとんどの場合、特定のPDBのみでなく、CDB全体に対してデータベース操作制御を有効にします。特定のPDBに対して無効にする必要がある場合(トラブルシューティング目的など)、そのPDBでDBMS_MACADM.DISABLE_APP_PROTECTIONプロシージャを実行します。PDBのトラブルシューティングが終了したら、このトピックの例で示すように、Database Vault操作制御を再度有効化します。
Database Vault操作制御を有効にする前に、CDBルートでDatabase Vaultを有効化して構成しておく必要があります。ただし、PDBでDatabase Vaultを有効化する必要はありません。
  1. DV_OWNERロールが付与されている共通ユーザーとしてCDBルートにログインします。
    次に例を示します。
    sqlplus c##sec_admin_owen_root
    Enter password: password  
  2. DBMS_MACADM.ENABLE_APP_PROTECTIONプロシージャを実行します。
    • CDB環境内のすべてのPDBに対してDatabase Vault操作制御を有効化するには:
      EXEC DBMS_MACADM.ENABLE_APP_PROTECTION;
    • 特定のPDBの操作の制御は、トラブルシューティングの理由で無効になっている可能性があります。特定のPBB (HRPDBなど)に対するDatabase Vault操作の制御を再度有効にするには、次のようにします。
      EXEC DBMS_MACADM.ENABLE_APP_PROTECTION ('HRPDB');
この段階で、1つまたはすべてのPDBのDatabase Vault操作制御が有効化されています。SYSDBA管理権限を持つユーザーSYSとして接続してからSELECT * FROM DBA_DV_STATUS;問合せを実行すると、確認できます。特定の信頼できる共通ユーザーまたはパッケージが、これらのPDBのローカル・スキーマにアクセスして特別な操作を実行する必要がある場合は、DBMS_MACADM.ADD_APP_EXCEPTIONプロシージャを使用して、そのユーザーまたはパッケージをDatabase Vault操作制御の例外リストに追加できます。

共通ユーザーおよびパッケージの例外リストへの追加

PDBのローカル・データにアクセスする必要がある共通ユーザーとアプリケーションは、例外リストに追加できます。

PDBのローカル・データにアクセスする必要があるユーザー・アカウントの唯一のオブジェクトがユーザー・パッケージである場合は、そのパッケージを例外リストに追加します。これにより、例外リストに登録するものを詳細に制御できます。例外リストに追加する共通ユーザーとパッケージの種類は、PDBの機能に必要なものにします。たとえば、Oracle Spatialを使用している場合は、MDSYSアカウントを例外リストに追加する必要があります。MDSYSは、Oracle Spatial関数ために顧客PDBデータにアクセスする必要があります。共通ユーザーおよびパッケージをDatabase Vault操作制御例外リストに追加するには、DBMS_MACADM.ADD_APP_EXCEPTION PL/SQLプロシージャを使用できます。既存の例外を調べるには、DBA_DV_APP_EXCEPTIONデータ・ディクショナリ・ビューを問合せします。
  1. DV_OWNERロールが付与されている共通ユーザーとしてCDBルートにログインします。
    次に例を示します。
    sqlplus c##sec_admin_owen_root
    Enter password: password
  2. 共通ユーザーに指定するパッケージが、次の要件を満たしていることを確認します。
    • パッケージは、共通ユーザーが所有している必要があります。
    • ユーザー作成のパッケージは、定義者権限のプロシージャで作成する必要があります。

    ユーザー作成パッケージの詳細は、DBA_OBJECTSデータ・ディクショナリ・ビューを問い合せることで確認できます。

  3. DBMS_MACADM.ADD_APP_EXCEPTIONプロシージャを実行します。
    次に例を示します。
    DBMS_MACADM.ADD_APP_EXCEPTION ('MDSYS', 'PATCH_APP'); 

共通ユーザーおよびパッケージの例外リストからの削除

PDBのローカル・データにアクセスする必要がなくなったユーザーおよびアプリケーションは、例外リストから削除できます。

共通ユーザーおよびパッケージをDatabase Vault操作制御例外リストから削除するには、DBMS_MACADM.DELETE_APP_PROTECTION PL/SQLプロシージャを使用できます。既存の例外を調べるには、DBA_DV_APP_EXCEPTIONデータ・ディクショナリ・ビューを問合せします。
  1. DV_OWNERロールが付与されている共通ユーザーとしてCDBルートにログインします。
    次に例を示します。
    sqlplus c##sec_admin_owen_root
    Enter password: password  
  2. DBMS_MACADM.DELETE_APP_EXCEPTIONプロシージャを実行します。
    次に例を示します。
    DBMS_MACADM.DELETE_APP_EXCEPTION ('MDSYS', 'PATCH_APP'); 

Database Vault操作制御の無効化

Database Vault操作制御を無効にするには、DBMS_MACADM.DISABLE_APP_PROTECTION PL/SQLプロシージャを使用します。

ほとんどの場合、Database Vault操作制御は有効のままにしておく必要があります。トラブルシューティングの際にPDBのDatabase Vault操作制御を無効にする必要がある場合は、そのPDBのDatabase Vault操作制御を一時的に無効にすることをお薦めします(その他のPDBに対する操作制御は有効のままにしておきます)。トラブルシューティングが完了したら、Database Vault操作制御を再度有効化します。
  1. DV_OWNERロールが付与されている共通ユーザーとしてCDBルートにログインします。
    次に例を示します。
    sqlplus c##sec_admin_owen_root
    Enter password: password  
  2. DBMS_MACADM.DISABLE_APP_PROTECTIONプロシージャを実行します。
    • CDB環境内のすべてのPDBに対するDatabase Vault操作制御を無効化するには:
      EXEC DBMS_MACADM.DISABLE_APP_PROTECTION;
    • 特定のPBB (例: HRPDB)に対してDatabase Vault操作制御を無効化するには、次のようにします。
      EXEC DBMS_MACADM.DISABLE_APP_PROTECTION ('HRPDB');

スタンドアロンの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
    Enter password: password
    
  4. データベースを読取り専用モードで再起動します。

    次に例を示します。

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

    次に例を示します。

    CONNECT sec_admin@pdb_name
    
  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 pdb_name AS CLONE USING 'dv_db.xml' NOCOPY;
    
  10. 作成したPDBに、SYSDBA管理権限を持つユーザーSYSとして接続します。
    CONNECT SYS@pdb_name AS SYSDBA
    
  11. noncdb_to_pdb.sqlスクリプトを実行します。
    @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
    
  12. このPDBを読取り/書込み制限モードでオープンします。
    ALTER PLUGGABLE DATABASE pdb_name 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@pdb_name AS SYSOPER
    
  17. このデータベースを再起動します。

    次に例を示します。

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