プライマリ・コンテンツに移動
Oracle® Database Vault管理者ガイド
11gリリース2 (11.2)
B56297-10
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

E Oracle Database Vaultのトラブルシューティング

この付録の内容は次のとおりです。

トレース・ファイルを使用したデータベースのイベントの診断

この項の内容は次のとおりです。

トレース・ファイルを使用したOracle Database Vaultイベントの診断について

Oracle Database Vaultデータベース・インスタンスのトレース・ファイルを有効化および確認して、Oracle Database Vaultのデータベース・インスタンスで、サーバーやバックグラウンド・プロセスのイベントを監視することができます。トレース・ファイルを見れば、Oracle Database Vaultのポリシー認可が成功したか失敗したかを確認できます。バグおよびその他の問題が発生したとき、その解決に有効な情報を得ることができます。

Oracle Database Vaultのトレースを設定するには、DV_ADMINロールが必要です。この構成を実行するには、ALTER SESSION SET EVENTSまたはALTER SYSTEM SET EVENTSというSQL文を使用します。


関連項目:

トレース・ファイルの管理の詳細は、『Oracle Database管理者ガイド』を参照してください

Oracle Database Vaultで追跡できるトレース・イベントと追跡できないイベントのタイプ

表E-1に、トレース・ファイルで追跡できるアクティビティのタイプを示します。

表E-1 Oracle Database Vaultトレース・ファイルの内容

Database Vaultの機能 説明

レルムの認可

このトレース・ファイルは、ロールに対するルール・セットとレルム認可を使用して、レルム認可の各ケースを追跡します。このタイプのトレース・ファイルの詳細は、「Oracle Database Vaultトレース・ファイルの例」を参照してください。

ルール・セットの評価

このトレース・ファイルには、レルム認可、コマンド・ルールのCONNECTコマンド・ルール、およびファクタからのルール・セット評価に関する情報が含まれます。

Oracle Data Pumpの認可

このトレース・ファイルには、Database VaultのData Pumpの認可結果と、ユーザー、オブジェクト、SQLテキストに関するその他の情報が含まれます。

Oracle Schedulerジョブの認可

このトレース・ファイルには、Database VaultのOracle Schedulerジョブの認可結果、ジョブ名、ジョブ所有者、現在の文などが含まれます。

オブジェクト権限のバイパス

このトレース・ファイルは、直接の権限付与と、ロールを介した権限付与の両方を追跡します。このタイプのトレースは、必須レルムが有効になっておらず、オブジェクト権限を持つユーザーがレルム保護されたオブジェクトにアクセスできる場合に役に立ちます。

ファクタのロード

このトレース・ファイルは、ロードされた各ファクタの式と値を追跡します。

その他

オブジェクト所有者がバイパスしたレルム保護や、Database Vaultで失敗した操作、成功した操作


Oracle Database Vaultトレース・イベントのレベル

Oracle Database Vaultで使用できるトレース・イベントのレベルは、次のとおりです。

  • 低: Oracle Database Vaultで失敗したすべての認可に関する情報をトレース・ファイルに出力します。このタイプのトレース・ファイルには、レルム認可の失敗、ファクタのロードの失敗、ルール・セット評価の失敗などが記録されます。Oracleデータベースのパフォーマンスに対する影響は小さくなります。

  • 高: 認可の成功と失敗の両方を含むトレース・レコードを出力します。このタイプのトレースは、すべての認可を追跡するので、低レベルのトレースよりオーバーヘッドが大きくなります。また、トレース・ファイルのサイズも通常は大きくなります。

  • 最高: PL/SQLスタックとファンクション・コール・スタック、および高レベルでトレースされる内容(表E-1を参照)をトレース・ファイルに出力します。Oracleデータベースのパフォーマンスに対する影響は最も大きくなります。

Oracle Database Vaultトレース・ファイルを有効にしたときのパフォーマンスへの影響

トレース・ファイルの有効化には注意してください。有効化により、データベース・インスタンス操作のオーバーヘッドが増加し、パフォーマンスが低下する可能性があります。

Oracle Database Vaultトレース・イベントの有効化

この項の内容は次のとおりです。

