8 Oracle Database Vaultのセキュア・アプリケーション・ロールの構成

セキュア・アプリケーション・ロールを使用すると、ユーザーのアプリケーションに対するアクセス権限を制御できます。

8.1 Oracle Database Vaultのセキュア・アプリケーション・ロールの概要

Oracle Database Vaultでは、Oracle Database Vaultルール・セットで有効にするセキュア・アプリケーション・ロールを作成できます。

通常のOracle Databaseセキュア・アプリケーション・ロールはカスタムPL/SQLプロシージャによって有効になります。セキュア・アプリケーション・ロールは、ユーザーによるアプリケーション外からのデータへのアクセスを阻止します。これにより、ユーザーはロールに付与されているアプリケーション権限のフレームワーク内での作業を強制されます。

CDBルートまたはアプリケーション・ルートではなく、PDBでのみセキュア・アプリケーション・ロールを作成できます。

ルール・セットを基準にしてロールのデータベース・アクセスを行う利点は、データベース・セキュリティ・ポリシーをすべてのアプリケーションに保存するのではなく、中央の1つの場所に保存できることです。ルール・セットに基づいたロールにより、一貫性と柔軟性を兼ね備えたメソッドを作成し、ロールが提供するセキュリティ・ポリシーを実行できます。この方法では、アプリケーション・ロールのセキュリティ・ポリシーを更新する必要がある場合、1つの場所、つまりルール・セットで行うことができます。さらに、ユーザーがどのようにしてデータベースに接続しても、ルール・セットがロールにバインドされているため、結果は同じです。ユーザーは、ロールを作成して、それをルール・セットに関連付けるのみです。関連付けられているルール・セットでは、ロールの有効化を試行するユーザーが検証されます。

8.2 Oracle Database Vaultセキュア・アプリケーション・ロールのセキュリティ

データベース管理権限を持つユーザーは、DROP ROLE文を使用して、Oracle Database Vaultセキュア・アプリケーション・ロールを削除する場合があります。

Oracle Database Vaultセキュア・アプリケーション・ロールが作成されると、必ずDatabase Vaultによりセキュア・アプリケーション・ロールがOracle Database Vaultレルムに追加されます。これにより、データベース管理者はDROP ROLE文を使用してセキュア・アプリケーション・ロールを削除できません。

8.3 Oracle Database Vaultセキュア・アプリケーション・ロールの作成

セキュア・アプリケーション・ロールは、作成時に、そのロールが有効になる場合と無効になる場合を決定するOracle Database Vault管理のルール・セットに関連付けます。

セキュア・アプリケーション・ロールを作成する前に、ロールに関連付けることができるルール・セットを用意しておく必要があります。ルール・セットは、Oracle管理のルール・セットにすることも、可能であれば、セキュア・アプリケーション・ロールを有効にすることを可能にするタイミング、場所および方法を決定するために作成したルールに基づいて作成したルール・セットにすることもできます。
  1. DV_OWNERまたはDV_ADMINロールを付与されているユーザーとしてPDBに接続します。
  2. 必要に応じて、セキュア・アプリケーション・ロールで使用するルール・セットを作成します。
    DBA_DV_RULE_SETデータ・ディクショナリ・ビューには、既存のルール・セットが示されます。
  3. DBMS_MACADM.CREATE_ROLEプロシージャを実行して、セキュリティ・ロールを作成します。
    たとえば:
    BEGIN
     DBMS_MACADM.CREATE_ROLE(
      role_name      => 'access_hr_employees', 
      enabled        => DBMS_MACUTL.G_YES,
      rule_set_name  => 'Can Access HR.EMPLOYEES');
    END;
    /
  4. セキュア・アプリケーション・ロールの影響を受けるスキーマの所有者として、セキュア・アプリケーション・ロールに適切な権限を付与します。
    該当する権限は、セキュア・アプリケーション・ロールで制御する権限と同じにする必要があります。たとえば、ユーザーがHR.EMPLOYEES表を作成または更新できるようにするルールを作成したとします。HRユーザーは、セキュア・アプリケーション・ロールにSELECT権限とUPDATE権限を付与することが必要になります。
    たとえば:
    CONNECT HR@pdb_name
    Enter password: password
    
    GRANT SELECT, UPDATE ON EMPLOYEES TO ACCESS_HR_EMPLOYEES;
  5. セキュア・アプリケーション・ロールをテストします。
    1. セキュア・アプリケーション・ロールが付与されるユーザーまたは取り消されるユーザーとして接続します。
    2. DBMS_MACSEC_ROLES.SET_ROLEプロシージャをロールに対して実行します。たとえば:
      EXEC DBMS_MACSEC_ROLES.SET_ROLE('ACCESS_HR_EMPLOYEES');
    3. セキュア・アプリケーション・ロールで制御されるアクションを実行してみます。たとえば:
      SELECT COUNT(*) FROM HR.EMPLOYEES;

      ユーザーに権限が付与されていれば、ユーザーはアクションを実行できます。それ以外の場合、アクションは失敗します。

