12 エラーのトラブルシューティングおよびトレース

場合によっては、アプリケーション・オブジェクト、データベース・システム権限またはロール、あるいはその他のアクティビティに対する認可または認可の欠如をトラブルシューティングする必要があります。次に、問題の特定に役立つ手順を示します。

12.1 最も一般的なDatabase Vaultビュー

Oracle Database Vaultに関連付けられたビューをナビゲートする方法を理解することが重要です。

DV_ADMINロールを持つユーザーは、この問合せを使用したビューについて理解している必要があります:
connect c##jsmith@pdb_name

SELECT VIEW_NAME
    FROM DBA_VIEWS
WHERE VIEW_NAME LIKE 'DBA_DV_%'
ORDER BY 1;

最も一般的なビューは次のとおりです:

表12-1 Database Vaultの一般的なビュー

ビュー名 用途
DBA_DV_%_AUTH 名前にAUTHを含むビューを検索します。これらのビューには、PROXY_AUTHDDL_AUTHJOB_AUTHなどの様々なアクティビティに対して認可されているユーザーがリストされます。
DBA_DV_COMMAND_RULE 作成されたコマンド・ルールをリストします。
DBA_DV_REALM 作成されたレルムをリストします。REALM_TYPE列に注意してください。REGULARでは、レルムで保護されたデータにアクセスするための直接のオブジェクト権限が考慮されますが、MANDATORYでは考慮されません。必須では、ユーザーはレルム内の認可された参加者/所有者である必要があります。
DBA_DV_REALM_AUTH 作成されたレルムへの認可をリストします。AUTH_RULE_SET_NAME (認可を使用する制限)およびAUTH_OPTIONS (所有者と参加者)に注意してください。
DBA_DV_REALM_OBJECT レルムで保護されているオブジェクトをリストします。%は、オブジェクト名やまだ作成されていないタイプを含め、すべてを意味します。
DBA_DV_RULE ルールおよびルール式をリストします。
DBA_DV_RULE_SET ルール・セット、ステータス、およびユーザーに失敗メッセージが返されるかどうかをリストします。また、静的か動的か(IS_STATIC)、およびすべてのルールがtrueである必要があるか1つのみがtrueである必要があるか(EVAL_OPTIONS_MEANING)もリストします。
DBA_DV_RULE_SET_RULE ルール・セットとそれに関連付けられたルールをリストします。
DBA_DV_SIMULATION_LOG コマンド・ルールまたはレルムが強制モードの場合に、コマンド・ルールまたはレルムに違反したアクションをリストします。
DBA_DV_STATUS Oracle Database Vaultの構成と有効化ステータス、およびOperations Controlが使用中かどうか(DV_APP_PROTECTION)をリストします。
DBA_ROLES データベースのロールをリストします。Oracle Database Vaultは、職務の分離を強制するのに役立つ12個以上のロールを作成します。DV_%ロールを検索します。
デフォルト以外のレルム、保護するオブジェクトおよび認可されたユーザーのリストを確認するには、DV_OWNERDV_ADMINまたはDV_SECANALYSTロールを持つユーザーとして次の問合せを実行します:
connect c##jsmith@pdb_name

SELECT * FROM (
    SELECT REALM_NAME, 'PROTECTED OBJECTS' COL2, OWNER COL3, OBJECT_TYPE COL4 ,OBJECT_NAME COL5
    FROM DVSYS.DBA_DV_REALM_OBJECT
    UNION
    SELECT REALM_NAME, 'AUTHORIZATIONS' COL2, GRANTEE COL3, AUTH_RULE_SET_NAME COL4, AUTH_OPTIONS COL5
    FROM DVSYS.DBA_DV_REALM_AUTH)
    WHERE REALM_NAME IN (SELECT NAME FROM DBA_DV_REALM WHERE ORACLE_SUPPLIED = 'NO')
    ORDER BY REALM_NAME ASC, COL2 DESC;

このクイック・スタート・ガイドの例に従うと、次のような結果になります:

REALM_NAME            COL2                 COL3    COL4     COL5
_____________________ ____________________ _______ ________ ________
Protect HR indexes    protected objects    HR      INDEX    %
Protect HR indexes    authorizations       HR               Owner
Protect HR tables     protected objects    HR      TABLE    %
Protect HR tables     protected objects    HR      VIEW     %
Protect HR tables     authorizations       HR               Owner