現在のデータベース・セッションに対するトレース・イベントの有効化

  1. DV_ADMINロールおよびALTER SESSIONシステム権限を付与されているユーザーとして、データベース・インスタンスにログインします。

    次に例を示します。

    sqlplus lbrown_dvowner
    Enter password: password
    Connected.
    
  2. ALTER SESSION SET EVENTS SQL文を入力してトレースを低に設定します。「Oracle Database Vaultトレース・イベントのレベル」を参照してください。

    • 影響が小さい操作の失敗に対してトレースを有効にするには、次のいずれかの文を入力します。

      ALTER SESSION SET EVENTS 'TRACE[DV] DISK=LOW';
      
      ALTER SESSION SET EVENTS '47998 TRACE NAME CONTEXT FOREVER, LEVEL 1';
      
    • 影響が大きい操作の失敗と成功に対してトレースを有効にするには、次のいずれかの文を入力します。

      ALTER SESSION SET EVENTS 'TRACE[DV] DISK=HIGH';
      
      ALTER SESSION SET EVENTS '47998 TRACE NAME CONTEXT FOREVER, LEVEL 3';
      
    • 最も影響が大きいファンクションとPL/SQLコール・スタックを使用する操作の失敗と成功に対してトレースを有効にするには、次のいずれかの文を入力します。

      ALTER SESSION SET EVENTS 'TRACE[DV] DISK=HIGHEST';
      
      ALTER SESSION SET EVENTS '47998 TRACE NAME CONTEXT FOREVER, LEVEL 4';
      

すべてのデータベース・セッションに対するトレース・イベントの有効化

  1. DV_ADMINロールおよびALTER SYSTEMシステム権限を付与されているユーザーとして、データベース・インスタンスにログインします。

    次に例を示します。

    sqlplus lbrown_dvowner
    Enter password: password
    Connected.
    
  2. 「現在のデータベース・セッションに対するトレース・イベントの有効化」の手順2に示されている構文を使用して、ALTER SYSTEM SET EVENTS SQL文を入力します。

    次に例を示します。

    ALTER SYSTEM SET EVENTS 'TRACE[DV] DISK=LOW';
    
  3. データベースを再起動します。

    次に例を示します。

    SHUTDOWN IMMEDIATE
    STARTUP
    

すべてのデータベース・セッションに対してトレース・イベントを有効にするには、init.oraファイルに次の行を追加してデータベースを再起動する方法もあります。

event="47998 trace name context forever, level [trace_level]"

trace_levelを、次のいずれかの値に置き換えます。

  • 1: 最低レベルのトレース

  • 3: 高レベルのトレース

  • 4: 最高レベルのトレース

次に例を示します。

event="47998 trace name context forever, level [1]"

Oracle Database Vaultトレース・ファイル・データの検索

この項の内容は次のとおりです。

Database Vaultトレース・ファイルのディレクトリの場所の検索

トレース・ファイルのディレクトリの完全な場所は、V$DIAG_INFO動的ビューを問い合せて検索することができます。

次に例を示します。

SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Default Trace File';

VALUE
--------------------------------------------------------------------------------
/u01/app/oracle/product/11.2.0.4/log/diag/rdbms/orcl/orcl/trace/orcl_ora_7174.trc

Linuxのgrepコマンドを使用してトレース・ファイルから文字列を検索

トレース・ファイルの問合せ、または処理を行うとき、Linuxのgrepコマンドを使用して文字列を検索することができます。たとえば、レルム認可の失敗を表示するトレース・ファイルを検索するには、次のコマンドを入力します。

grep 'Result=Realm Authorization Failed'  *.trc

ADRコマンド・インタプリタ(ADRCI)ユーティリティを使用してトレース・ファイルを問合せ

トレース・ファイルを問い合せるには、ADRコマンド・インタプリタ(ADRCI)というコマンドライン・ユーティリティを使用する方法もあります。たとえば、ADRCIを使用してトレース・ファイルを検索するには、SHOW TRACEFILEコマンドを入力します。

adrci --To start ACRCI from the command line
adrci> show tracefile

diag/rdbms/orcl/orcl/trace/orcl_m002_14551.trc
diag/rdbms/orcl/orcl/trace/orcl_tmon_13450.trc
diag/rdbms/orcl/orcl/trace/orcl_vktm_963.trc
diag/rdbms/orcl/orcl/trace/alert_orcl.log
...

すべてのトレース・インシデントの数を検索するには、次のようにします。

adrci> show incident