関連トピック

8.4 Oracle Database Vaultで使用するためのOracle Databaseセキュア・アプリケーション・ロールの有効化

既存のセキュア・アプリケーション・ロールを変更できるのは、それがOracle Database Vaultで作成された場合のみです。

Oracle Database Vault以外を使用して作成されたセキュア・アプリケーション・ロールやデータベース・ロールは変更できません。ただし、Oracle Database Vault以外のロールをOracle Database Vaultで動作するようにすることはできます。
  1. DV_OWNERまたはDV_ADMINロールを付与されているユーザーとしてPDBに接続します。
  2. Oracle Database Vaultで新しいセキュア・アプリケーション・ロールを作成して、そのセキュア・アプリケーション・ロールに既存のロールを付与します。
    たとえば:
    GRANT myExistingDBrole TO myDVrole;
    
  3. この新しいロールに使用するコードを変更します。
    これを実行するには、アプリケーション・コードにDBMS_MACSEC_ROLES.SET_ROLEを使用します。

関連トピック

8.5 セキュア・アプリケーション・ロールの変更

Oracle Database Vaultセキュア・アプリケーション・ロールの定義は変更可能です。

  1. DV_OWNERまたはDV_ADMINロールを付与されているユーザーとしてPDBに接続します。
  2. セキュア・アプリケーション・ロールを検索して、その定義を確認します。
    たとえば:
    SELECT * FROM DBA_DV_ROLE ORDER BY ROLE; 
  3. DBMS_MACADM.UPDATE_ROLE文を実行します。
    たとえば:
    BEGIN
     DBMS_MACADM.UPDATE_ROLE(
      role_name      => 'access_hr_employees', 
      enabled        => DBMS_MACUTL.G_NO, 
      rule_set_name  => 'System Access Controls');
    END;
    /

関連トピック

8.6 Oracle Database Vaultセキュア・アプリケーション・ロールの削除

Oracle Database Vaultセキュア・アプリケーション・ロールは、そのロールをアプリケーションが使用していない場合に削除できます。

  1. DV_OWNERまたはDV_ADMINロールを付与されているユーザーとしてPDBに接続します。
  2. DBA_DV_ROLEデータ・ディクショナリ・ビューを問い合せて、削除するセキュア・アプリケーション・ロールを見つけます。
    たとえば:
    SELECT ROLE FROM DBA_DV_ROLE ORDER BY ROLE;
  3. 削除するセキュア・アプリケーション・ロールを使用している可能性のあるアプリケーションを確認して変更します。
  4. DBMS_MACADM.DELETE_ROLEプロシージャを実行して、ロールを削除します。
    たとえば:
    EXEC DBMS_MACADM.DELETE_ROLE('access_hr_employees');

関連トピック

8.7 Oracle Database Vaultセキュア・アプリケーション・ロールの動作

Oracle Database Vaultセキュア・アプリケーション・ロールのプロセス・フローは、セキュア・アプリケーション・ロールを作成した後に開始されます。

  1. Oracle Database Vault Administrator、またはDBMS_MACADMパッケージのセキュア・アプリケーション・ロール固有のファンクションを使用してロールを作成または更新します。

  2. DBMS_MACSEC_ROLES.SET_ROLEファンクションを使用して、そのロールを呼び出すようにアプリケーションを変更します。

  3. Oracle Database Vaultにより、セキュア・アプリケーション・ロールに関連付けられているルール・セットが評価されます。

    ルール・セットがTrueと評価されると、ロールが現行のセッションに対して有効になります。ルール・セットがFalseと評価されると、ロールは有効になりません。どちらの場合も、Oracle Database Vaultにより、セキュア・アプリケーション・ロールに関連付けられているルール・セットの関連する監査およびカスタム・イベント・ハンドラが処理されます。

8.8 チュートリアル: Database Vaultセキュア・アプリケーション・ロールによるアクセス権限の付与

