3 Oracle Database Vaultの開始

Oracle Database Vaultを使用して開始する前に、これをOracle Databaseに登録する必要があります。

Oracle DatabaseへのOracle Database Vaultの登録について

Oracle Databaseのインストール後に、Oracle Database VaultをインストールしたOracle CDBおよび関連するPDBに登録(すなわち構成および有効化)する必要があります。

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

登録プロセスの一部として、Database Vaultバックアップ・アカウントが作成されています。これらは、主要なDatabase Vaultロールを保持するアカウントです。最初にこれらのアカウントを使用して、管理権限を持つ名前付きユーザーにロールをプロビジョニングします。SYSではこれらのロールを持つユーザーのパスワードをリセットできないため、バックアップ・アカウントの保持により、名前付きユーザーの資格証明の紛や資格証明の配置の誤りからリカバリできます。

Database Vaultを登録する場合、登録用に選択できる方法がいくつかあります。

ノート:

Oracle Database 12cより前のリリースからアップグレードしてあり、その以前のリリースで以前のOracle Database Vaultが有効になっている場合は、アップグレード・プロセスの完了後に、DBMS_MACADM.ENABLE_DVプロシージャを使用することでOracle Database Vaultを有効にする必要があります。

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

Oracle Database Vaultの登録

いくつかのシナリオに基づいてOracle Database Vaultを登録できます。

Database Vaultの登録について

関連するPDBのいずれかにDatabase Vaultを登録する前に、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でもこのロールを使用できなくなります。

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ロール権限を持つように制限されます。DV_OWNERをCDBルート共通ユーザーにローカルに付与すると、そのユーザーはその他のユーザーに共通に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は、データベースの再起動後、Database VaultがPDBで有効になるまで制限モードになります。

      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および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ユーザーに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を登録していることを確認します。
    ルートに一時的に接続してから、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)システムなどの安全な場所に格納します。

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にログインします。
    sqlplus sec_admin@pdb_name as sysdba
    Enter password: password

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

  2. 必要な場合は、Oracle Database VaultおよびOracle Label SecurityがこのPDBにすでにインストールされているかどうかを確認します。
    DVSYSアカウント(Database Vaultの場合)およびLBACSYSアカウント(Label Securityの場合)が存在する場合、Database VaultおよびLabel SecurityがPDBに存在します。
    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 Database Vaultをインストールする前に、Oracle Label Securityをインストールする必要があります。

  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に登録されていない場合は、CDBルートにDatabase Vaultを登録する前にPDBを閉じる必要があります。Database Vaultは、PDBに登録する前にCDBルートに登録する必要があります。Database VaultがCDBルートに登録され、データベースが再起動された後、PDBを開いてDatabase Vaultを登録できます。

関連トピック

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

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

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

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

Oracle Database Vaultページを使用して、Database Vaultで保護されたデータベースを一元的なコンソールから管理および監視できます。このコンソールでは、アラートの自動化、Database Vaultレポートの表示、およびDatabase Vaultで保護されたその他のデータベースへのDatabase Vaultポリシーの伝播が可能です。
ログインする前に、Oracle Enterprise Managerのオンライン・ヘルプに従って、Database Vaultとともに使用するCloud Controlターゲット・データベースを構成していることを確認してください。Oracle Database VaultもOracle Databaseに登録する必要があります。
  1. Cloud Controlを起動します。

    次に例を示します。

    https://myserver.example.com:7799/em
    
  2. セキュリティ管理者としてCloud Controlにログインします。
  3. Cloud Controlのホーム・ページで、「ターゲット」メニューから「データベース」を選択します。
  4. 「データベース」ページで、接続先のOracle Database Vaultで保護されているデータベースのリンクを選択します。

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

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

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

  6. 次の情報を入力します。
    • ユーザー名: 適切な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の説明

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

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

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

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

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

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

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