ADR Home = /u01/app/oracle/product/11.2.0.4/log/diag/rdbms/orcl/orcl:
*************************************************************************
234 rows fetched

次のADRCIコマンドは、名前にoraという語が含まれているすべてのトレース・ファイルのリストを返します。

adrci> show tracefile %ora%

/u01/app/oracle/product/11.2.0.4/log/diag/rdbms/orcl/orcl/trace/orcl_ora_18841.trc
/u01/app/oracle/product/11.2.0.4/log/diag/rdbms/orcl/orcl/trace/orcl_ora_12017.trc
/u01/app/oracle/product/11.2.0.4/log/diag/rdbms/orcl/orcl/trace/orcl_ora_19372.trc
/u01/app/oracle/product/11.2.0.4/log/diag/rdbms/orcl/orcl/trace/orcl_ora_12221.trc
/u01/app/oracle/product/11.2.0.4/log/diag/rdbms/orcl/orcl/trace/orcl_ora_1600.trc
...

次のADRCIコマンドは、Realm Authorization Failedというフレーズを含むトレース・ファイルを検索します。

adrci> show trace %trc -xp "[payload like '%Realm Authorization Failed%']"

関連項目:

  • ADRCIユーティリティの詳細は、『Oracle Databaseユーティリティ』を参照してください

  • ADRCIユーティリティでのレポートの表示については、『Oracle Database管理者ガイド』を参照してください


Oracle Database Vaultトレース・ファイルの例

この項では、低、高、最高の3つのレベルすべてについてトレース・ファイルの例を示します。

例E-1は、低レベルのレルム違反を示すトレース・ファイル・データです。

例E-1 低レベルのOracle Database Vaultレルム違反を示すトレース・ファイル

*** 2010-02-05 18:35:31.438
*** SESSION ID:(34.559) 2010-02-05 18:35:31.438
*** CLIENT ID:() 2010-02-05 18:35:31.438
*** SERVICE NAME:(SYS$USERS) 2010-02-05 18:35:31.438
*** MODULE NAME:(SQL*Plus) 2010-02-05 18:35:31.438
*** ACTION NAME:() 2010-02-05 18:35:31.438
 
Result=Realm Authorization Failed
        Realm_Name=realm 3      Required_Auth_Level=0
        Current_User=116
        Object_Owner=U1 Object_Name=T1  Object_Type=TABLE
        SQL_Text=INSERT INTO U1.T1 VALUES(30)
 
Result=Realm Authorization Failed
        Realm_Name=realm 3      Required_Auth_Level=0
        Current_User=116
        Object_Owner=U1 Object_Name=T1  Object_Type=TABLE
        SQL_Text=DELETE FROM U1.T1
 
Result=Realm Authorization Failed
        Realm_Name=realm 3      Required_Auth_Level=0
        Current_User=116
        Object_Owner=U1 Object_Name=T3  Object_Type=TABLE
        SQL_Text=CREATE TABLE U1.T3(C INT)
 
*** 2010-02-05 18:35:34.465
 
Result=Realm Authorization Failed
        Realm_Name=realm 3      Required_Auth_Level=0
        Current_User=116
        Object_Owner=U1 Object_Name=T1  Object_Type=TABLE
        SQL_Text=INSERT INTO U1.T1 VALUES(30)
 
Result=Realm Authorization Failed
        Realm_Name=realm 3      Required_Auth_Level=0
        Current_User=116
        Object_Owner=U1 Object_Name=T1  Object_Type=TABLE
        SQL_Text=DELETE FROM U1.T1

例E-2は、高レベルのトレースを有効にしたときのトレース・ファイルで示されたDatabase Vault権限です。

例E-2 高レベルのトレースを有効にしたOracle Database Vault権限

Result= Realm Authorization Passed
        Reason=Current user is the object owner
        Current_User=70 Command=SELECT
        Object_Owner=LBACSYS    Object_Name=LBAC$AUDIT  Object_Type=TABLE
 
Result= Realm Authorization Passed
        Reason=Current user is the object owner
        Current_User=70 Command=SELECT
        Object_Owner=LBACSYS    Object_Name=LBAC$AUDIT  Object_Type=TABLE
 
Result= Realm Authorization Passed
        Reason=Current user is the object owner
        Current_User=70 Command=SELECT
        Object_Owner=LBACSYS    Object_Name=LBAC$POL    Object_Type=TABLE
 