このチュートリアルでは、作業時間中にユーザーのOE.ORDERS表へのアクセスを制御するセキュア・アプリケーション・ロールを作成する方法を示します。

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

このチュートリアルでは、OEスキーマのORDERS表に対するSELECT文を特定のユーザーに制限します。

さらに、これらのユーザーは、リモート接続からではなく、オフィス内でのみOE.ORDERS表に対してこれらの文を実行できます。これを実行するには、Oracle Database Vaultセキュア・アプリケーション・ロールを作成し、これに関連付けたルール・セットによって実施されるチェックに合格した場合のみ、ユーザーにこのロールが有効化されるようにします。

8.8.2 ステップ1: このチュートリアル用のユーザーの作成

最初に、チュートリアル用のユーザーを作成する必要があります。

  1. DV_ACCTMGRロールを付与されているユーザーとしてPDBにログインします。
  2. 次のユーザー・アカウントを作成します。
    GRANT CREATE SESSION TO eabel IDENTIFIED BY password;
    GRANT CREATE SESSION TO ahutton IDENTIFIED BY password;
    GRANT CREATE SESSION TO ldoran IDENTIFIED BY password;
    

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

8.8.3 ステップ2: OEユーザー・アカウントの有効化

OEスキーマがこのチュートリアル用に使用されます。

  1. DV_ACCTMGRユーザーとしてSQL*Plusに接続します。
  2. OEアカウントのアカウント・ステータスを確認します。
    SELECT USERNAME, ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME = 'OE';
    
  3. OEアカウントがロックされて無効になっている場合、ロックを解除し、新しいパスワードを割り当てます。
    ALTER USER OE ACCOUNT UNLOCK IDENTIFIED BY password;

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

8.8.4 ステップ3: ルール・セットとそのルールの作成

ルール・セットおよびルールは、OE.ORDERS表の順序を変更できるユーザーを制限します。

  1. DV_OWNERロールを付与されたユーザーとして接続します。
  2. 次のルール・セットを作成します。
    BEGIN
     DBMS_MACADM.CREATE_RULE_SET(
      rule_set_name    => 'Can Modify Orders', 
      description      => 'Rule set to control who can modify orders in the OE.ORDERS table', 
      enabled          => DBMS_MACUTL.G_YES,
      eval_options     => DBMS_MACUTL.G_RULESET_EVAL_ALL,
      audit_options    => DBMS_MACUTL.G_RULESET_AUDIT_OFF,
      fail_options     => DBMS_MACUTL.G_RULESET_FAIL_SHOW,
      fail_message     => 'Failure',
      fail_code        => 20461,
      handler_options  => DBMS_MACUTL.G_RULESET_HANDLER_OFF,
      handler          => '',
      is_static        => FALSE,
      scope            => DBMS_MACUTL.G_SCOPE_LOCAL);
    END;
    /
  3. 次のルールを作成します。
    BEGIN
     DBMS_MACADM.CREATE_RULE(
      rule_name  => 'Check Session User', 
      rule_expr  =>'DVF.F$SESSION_USER IN (''EABEL'',''AHUTTON'')');
    END;
    /
  4. Check Session UserルールをCan Modify Ordersルール・セットに追加します。
    BEGIN
     DBMS_MACADM.ADD_RULE_TO_RULE_SET(
      rule_set_name => 'Can Modify Orders', 
      rule_name     => 'Check Session User');
    END;
    /

8.8.5 ステップ4: Database Vaultセキュア・アプリケーション・ロールの作成

Database Vaultセキュア・アプリケーション・ロールは、ルール・セット条件が満たされた場合に、設定されます。

  1. 必要に応じて、DV_OWNERロールを付与されたユーザーとして接続します。
  2. セキュア・アプリケーション・ロールを作成して有効にし、Can Modify Ordersルール・セットに関連付けます。
    BEGIN
     DBMS_MACADM.CREATE_ROLE(
      role_name      => 'ORDERS_MGMT', 
      enabled        => DBMS_MACUTL.G_YES,
      rule_set_name  => 'Can Modify Orders');
    END;
    /

この段階で、Database Vaultセキュア・アプリケーション・ロールとそれに関連付けられたルール・セットが作成されますが、ロールにはまだ権限がありません。

8.8.6 ステップ5: セキュア・アプリケーション・ロールへのSELECT権限の付与

