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_AUTH 、DDL_AUTH 、JOB_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_OWNER
、DV_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
ロールを持つユーザーとして、次の手順を実行します:
- プラガブル・データベースで
C##JSMITH
として接続します:connect c##jsmith@pdb_name
- シミュレーション・モードで必須レルムを作成します:
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; /
- レルムがシミュレーション・モードであることを確認します:
SELECT ENABLED FROM DBA_DV_REALM WHERE NAME = 'Protect HR tables';
次のように表示されます:ENABLED __________ S
GKRAMER
として、HR.EMPLOYEES
表の問合せを実行します:connect gkramer@pdb_name SELECT COUNT(*) FROM HR.EMPLOYEES;
- アクティビティが完了したら、シミュレーション・ログを確認して、強制モードだったときにレルムによって何が防止されたかを確認する必要があります:
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
ノート:
シミュレーション・モードでは、レルムまたはコマンド・ルールによって認可されるアクティビティのレコードは作成されません。拒否されたアクティビティのみがシミュレーション・ログに記録されます。 - シミュレーションの実行が完了した後、Oracleでは、シミュレーション・ログ表からすべての行を削除して、アクションを再度実行しても混乱しないようにすることをお薦めします。
DV_OWNER
ロールを持つユーザーとして、次のコマンドを実行します:connect c##jsmith@pdb_name DELETE FROM DVSYS.SIMULATION_LOG$; COMMIT;
- レルムを強制モードに戻します:
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; /
- レルムが強制モードであることを確認します:
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
システム権限の両方を持つデータベース・ユーザーが作成されています。
トレースを有効にするには:
- プラガブル・データベースで
C##JSMITH
として接続します:connect c##jsmith@pdb_name
- トレースを有効にします:
ALTER SYSTEM SET EVENTS 'TRACE[DV] DISK=HIGHEST';
- 失敗するとトレース・ログに表示されるコマンドを実行します:
- プラガブル・データベースで
GKRAMER
として接続します:connect gkramer@pdb_name
- 失敗するコマンドを実行します:
SELECT COUNT(*) FROM HR.EMPLOYEES;
Oracleエラー・メッセージ
「ORA-01031: 権限が不足しています」
が表示されます。
- プラガブル・データベースで
- データベース・サーバーのトレース・ログを表示して、トレースが有効になっていることを確認します。
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
- 終了したら、トレース・イベントを無効にし、必要に応じて
DV_ADMINロール
を取り消します。この例では、
C##JSMITH
からDV_ADMIN
を取り消しません。- プラガブル・データベースで
C##JSMITH
として接続します:connect c##jsmith@pdb_name
- トレースを無効にします:
ALTER SYSTEM SET EVENTS 'TRACE[DV] OFF';
- プラガブル・データベースで
この項のアドバイスで問題の解決に役立たない場合は、サポート・リクエストを送信し、環境およびDatabase Vault設定に関する関連情報を含めます。MOS 1352556.1 Database Vaultレルム、コマンド・ルールおよびルール・セットをリストするスクリプトの結果をアップロードすると、サポート・エンジニアが問題をより効果的に識別するのに役立ちます。