Result= Realm Authorization Passed
        Reason=Current user is the object owner
        Current_User=70 Command=SELECT
        Object_Owner=LBACSYS    Object_Name=LBAC$USER_LOGON     Object_Type=VIEW
 
……
 
Result= Realm Authorization Passed
        Reason=Current user is the object owner
        Current_User=70 Command=SELECT
        Object_Owner=LBACSYS    Object_Name=LBAC$POL    Object_Type=TABLE
 
Result=Set Factor Value
        Factor_Name=Sensitive_Treatments        Factor_Expression=/SURGERY/PSYCHOLOGICAL
 
Result=Set Factor Value
        Factor_Name=Database_Instance   Factor_Expression=UPPER(SYS_CONTEXT('USERENV','INSTANCE'))      Factor_Value=1
 
Result=Set Factor Value
        Factor_Name=Client_IP   Factor_Expression=UPPER(SYS_CONTEXT('USERENV','IP_ADDRESS'))    Factor_Value=
 
Result=Set Factor Value
        Factor_Name=Authentication_Method       Factor_Expression=UPPER(SYS_CONTEXT('USERENV','AUTHENTICATION_METHOD')) Factor_Value=PASSWORD
……
 
*** ACTION NAME:() 2010-02-05 18:47:19.540
 
Result=Rule Set Evaluation Failed
        Command=SELECT  RuleSet_ID=2    RuleSet_Name=Disabled
        Current_User=SYSTEM 
        Object_Owner=U1 Object_Name=T1  Object_Type=TABLE
        SQL_Text=SELECT * FROM U1.T1
 
Result=Rule Set Evaluation Succeeded
        Command=SELECT  RuleSet_ID=1    RuleSet_Name=Enabled
        Current_User=SYSTEM 
        Object_Owner=U1 Object_Name=T1  Object_Type=TABLE
        SQL_Text=SELECT * FROM U1.T1

例E-3では、最高レベルのトレースを有効にしたときのトレース・ファイルでOracle Schedulerのジョブ認可に関連する最高レベルの違反が示されています。

例E-3 レルム保護されたオブジェクトに対する違反の最高レベルのトレース

------ Call Stack Trace ------
kzvdvechk<-kzvdveqau<-kksfbc<-opiexe<-kpoal8<-opiodr<-ttcpip<-opitsk<-opiino<-opiodr<-opidrv<-sou2o<-opimai_real<-ssthrdmain<-main<-__libc_start_main<-_start
 
Result=Object Privilege check passed
        Current_User=INVOKER2   Used_Role=1
        Object_Owner=SYSTEM     Object_Name=PRODUCT_PRIVS       Object_Type=VIEW
        SQL_Text=SELECT CHAR_VALUE FROM SYSTEM.PRODUCT_PRIVS WHERE (UPPER('SQL*PLUS') LIKE UPPER(PRODUCT)) AND ((USER LIKE USERID) OR (USERID = 'PUBLIC')) AND (UPPER(ATTRIBUTE) = 'ROLES')
*** MODULE NAME:(SQL*Plus) 2010-02-05 18:57:53.973
*** ACTION NAME:() 2010-02-05 18:57:53.973
 
----- Current SQL Statement for this session (sql_id=2sr63rjm45yfh) -----
UPDATE INVOKER1.T1 SET A = 20
----- PL/SQL Stack -----
----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
0x26a00e34         1  anonymous block
0x2495b000       185  package body SYS.DBMS_ISCHED
0x24958fb8       486  package body SYS.DBMS_SCHEDULER
0x247bbb34         1  anonymous block
 
------ Call Stack Trace ------
kzvdvechk<-kzvdveqau<-kksfbc<-opiexe<-opipls<-opiodr<-__PGOSF151_rpidrus<-skgmstack<-rpidru<-rpiswu2<-rpidrv<-psddr0<-psdnal<-pevm_EXECC<-pfrinstr_EXECC<-pfrrun_no_tool<-pfrrun<-plsql_run<-peicnt<-kkxexe<-opiexe<-kpoal8<-opiodr<-kpoodr<-upirtrc<-kpurcsc<-kpuexec
<-OCIStmtExecute<-jslvec_execcb<-jslvswu<-jslve_execute0<-jskaJobRun<-jsiRunJob<-jsaRunJob<-spefcmpa<-spefmccallstd<-pextproc<-__PGOSF495_peftrusted<-__PGOSF522_psdexsp<-rpiswu2<-psdextp<-pefccal<-pefcal<-pevm_FCAL<-pfrinstr_FCAL<-pfrrun_no_tool<-pfrrun<-plsql_run
<-peicnt<-kkxexe<-opiexe<-kpoal8<-opiodr<-ttcpip<-opitsk<-opiino<-opiodr<-opidrv<-sou2o<-opimai_real<-ssthrdmain<-main<-__libc_start_main<-_start
 