セキュア・アプリケーション・ロールにはSELECT権限を付与する必要があります。

  1. SQL*PlusでユーザーOEとして接続します。
  2. SELECT権限をORDERS_MGMTセキュア・アプリケーション・ロールに付与します。
    GRANT SELECT ON ORDERS TO ORDERS_MGMT;

8.8.7 ステップ6: Database Vaultセキュア・アプリケーション・ロールのテスト

すべてのコンポーネントを準備したら、Database Vaultセキュア・アプリケーション・ロールをテストできます。

  1. ユーザーeabelとして接続します。
  2. ORDERS_MGMTロールを設定します。
    EXEC DBMS_MACSEC_ROLES.SET_ROLE('ORDERS_MGMT');
    

    通常は、このコールをユーザーがログインするアプリケーションに埋め込みます。

  3. OE.ORDERS表から選択します。
    SELECT COUNT(*) FROM OE.ORDERS;
    

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

      COUNT(*)
    ----------
           105
    

    ユーザーeabelは有効なセッション・ユーザーとして構成されているため、OE.ORDERS表から選択できます。ユーザーahuttonが同様にSQL*Plusにログインした場合も、OE.ORDERS表から選択できます。

  4. ユーザーldoranとして接続します。
  5. 次の文を入力します。
    EXEC DBMS_MACSEC_ROLES.SET_ROLE('ORDERS_MGMT');
    SELECT COUNT(*) FROM OE.ORDERS;
    

    ユーザーldoranは有効なユーザーではないため、ORDERS_MGMTロールを有効にすることはできません。したがって、OE.ORDERS表から選択できません。

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

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

  1. DV_OWNERロールを付与されたユーザーとして接続します。
  2. ORDERS_MGMTセキュア・アプリケーション・ロールを削除します。
    EXEC DBMS_MACADM.DELETE_ROLE('ORDERS_MGMT');
  3. Check Session UserルールをCan Modify Ordersルール・セットから削除します。
    BEGIN
     DBMS_MACADM.DELETE_RULE_FROM_RULE_SET(
      rule_set_name => 'Can Modify Orders', 
      rule_name     => 'Check Session User');
    END;
    /
  4. ルールおよびルール・セットを削除します。
    EXEC DBMS_MACADM.DELETE_RULE('Check Session User');
    EXEC DBMS_MACADM.DELETE_RULE_SET('Can Modify Orders');
  5. DV_ACCTMGRロールを付与されているユーザーとして接続します。
  6. ユーザーを削除します。
    DROP USER eabel;
    DROP USER ahutton;
    DROP USER ldoran;
    
  7. 必要がなければ、OEユーザー・アカウントをロックし、無効にします。
    ALTER USER OE ACCOUNT LOCK PASSWORD EXPIRE;

8.9 セキュア・アプリケーション・ロールのパフォーマンスへの影響

システム・パフォーマンスは、Oracle Enterprise Manager Cloud ControlなどのOracle Databaseのツールを使用して確認できます。

他に使用できるツールとして、自動ワークロード・リポジトリ(AWR)およびTKPROFがあります。

8.10 セキュア・アプリケーション・ロールに関連するレポートおよびデータ・ディクショナリ・ビュー

Oracle Enterprise ManagerとOracle Database Vaultを一緒に使用すると、Oracle Database Vaultセキュア・アプリケーション・ロールの分析に役立つレポートおよびデータ・ディクショナリ・ビューが提供されます。

表8-1に、Oracle Database Vaultレポートを示します。

表8-1 セキュア・アプリケーション・ロールに関連するOracle Enterprise Managerレポート

レポート 説明

「セキュア・アプリケーション・ロールの監査」レポート

Oracle Database Vaultセキュア・アプリケーション・ロールを有効にする操作によって生成された監査レコードが表示されます。

このタイプの監査レコードを生成するには、ロールに関連付けられているルール・セットの監査を有効にします。

「セキュア・アプリケーション構成の問題」レポート

存在しないデータベース・ロールや、不完全または無効なルール・セットのあるセキュア・アプリケーション・ロールが表示されます。

「ルール・セット構成の問題」レポート

ルールが定義されていないか、有効ではなく、それらを使用するセキュア・アプリケーション・ロールに影響を与える可能性のあるルール・セットが表示されます。

強力なデータベース・アカウントおよびロールのレポート

強力な権限のあるデータベース・アカウントおよびロールに関する情報が示されます

DBA_DV_ROLEデータ・ディクショナリ・ビューには、権限管理で使用されるOracle Database Vaultセキュア・アプリケーション・ロールが表示されます。