ユーザー定義のDatabase Vaultコマンド・ルールおよびそれらの関連ルール・セットおよびルールを表示するには、次のような問合せを使用します:

SELECT A.COMMAND, A.OBJECT_OWNER, A.OBJECT_NAME, B.RULE_SET_NAME, B.RULE_NAME
    FROM DVSYS.DBA_DV_COMMAND_RULE A
        , DVSYS.DBA_DV_RULE_SET_RULE B
    WHERE A.RULE_SET_NAME = B.RULE_SET_NAME
        AND A.ORACLE_SUPPLIED != 'YES'
ORDER BY 1,2,3;

このクイック・スタート・ガイドの例に従うと、次のような結果になります:

COMMAND    OBJECT_OWNER OBJECT_NAME RULE_SET_NAME   RULE_NAME
__________ ____________ ___________ ________________ __________________
DROP TABLE HR           %           Trusted Rule Set Trusted IP Address

Oracle Database Vault情報を収集するスクリプトの詳細は、My Oracle SupportのドキュメントID 1352556.1、Database Vaultレルム、コマンド・ルールおよびルール・セットをリストするスクリプトを参照してください。

12.2 レルムおよびコマンド・ルールの強制シミュレーション

Oracle Database Vaultのシミュレーション・モードは、レルムおよびコマンド・ルールのトラブルシューティングにも使用できます。

特にプロジェクトの最初に、カスタムDatabase Vaultレルムまたはコマンド・ルールをすぐに強制しない場合があります。Oracle Database Vaultにはシミュレーション・モードがあります。ここでは、強制アクティビティはログに記録されますが、強制されないため、適切なデータベース・ユーザーがレルムまたはコマンド・ルールのルール内の正しいロジック(ルール・セットによって強制される)に対して認可されていることを確認できます。

たとえば、作成したレルムを保護対象の表に変更し、アクションを実行できるようにする場合は、レルムをシミュレーション・モードにするように更新できます。DV_OWNERまたはDV_ADMINロールを持つユーザーとして、次の手順を実行します:

  1. プラガブル・データベースでC##JSMITHとして接続します:
    connect c##jsmith@pdb_name
  2. シミュレーション・モードで必須レルムを作成します:
    BEGIN
        DVSYS.DBMS_MACADM.UPDATE_REALM(   
            realm_name     => 'Protect HR tables' 
            ,description   => 'Mandatory realm to protect HR tables' 
            ,enabled       => dbms_macutl.g_simulation 
            ,audit_options => null 
            ,realm_type    => dbms_macadm.mandatory_realm);
    END;
    /
  3. レルムがシミュレーション・モードであることを確認します:
    SELECT ENABLED FROM DBA_DV_REALM WHERE NAME = 'Protect HR tables';
    次のように表示されます:
    ENABLED
    __________
    S
  4. GKRAMERとして、HR.EMPLOYEES表の問合せを実行します:
    connect gkramer@pdb_name
    
    SELECT COUNT(*) FROM HR.EMPLOYEES;
  5. アクティビティが完了したら、シミュレーション・ログを確認して、強制モードだったときにレルムによって何が防止されたかを確認する必要があります:
    connect c##jsmith@pdb_name
    
    SELECT USERNAME,COMMAND, VIOLATION_TYPE, REALM_NAME, RETURNCODE, SQLTEXT FROM DBA_DV_SIMULATION_LOG;
    次の出力が表示されます。
    USERNAME COMMAND VIOLATION_TYPE  REALM_NAME         RETURNCODE SQLTEXT                   
    ________ _______ _______________ __________________ __________ _________________________________
    GKRAMER  SELECT  Realm Violation Protect HR tables  1031       SELECT COUNT(*) FROM HR.EMPLOYEES

    ノート:

    シミュレーション・モードでは、レルムまたはコマンド・ルールによって認可されるアクティビティのレコードは作成されません。拒否されたアクティビティのみがシミュレーション・ログに記録されます。
  6. シミュレーションの実行が完了した後、Oracleでは、シミュレーション・ログ表からすべての行を削除して、アクションを再度実行しても混乱しないようにすることをお薦めします。DV_OWNERロールを持つユーザーとして、次のコマンドを実行します:
    connect c##jsmith@pdb_name
    
    DELETE FROM DVSYS.SIMULATION_LOG$;
    COMMIT;
  7. レルムを強制モードに戻します:
    BEGIN
        DVSYS.DBMS_MACADM.UPDATE_REALM(   
            realm_name     => 'Protect HR tables' 
            ,description   => 'Mandatory realm to protect HR tables' 
            ,enabled       => dbms_macutl.g_yes 
            ,audit_options => null 
            ,realm_type    => dbms_macadm.mandatory_realm);
    END;
    /
  8. レルムが強制モードであることを確認します:
    SELECT ENABLED FROM DBA_DV_REALM WHERE NAME = 'Protect HR tables';
    次のように表示されます:
    ENABLED
    __________
    Y