Result=Realm Authorization Succeeded
        Realm_Name=jobowner realm       Used_Auth_Level=0
        Current_User=119
        Object_Owner=INVOKER1   Object_Name=T1  Object_Type=TABLE
        SQL_Text=UPDATE INVOKER1.T1 SET A = 20
 
Result=Scheduler Job Authorization Succeeded
        Current_User=JOBOWNER   Logon_User=INVOKER2
        Job_Owner=JOBOWNER      Job_Name=DMLJOB1
        Object_Owner=INVOKER1   Object_Name=T1  Object_Type=TABLE
        SQL_Text=UPDATE INVOKER1.T1 SET A = 20

Oracle Database Vaultトレース・イベントの無効化

この項の内容は次のとおりです。

現在のデータベース・セッションに対するトレース・イベントの無効化

  1. DV_ADMINロールおよびALTER SESSIONシステム権限を付与されているユーザーとして、データベース・インスタンスにログインします。

    次に例を示します。

    sqlplus lbrown_dvowner
    Enter password: password
    Connected.
    
  2. トレースを無効にするには、次のSQL文の両方を入力します。

    ALTER SESSION SET EVENTS 'TRACE[DV] OFF'; 
    ALTER SESSION SET EVENTS '47998 trace name context off';
    

    あるいは、ALTER SYSTEM文を使用する方法もあります。

    ALTER SYSTEM SET EVENTS 'TRACE[DV] OFF'; 
    ALTER SYSTEM SET EVENTS '47998 trace name context off';
    

すべてのデータベース・セッションに対するトレース・イベントの無効化

  1. DV_ADMINロールおよびALTER SYSTEMシステム権限を付与されているユーザーとして、データベース・インスタンスにログインします。

    次に例を示します。

    sqlplus lbrown_dvowner
    Enter password: password
    Connected.
    
  2. 「現在のデータベース・セッションに対するトレース・イベントの無効化」の手順2に示されている構文を使用して、ALTER SYSTEM SET EVENTS SQL文を入力します。

    次に例を示します。

    ALTER SYSTEM SET EVENTS 'TRACE[DV] OFF'; 
    
  3. データベースを再起動します。

    次に例を示します。

    SHUTDOWN IMMEDIATE
    STARTUP
    

すべてのデータベース・セッションに対してトレース・イベントを無効にするには、init.oraファイルに次の行を追加してデータベースを再起動する方法もあります。

event="47998 trace name context off"

init.oraファイルで、47998行目との競合がないようにしてください。event="47998 trace name context forever, level [1]"などです。

一般的な診断のヒント

レルム、ファクタおよびルール・セットの問題を診断するには、次の一般的なヒントに従ってください。

  • レルム保護の場合、コマンドに作用する基礎となるシステム権限またはオブジェクト権限をユーザーが保持している(直接またはロールを介して付与されている)ことを確認します。

  • レルム認可が機能しない場合は、アカウントのロールが正しく設定されていることを確認します。

  • ファクタおよびルール・セットで使用されるPL/SQL式の場合、これらの式で使用されるPL/SQLパッケージ・ファンクションに対するEXECUTE権限をアカウントに直接付与し、結果が正しいと思われるかどうかを判断します。

  • 一般に、監査レポートを使用して問題を診断します。詳細は、「Oracle Database Vaultの監査レポート」を参照してください。

Oracle Database Vaultコンポーネントにかかわる構成の問題

レルム、コマンド・ルール、ファクタ、ルール・セットまたはセキュア・アプリケーション・ロールの構成にかかわる問題が疑われる場合、適切な構成レポートを実行できます。詳細は、次の各項を参照してください。

これらのレポートの実行方法は、「Oracle Database Vaultレポートの実行方法」を参照してください。