このチュートリアルを開始する前に、HRサンプル・スキーマがインストールされていることを確認してください。
  1. DBAロールを付与されたユーザーとしてPDBにログインしてから、HRスキーマにアクセスします。

    次に例を示します。

    sqlplus system@pdb_name
    Enter password: password
    

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

  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ユーザーとしてデータベース・インスタンスにログインし、アカウントをロック解除して有効にします。次に例を示します。
    sqlplus bea_dvacctmgr@pdb_name
    Enter password: password
    
    ALTER USER HR ACCOUNT UNLOCK IDENTIFIED BY password
    

    passwordを安全なパスワードに置き換えます。

    この例からわかるように、SYSTEMにはHRスキーマのEMPLOYEES表の給与情報へのアクセス権があります。SYSTEMには、SELECT ANY TABLEシステム権限を含むDBAロールが自動的に付与されるためです。

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

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

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

レルムを作成したら、レルム内のスキーマやスキーマ・オブジェクトに適用するセキュリティ制限を作成します。HRスキーマにレルムを作成する必要があります。
  1. DV_OWNERロールを付与されているユーザーとしてPDBに接続します。
    次に例を示します。
    CONNECT c##sec_admin_owen@pdb_name
    Enter password: password
  2. HR.EMPLOYEES表にHR Appレルムを作成します。
    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    => 0);
      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;
      /

この段階で、レルムが作成されていますが、それに対する認可は割り当てられていません。このチュートリアルで後ほど対応します。

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

この時点では、レルムが保護するデータベース・オブジェクトにアクセスする、またはそれらを操作するデータベース・アカウントもロールもありません。

そのため、このステップでデータベース・アカウントまたはデータベース・ロールを認可し、レルム内のスキーマにアクセスできるようにします。SEBASTIANユーザー・アカウントを作成します。

  1. SQL*Plusで、DV_ACCTMGRロールを持つDatabase Vaultアカウント・マネージャとしてPDBに接続し、ローカル・ユーザーSEBASTIANを作成します。

    次に例を示します。

    CONNECT bea_dvacctmgr@pdb_name
    Enter password: password
    
    GRANT CREATE SESSION TO SEBASTIAN IDENTIFIED BY password;
    

    passwordを安全なパスワードに置き換えます。

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

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

この段階では、ユーザーSEBASTIANに、READ ANY TABLEシステム権限があるとしてもレルムをテストさせます。

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

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

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

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

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

  1. HR Appsレルムを作成したユーザーとして、PDBに接続します。
    次に例を示します。
    c##sec_admin_owen@pdb_name
    Enter passwod: password
  2. HR Appsレルムの認可を作成します。
    BEGIN
     DBMS_MACADM.ADD_AUTH_TO_REALM(
      realm_name  => 'HR Apps', 
      grantee     => 'SEBASTIAN'); 
    END;
    /

ステップ6: レルムのテスト

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

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

  1. SQL*Plusで、SYSTEMとしてPDBに接続します。

    CONNECT SYSTEM@pdb_name
    Enter password: password
    
  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でもこの表にはアクセスできません。)しかし、ユーザーSEBASTIANには、この情報へのアクセス権があります。

  3. ユーザーSEBASTIANとして接続します。

    CONNECT sebastian@pdb_name
    Enter password: password
    
  4. 次の問合せを実行します。

    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.

ステップ8: この例で使用したコンポーネントの削除

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

  1. ユーザーSEBASTIANを削除します。

    SQL*Plusで、次のようにOracle Database Vaultアカウント・マネージャ(たとえばbea_dvacctmgr)としてPDBにログインし、SEBASTIANを削除します。

    sqlplus bea_dvacctmgr@pdb_name
    Enter password: password
    
    DROP USER SEBASTIAN;
    
  2. HR Appsレルムを削除します。

    1. このレルムを作成したユーザーとしてPDBに接続します。

      次に例を示します。

      c##sec_admin_owen@pdb_name
      Enter password: password
    2. 次の文を実行して、HR Appsレルムとその認可を削除します。

      EXEC DBMS_MACADM.DELETE_REALM_CASCADE('HR Apps');
  3. 必要な場合は、SQL*Plusで、HRアカウントをロックし、無効にします。

    ALTER USER HR ACCOUNT LOCK PASSWORD EXPIRE;