6 統合監査ポリシーの作成および監査レコードへのアクセス

Oracle Database Vault 23aiでは、統合監査証跡は保護され、適切なOracle Database Vault認可が指定されていないかぎり、アクセスできません。この保護は、SYSSYSTEMなどの特権ユーザー、DBAロールを持つユーザーおよびAUDIT_VIEWERまたはAUDIT_ADMINロールを持つユーザーにまで及びます。

Oracle Database 23aiでこのタスクを実行するには、次の手順を実行します:

  1. AUDIT_ADMINロールWITH ADMIN OPTIONを付与します
  2. DV_OWNERロールを使用して、ユーザーのAUDIT_ADMINを認可します

職務の分離を強制しているため、この新しいデータベース・ユーザーを作成するには、2つの異なるデータベース・ユーザーを使用します。例:

AUDIT_ADMINロールWITH ADMIN OPTIONの付与および認可

  1. C##JSMITHとして接続します:
    connect c##jsmith
  2. AUDIT_ADMINロールWITH ADMIN OPTIONC##CMACKに付与します:
    GRANT AUDIT_ADMIN TO C##CMACK WITH ADMIN OPTION CONTAINER=ALL;

    C##JSMITHには適切なDV_ACCTMGRロールとAUDIT_ADMINロールがあり、AUDIT_ADMINWITH ADMIN OPTIONが付与されているため、単一のデータベース・ユーザーが2つのステップを完了できます。

    ただし、C##CMACKAUDIT_ADMINロールの使用を認可するには、DV_ADMINロールを持つユーザーが認可を実行する必要があります。これにより、監査データの表示や管理など、高い権限を持つロールを持つデータベース・ユーザーは、明示的な認可がなければは実行できません。

  3. C##JSMITHC##CMACKの両方を使用して、UNIFIED_AUDIT_TRAILデータ・ディクショナリ・ビューを問い合せようとします:
    connect c##jsmith@pdb_name
    
    SELECT COUNT(*) FROM UNIFIED_AUDIT_TRAIL;
    connect c##cmack@pdb_name
    
    SELECT COUNT(*) FROM UNIFIED_AUDIT_TRAIL;

    Oracle Database 23aiでは、両方のユーザーに予想される結果として、「ORA-01031: 権限が不足しています」が表示されます。

  4. コンテナ・データベースおよび各プラガブル・データベースでAUDIT_ADMINロールを使用するようにC##CMACKを認可します:
    connect c##jsmith
    
    EXEC DBMS_MACADM.AUTHORIZE_AUDIT_ADMIN('C##CMACK');
    connect c##jsmith@pdb_name
    
    EXEC DBMS_MACADM.AUTHORIZE_AUDIT_ADMIN('C##CMACK');

    C##CMACKでは、コンテナ・データベースと各プラガブル・データベースの両方で統合監査操作を問い合せて管理できるようになりました。ただし、C##JSMITHはこれを実行することはできません。

    注意:

    C##JSMITHは、自分自身にAUTHORIZE_AUDIT_ADMINに対する認可を付与できます。これは、最小限の職務分離を伴う単純な例です。自分自身を認可することからC##JSMITHを完全に保護するには、ユーザーにAUDIT_ADMINロールとDV_ADMINロールの両方を付与しないでください。リスクを最小限に抑え、職務の分離を強制するには、AUDIT_ADMINロールを付与する別のユーザーを指定します。
  5. C##CMACKとして、統合監査操作を問い合せて認可を確認します:
    connect c##cmack@pdb_name
    
    SELECT COUNT(*) FROM UNIFIED_AUDIT_TRAIL;

    統合監査証跡の数が表示されます。