12.3 Database Vaultアクティビティのトレース

SQLコマンドがOracle Database Vaultによってブロックされる理由がわからない場合は、トレースを有効にできます。

トレース・ファイルは、他のデータベース操作のトレースと同じように、データベース・サーバーの診断ディレクトリに作成されます。Oracle Database Vaultトレースは、コンテナ・データベースまたは特定のプラガブル・データベースでセッション全体またはシステム全体で有効になります。

トレースを有効にするには、次の権限が必要です:

  • Database VaultロールDV_OWNERまたはDV_ADMIN
  • システム権限ALTER SESSIONまたはALTER SYSTEM

このガイドの例に従っている場合、DBAロールを持つことによって、DV_ADMINロールとALTER SYSTEMシステム権限の両方を持つデータベース・ユーザーが作成されています。

トレースを有効にするには:

  1. プラガブル・データベースでC##JSMITHとして接続します:
    connect c##jsmith@pdb_name
  2. トレースを有効にします:
    ALTER SYSTEM SET EVENTS 'TRACE[DV] DISK=HIGHEST';
  3. 失敗するとトレース・ログに表示されるコマンドを実行します:
    1. プラガブル・データベースでGKRAMERとして接続します:
      connect gkramer@pdb_name
    2. 失敗するコマンドを実行します:
      SELECT COUNT(*) FROM HR.EMPLOYEES;

      Oracleエラー・メッセージ「ORA-01031: 権限が不足しています」が表示されます。

  4. データベース・サーバーのトレース・ログを表示して、トレースが有効になっていることを確認します。

    Oracle DatabaseでOracleオペレーティング・システム・ユーザーとして、次を実行します:

    cd $ORACLE_BASE/diag
    
    find . -type f -name "*_QS_DV_trace.trc"
    
    ./rdbms/free/FREE/trace/FREE_ora_225318_QS_DV_trace.trc
    
    vi ./rdbms/free/FREE/trace/FREE_ora_225318_QS_DV_trace.trc

    トレース・ファイルには、コマンドの結果と、オブジェクトを保護している特定のレルムが表示されます。Protect HR Tablesは、HR.EMPLOYEES表を保護するレルムです:

    Result=Realm Authorization Failed
    Realm_Name=Protect HR tables     Required_Auth_Level=0
    Current_User=141
    Object_Owner=HR     Object_Name=EMPLOYEES     Object_Type=TABLE
    SQL_Text=select count(*) from hr.employees
  5. 終了したら、トレース・イベントを無効にし、必要に応じてDV_ADMINロールを取り消します。

    この例では、C##JSMITHからDV_ADMINを取り消しません。

    1. プラガブル・データベースでC##JSMITHとして接続します:
      connect c##jsmith@pdb_name
    2. トレースを無効にします:
      ALTER SYSTEM SET EVENTS 'TRACE[DV] OFF';

この項のアドバイスで問題の解決に役立たない場合は、サポート・リクエストを送信し、環境およびDatabase Vault設定に関する関連情報を含めます。MOS 1352556.1 Database Vaultレルム、コマンド・ルールおよびルール・セットをリストするスクリプトの結果をアップロードすると、サポート・エンジニアが問題をより効果的に識別するのに役立ちます。