監査ポリシーの作成

  1. C##CMACKとして接続します:
    connect c##cmack@pdb_name
  2. 次の監査ポリシーを作成します:
    CREATE AUDIT POLICY aud_protect_hr_tables
    ACTIONS COMPONENT=DV REALM VIOLATION ON "Protect HR tables";
    AUDIT policy aud_protect_hr_tables;
    CREATE AUDIT POLICY aud_protect_hr_indexes
    ACTIONS COMPONENT=DV REALM VIOLATION ON "Protect HR indexes";
    AUDIT policy aud_protect_hr_indexes;
    CREATE AUDIT POLICY aud_protect_rule_set_trs
    ACTIONS COMPONENT=DV RULE SET ON "Trusted Rule Set";
    AUDIT policy aud_protect_rule_set_trs;
  3. 統合監査ポリシーが存在し、有効になっていることを確認します:
    SELECT POLICY_NAME
        FROM AUDIT_UNIFIED_ENABLED_POLICIES
    WHERE POLICY_NAME LIKE 'AUD%'
    ORDER BY 1;
    出力は次のようになります。
    POLICY_NAME
    _________________________________
    AUD_PROTECT_HR_INDEXES
    AUD_PROTECT_HR_TABLES
    AUD_PROTECT_RULE_SET_TRS
  4. 監査イベントを生成するには、次の各ユーザーとしてHR.EMPLOYEES表を問い合せます:
    • SYS
    • SYSTEM
    • C##DVOWNER
    • C##DVACCTMGR
    • C##JSMITH
    • C##CMACK
    • GKRAMER
    • HR
    1. <user>として接続します:
      connect <user>
    2. 次のコマンドを実行します。
      SELECT COUNT(*) FROM HR.EMPLOYEES;
      CREATE TABLE HR.EMP2 AS SELECT * FROM HR.EMPLOYEES;
      CREATE INDEX HR.TEST_IDX ON HR.EMP2(HIRE_DATE,LAST_NAME);
      DROP INDEX HR.TEST_IDX;
      DROP TABLE HR.EMP2;
  5. C##CMACKとして、統合監査ビューを問い合せてDatabase Vault関連のレコードを識別し、結果を次の表と比較します:
    SELECT EVENT_TIMESTAMP, DBUSERNAME, OBJECT_SCHEMA, OBJECT_NAME, SQL_TEXT, RETURN_CODE
        FROM UNIFIED_AUDIT_TRAIL
    WHERE AUDIT_TYPE = 'Database Vault'
        AND OBJECT-SCHEMA = 'HR';
    コマンド SYS SYSTEM C##DVOWNER C##DVACCTMGR C##JSMITH C##CMACK GKRAMER HR
    SELECT COUNT(*) FROM HR.EMPLOYEES; ORA-01031: 権限が不足しています ORA-01031: 権限が不足しています ORA-00942: 表またはビューが存在しません ORA-00942: 表またはビューが存在しません ORA-01031: 権限が不足しています ORA-41900: "HR"."EMPLOYEES"に対してREAD権限がありません ORA-01031: 権限が不足しています 成功
    CREATE TABLE HR.EMP2 AS SELECT * FROM HR.EMPLOYEES; ORA-01031: 権限が不足しています ORA-01031: 権限が不足しています ORA-00942: 表またはビューが存在しません ORA-00942: 表またはビューが存在しません ORA-01031: 権限が不足しています ORA-41900: "HR"."EMPLOYEES"に対してREAD権限がありません ORA-01031: 権限が不足しています 成功
    CREATE INDEX HR.TEST_IDX ON HR.EMP2(HIRE_DATE,LAST_NAME); ORA-47401: CREATE INDEX(HR.TEST_IDXに対する)のレルム違反です ORA-47401: CREATE INDEX(HR.TEST_IDXに対する)のレルム違反です ORA-00942: 表またはビューが存在しません ORA-00942: 表またはビューが存在しません ORA-47401: CREATE INDEX(HR.TEST_IDXに対する)のレルム違反です ORA-41900: "HR"."EMPLOYEES"に対してREAD権限がありません ORA-47415: DDLに対するOracle Database Vault認可が不十分です 成功
    DROP INDEX HR.TEST_IDX; ORA-01418: 指定された索引は存在しません。 ORA-01418: 指定された索引は存在しません。 ORA-01418: 指定された索引は存在しません。 ORA-01418: 指定された索引は存在しません。 ORA-01418: 指定された索引は存在しません。 ORA-01418: 指定された索引は存在しません。 ORA-01418: 指定された索引は存在しません。 成功
    DROP TABLE HR.EMP2; ORA-47401: CREATE INDEX(HR.TEST_IDXに対する)のレルム違反です ORA-47401: CREATE INDEX(HR.TEST_IDXに対する)のレルム違反です ORA-47401: CREATE INDEX(HR.TEST_IDXに対する)のレルム違反です ORA-47401: CREATE INDEX(HR.TEST_IDXに対する)のレルム違反です ORA-47401: CREATE INDEX(HR.TEST_IDXに対する)のレルム違反です ORA-47401: CREATE INDEX(HR.TEST_IDXに対する)のレルム違反です ORA-47401: CREATE INDEX(HR.TEST_IDXに対する)のレルム違反です ORA-47306: 20000: アクセスがブロックされました。セキュリティ・チームに確認してください