ヘッダーをスキップ

Oracle Database セキュリティ・ガイド
10gリリース2(10.2)

B19269-04
目次
目次
索引
索引

戻る 次へ

12 監査の構成と管理

監査は常にアカウンタビリティに関連しており、データベースに格納されている情報のプライバシを保護および保持するためにたびたび実行されます。プライバシのポリシーと実施に対する関心は、ビジネスおよびインターネットにおけるデータベースのユビキタス使用とともに確実に高まりつつあります。Oracle Databaseには豊富な監査機能が用意されており、システム管理者は、保護の強化、不審なアクティビティの早期検出、および適切に調整されたセキュリティ応答をすぐに実装できます。

Oracle Databaseで使用可能な監査のタイプについては、第8章「データベース監査: セキュリティに関する考慮点」を参照してください。

次の各項では、必要な監査のタイプの選択方法、その監査の管理方法、および取得した情報の使用方法について説明します。

デフォルトで監査されるアクション

データベース監査が有効かどうかにかかわらず、Oracle Databaseは常にデータベースに関連した特定の操作を監査し、オペレーティング・システム監査ファイルに書き込みます。これは必須監査と呼ばれ、次のような操作が含まれます。

監査のガイドライン

Oracle Database 10gでは、データベースの監査証跡または使用しているオペレーティング・システムの監査証跡(そのオペレーティング・システムが監査証跡を受信できる場合)に監査レコードを送信できます。また、データベース監査レコードは、XML形式でオペレーティング・システム・ファイルに書き込むこともできます。たとえば、データベース管理者の監査証跡は、通常、オペレーティング・システムの保護位置に書き込まれます。監査証跡をオペレーティング・システムに書き込むと、そのオペレーティング・システムのroot権限を持つ監査人は、自身のアクションに対して責任があるすべての(ルート・アクセス権のない)DBAを掌握できます。このオプションを様々な監査オプション、カスタマイズ可能なトリガーまたはストアド・プロシージャに追加すると、特定のビジネス・ニーズに適した監査体系を実装できます。

ここでは、監査のガイドラインについて説明します。この項の内容は、次のとおりです。

監査済情報の管理しやすい状態での維持

監査は比較的低コストですが、監査するイベントの数はできるだけ制限する必要があります。この制限によって、監査対象の文を実行したときにパフォーマンスの影響が最小限に抑えられ、監査証跡のサイズが最小限になるため、分析と理解が容易になります。

監査方針を企画する際は、次の一般的なガイドラインに従ってください。

通常のデータベース・アクティビティの監査

監査目的が特定のデータベース・アクティビティに関する履歴情報を収集することにある場合は、次のガイドラインに従ってください。

疑わしいデータベース・アクティビティの監査

監査の目的が疑わしいデータベース・アクティビティを監視することにある場合は、次のガイドラインに従ってください。

管理ユーザーの監査

SYSで接続したユーザー(SYSDBAまたはSYSOPERで接続したすべてのユーザーを含む)のセッションは、完全に監査できます。AUDIT_SYS_OPERATIONS初期化パラメータを使用して、これらのユーザーを監査するかどうかを指定します。たとえば、次の設定では、SYSを監査対象として指定しています。

AUDIT_SYS_OPERATIONS = TRUE

デフォルト値であるFALSEの場合、SYSの監査は使用禁止になります。

SYSに関するすべての監査レコードは、SYS.AUD$DBA_AUDIT_TRAILでも参照可能)ではなく、監査証跡を含むオペレーティング・システム・ファイルに書き込まれます。

SYSが発行したすべてのSQL文が、AUDIT_TRAIL初期化パラメータの設定に関係なく無差別に監査されます。

次のSYSセッションを考えてみます。

CONNECT / AS SYSDBA;
ALTER SYSTEM FLUSH SHARED_POOL;
UPDATE salary SET base=1000 WHERE name='myname';

SYSの監査が使用可能になっている場合は、ALTER SYSTEM文とUPDATE文の両方がオペレーティング・システム監査ファイルに次のように表示されます。

Thu Jan 24 12:58:00 2002
ACTION: 'CONNECT'
DATABASE USER: '/'
OSPRIV: SYSDBA
CLIENT USER: jeff
CLIENT TERMINAL: pts/2
STATUS: 0

Thu Jan 24 12:58:00 2002
ACTION: 'alter system flush shared_pool'
DATABASE USER: ''
OSPRIV: SYSDBA
CLIENT USER: jeff
CLIENT TERMINAL: pts/2
STATUS: 0

Thu Jan 24 12:58:00 2002
ACTION: 'update salary set base=1000 where name='myname''
DATABASE USER: ''
OSPRIV: SYSDBA
CLIENT USER: jeff
CLIENT TERMINAL: pts/2
STATUS: 0

SYSDBAで接続したユーザーはスーパーユーザー権限を使用できるため、DBAにはこの接続を必要な場合にのみ使用することをお薦めします。日常的なメンテナンス・アクティビティは通常、DBAロールを持つ標準のデータベース・ユーザーであるDBAか、組織でカスタマイズされたDBAロール(mydbajr_dbaなど)を持つDBAが実行できます。

トリガーの使用

トリガーを使用すると、監査レコードに自動的に含まれない追加のカスタマイズ情報を記録して、独自の監査条件および監査レコードの内容をカスタマイズできます。たとえば、EMP表に、従業員の給与が10%を超えて増加するたびに監査レコードを生成するトリガーを定義するとします。これには、SALARYの昇給前および昇給後の値などの情報を選択して含めることができます。

CREATE TRIGGER audit_emp_salaries
AFTER INSERT OR DELETE OR UPDATE ON employee_salaries
for each row
begin
if (:new.salary> :old.salary * 1.10)
      then
      insert into emp_salary_audit values (
      :employee_no,
      :old.salary,
      :new.salary,
      user,
      sysdate);
      endif;
end;

さらに、イベント・トリガーを使用して、特定のユーザーのログイン時に監査オプションを使用可能にし、そのユーザーのログオフ時に使用禁止にすることもできます。

ただし、Oracleのトリガーでは、INSERTUPDATEDELETEなどのDML処理の監視は容易ですが、SELECTで監視を行うとコストがかかり、不明確になる場合があります。トリガーでは、問合せからの結果セットおよび実行された文を獲得することはできません。また、ユーザーは単に監査証跡に監査レコードを挿入することはできますが、独自の警告アクションを定義することはできません。

これらの機能については、ファイングレイン監査を使用してください。ファイングレイン監査では、データ・アクセス権の不正な使用を管理者にアクティブに警告するイベント・ハンドラの他に、詳細な監査を行うための主要な条件の定義をサポートする、拡張可能な監査メカニズムが提供されています。詳細は、「ファイングレイン監査」を参照してください。

データベースまたはオペレーティング・システム監査証跡の使用の決定

すべてのOracleデータベースのデータ・ディクショナリには、SYS.AUD$という名前の表があります。通常、これをデータベースの監査証跡と呼びます。構成の選択内容に応じて、この表は従来のSYSTEM表領域内のSYSスキーマなど、別のスキーマに常駐できます。たとえば、Oracle Label Securityが有効な場合、AUD$表はSYSTEMスキーマに移動され、SYS.AUD$SYSTEM.AUD$のシノニムになります。データベース監査証跡はDBA_AUDIT_TRAILとして参照可能で、そのエントリはデータベースの文、権限またはスキーマ・オブジェクトの監査によって生成されます。

必要な場合は、データベース監査情報をオペレーティング・システム・ファイルに格納するように選択できます。オペレーティング・システムの監査機能により、Oracleも書込み可能なファイルに監査レコードが書き込まれる場合、データベース監査エントリをこのファイルに書き込むように指定できます。たとえば、Windowsオペレーティング・システムでは、Oracleが監査レコードをアプリケーションのイベント・ログ(イベント・ビューアで参照可能)にイベントとして書き込むことができます。

データベース監査レコードの格納に、データベース監査証跡またはオペレーティング・システム監査証跡を使用する場合のメリットとデメリットを考えてみます。

データベース監査証跡を使用する利点は、次のとおりです。

オペレーティング・システム監査証跡を使用する利点は、次のとおりです。

監査証跡に記録される情報

Oracle Databaseは、データベース監査証跡またはオペレーティング・システム・ファイル、あるいはその両方にレコードを書き込むことができます。この項では、監査証跡に含まれる情報について説明します。

データベース監査証跡の内容

データベース監査証跡は、各Oracle Databaseのデータ・ディクショナリのSYSスキーマにあるSYS.AUD$という名前の単一の表です。この表の情報を使用しやすくするため、DBA_AUDIT_TRAILなど、複数の事前定義済のビューが提供されています。

監査対象のイベントと設定されている監査オプションに応じて、監査証跡には様々な種類の情報が記録されます。次の項の部分的なリストには、監査証跡に常に記録される列が示されています。これらの列が表すデータが使用可能な場合は、対応する列にそのデータが移入されます(特定の列については、監査レコード内の列名がカッコ内に示されています)。オペレーティング・システム監査証跡の場合は、対応する列に「あり」とマークされた列のみに存在します。

表 12-1    監査証跡レコードのデータ 
データベース監査証跡に移入されるデータ  オペレーティング・
システム監査証跡での有無
 

(*)SQL文に使用されたバインド値(ある場合) 

脚注1 

(*)SQLテキスト(監査をトリガーしたSQLテキスト) 

脚注1 

操作の完了コード 

あり 

データベース・ユーザー名(DATABASE USER) 

あり 

UTC(協定世界時)書式による日時のタイムスタンプ 

なし 

識別名 

あり 

グローバル・ユーザーの一意ID 

なし 

インスタンス番号 

なし 

アクセスされたスキーマ・オブジェクトの名前 

あり 

オペレーティング・システムのログイン・ユーザー名(CLIENT USER) 

あり 

実行または試行された操作(ACTION) 

あり 

処理番号 

脚注2 

プロキシ・セッションの監査ID 

なし 

SQL文のSCN(システム変更番号) 

なし 

セッション識別子 

あり 

使用されたシステム権限(PRIVILEGE) 

あり 

端末識別子 

あり 

トランザクションID 

なし 

脚注1: 表12-1でアスタリスク(*)が付いた列が監査レコードに表示されるのは、データベース初期化ファイルinit.oraAUDIT_TRAIL=DB,EXTENDEDまたはAUDIT_TRAIL=XML,EXTENDEDが指定されている場合のみです。また、配列の場合、記録される値は、最後のバインド値セットのみです。

脚注2: UNIXシステムの場合、プロセス番号はProcessIdとして移入されます。Windowsシステムの場合、ラベルはProcessId:ThreadId(スレッドとして動作していない場合はProcessId)です。


注意:

init.oraAUDIT_TRAILパラメータがXMLまたはXML,EXTENDEDに設定されている場合、標準監査レコードはXML形式でOSファイルに送信されます。 XMLは標準の文書形式であるため、このようなXMLデータの解析および分析には多くのユーティリティを使用できます。 


監査レコードのデータベースの宛先がいっぱいか使用できなくなったために新規レコードが入らなくなると、監査対象のアクションは完了できません。かわりにエラー・メッセージが生成され、監査対象のアクションは実行されません。多くの場合、オペレーティング・システムのログを監査証跡の宛先として使用すると、このようなアクションを完了できます。

関連項目:

 

監査証跡には、監査対象の文に関連するデータ値の情報は格納されません。たとえば、UPDATE文を監査しているときに、更新された行の新旧のデータ値は格納されません。ただし、ファイングレイン監査方法を使用すれば、この特別なタイプの監査を実行できます。

DBA_COMMON_AUDIT_TRAILビューは、標準監査とファイングレイン監査のログ・レコードを結合します。

フラッシュバック問合せ機能を使用すると、現在有効な監査方針に従って、更新された行の新旧のデータ値を表示できます。フラッシュバックが、最初は別の方針に従っていた旧問合せに対する内容の場合でも、現在の方針が適用されます。現行のビジネス・アクセス・ルールが常に適用されます。

関連項目:

  • ファイングレイン監査方法の詳細は、「ファイングレイン監査」を参照してください。

  • 『Oracle Database管理者ガイド』のフラッシュバック問合せに関する項を参照してください。

  • 『Oracle Database SQLリファレンス』の第18章「システム権限表のフラッシュバック・エントリ」

 


注意:

FLASHBACK_TRANSACTION_TABLEまたはV$LOGMNR_CONTENTSから読み込むには、システム権限SELECT ANY TRANSACTIONが必要です。 


オペレーティング・システム・ファイルに格納される監査情報

監査証跡を含むオペレーティング・システム・ファイルには、次のデータが記録されます。

オペレーティング・システム監査証跡に書き込まれた監査証跡レコードには、エンコードされた情報が含まれていますが、この情報はデータ・ディクショナリ表とエラー・メッセージを使用して次のようにデコードできます。

エンコードされている情報  デコード方法 

アクション・コード 

AUDIT_ACTIONSデータ・ディクショナリ表に記載されているコードを使用して、実行または試行された操作とコードの説明を示します。 

使用された権限 

SYSTEM_PRIVILEGE_MAP表に記載されているコードを使用して、操作の実行に使用されたシステム権限とコードの説明を示します。 

完了コード 

『Oracle Databaseエラー・メッセージ』に記載されているコードを使用して、試行された操作の結果とコードの説明を示します。成功した操作からは値0(ゼロ)が戻されます。異常終了した操作からは、操作が異常終了した理由を説明するOracleエラー・コードが戻されます。 

標準監査証跡の管理

ここでは、標準の監査証跡情報の管理について説明します。この項の内容は、次のとおりです。

標準監査を使用可能および使用禁止にする方法

許可されたデータベース・ユーザーであれば、文、権限およびオブジェクト監査オプションをいつでも設定できます。ただし、データベース監査が使用可能ではない場合、Oracle Databaseでは標準のデータベース監査証跡用の監査情報を生成しません。通常は、セキュリティ管理者が監査の制御を担当します。

ここでは、標準監査を使用可能および使用禁止にする初期化パラメータについて説明します。


注意:

  • 標準の監査に影響を与える初期化パラメータAUDIT_SYS_OPERATIONSおよびAUDIT_TRAILは静的です。静的とは、これらの値を変更した場合は、新しい値が有効になるようにデータベースを停止して再起動する必要があることを意味します。

  • AUDIT_FILE_DEST初期化パラメータは、ALTER SYSTEM SET AUDIT_FILE_DEST = <dir> DEFERREDと指定すると変更でき、新しい宛先がその後のセッションすべてに対して有効になります。

 

AUDIT_TRAIL初期化パラメータの設定

データベース監査は、データベースの初期化パラメータ・ファイルinit.ora内のAUDIT_TRAIL初期化パラメータによって使用可能または使用禁止にします。このパラメータには、次の値を設定できます。

パラメータ値  意味 

DB 

データベース監査を使用可能にして、常にオペレーティング・システム監査証跡に書き込まれるレコードを除いて、すべての監査レコードをデータベース監査証跡(SYS.AUD$)に書き込みます。 

XML 

Sql_TextおよびSql_Bindを除くAuditRecordノードのすべての要素は、オペレーティング・システムのXML監査ファイルに出力されます。 

DB,EXTENDED 

AUDIT_TRAIL=DBの場合の処理をすべて実行した上で、可能な場合は、SYS.AUD$表のSQLバインドおよびSQLテキストのCLOB型の列にデータを移入します。 これら2つの列には、このパラメータが指定されたときにのみデータが移入されます。

DB,EXTENDEDは、監査でトリガーされたSQLを取得します。 監査を発生させたSQL文と、それに関連するバインド変数の両方を取得できます。 ただし、次の列データ型からのデータのみを取得できます。CHARNCHARVARCHARVARCHAR2NVARCHAR2NUMBERFLOATBINARY_FLOATBINARY_DOUBLEDATELONGROWIDおよびTIMESTAMP。 

XML,EXTENDED 

AUDIT_TRAIL=XMLの場合の処理をすべて実行した上で、可能な場合は、SYS.AUD$表のSQLバインドおよびSQLテキストのCLOB型の列にデータを移入します(これらの列は、このパラメータが指定されたときにのみデータが移入されます)。 

OS 

データベース監査を使用可能にして、すべての監査レコードをオペレーティング・システム・ファイルに書き込みます。 

NONE 

標準監査を使用禁止にします(この値がデフォルトです)。 

監査対象のオブジェクトを変更した場合、データベースの再起動は必要ありません。再起動が必要になるのは、すべての監査を使用可能または使用禁止にするなど、全体的な変更が行われた場合のみです。


注意:

ファイングレイン監査またはSYS監査を使用可能にする場合、AUDIT_TRAILの設定は不要です。ファイングレイン監査の場合は、適切と思われるFGA方針を追加および削除して、監視する特定の操作またはオブジェクトに適用します。AUDIT_SYS_OPERATIONSパラメータを使用すると、SYS監査を使用可能および使用禁止にできます。 



関連項目:

 

オペレーティング・システム監査証跡のディレクトリの指定

AUDIT_FILE_DEST初期化パラメータは、AUDIT_TRAIL=OSまたはAUDIT_TRAIL=XMLを指定した場合に監査証跡が書き込まれるオペレーティング・システム・ディレクトリを指定します。AUDIT_SYS_OPERATIONS初期化パラメータを指定した場合、ユーザーSYSの監査レコードの場合と同様、必須監査情報もこのディレクトリに格納されます。AUDIT_FILE_DESTは、ALTER SYSTEM SET AUDIT_FILE_DEST = <dir> DEFERREDと指定すると変更でき、新しい宛先がその後のセッションすべてに対して有効になります。

AUDIT_FILE_DESTパラメータが指定されていない場合、デフォルトの場所は、Solarisでは$ORACLE_BASE/admin/$DB_UNIQUE_NAME/adump、Windowsでは$ORACLE_BASE¥admin¥$DB_UNIQUE_NAME¥adumpです。


注意:

  • 使用しているオペレーティング・システムで監査証跡がサポートされている場合、その書込み先はオペレーティング・システム固有のものです。たとえば、init.oraファイルにAUDIT_TRAIL=OSと指定されている場合、Windowsオペレーティング・システムでは、監査レコードはアプリケーションのイベント・ログにイベントとして書き込まれます。

  • init.oraAUDIT_TRAIL=XML(またはXML,EXTENDED)と指定されている場合、監査レコードはXML形式のオペレーティング・システム・ファイルに書き込まれます。WindowsでAUDIT_FILE_DESTパラメータを設定すると、XML形式の監査レコードは、このパラメータによって指定されているディレクトリに格納されます。

 

syslogレベルの指定

syslog監査を使用可能にするには、OSの値をAUDIT_TRAIL初期化パラメータに割り当てます(「AUDIT_TRAIL初期化パラメータの設定」を参照)。また、AUDIT_SYSLOG_LEVELパラメータをデータベースの初期化パラメータ・ファイルinit.oraに手動で追加する必要があります。AUDIT_SYSLOG_LEVELパラメータには、AUDIT_SYSLOG_LEVEL=facility.priorityの形式で機能と優先順位を割り当てます。facility引数は、メッセージをログに記録するオペレーティング・システムの一部を示します。一方、priority引数は、メッセージの重大度を定義します。syslogデーモンは、AUDIT_SYSLOG_LEVELパラメータの機能引数とsyslog.confファイルを比較し、情報の記録先を決定します。たとえば、次の文では、機能をlocal1、優先順位レベルをwarningとして識別します。

AUDIT_SYSLOG_LEVEL=local1.warning


注意:

syslog監査を使用可能にする前に、syslogの使用方法をよく理解しておく必要があります。  


複数層環境における標準監査

複数層環境では、Oracleはすべての層を通じてクライアントの識別情報を保持します。これによって、クライアントのかわりに実行されたアクションの監査が可能になります。そのためには、AUDIT文でBY proxy句を指定します。

この句を使用して次の処理を行うことができます。

次の例では、プロキシ・アプリケーション・サーバーappserveによってクライアントjacksonのかわりに発行されたSELECT TABLE文が監査されます。

AUDIT SELECT TABLE
    BY appserve ON BEHALF OF jackson; 

関連項目:

プロキシと複数層アプリケーションの詳細は、『Oracle Database概要』および『Oracle Databaseアプリケーション開発者ガイド-基礎編』を参照してください。 

標準監査オプションの使用可能化

AUDIT文を使用して、次の4つの標準監査オプションから1つを指定します。

レベル  影響 

文 

特定の型のデータベース・オブジェクトに影響を与える特定のSQL文または文のグループを監査します。たとえば、AUDIT TABLEを実行すると、CREATE TABLETRUNCATE TABLECOMMENT ON TABLEおよびDELETE [FROM] TABLE文が監査されます。 

権限 

特定のシステム権限によって許可されるSQL文を監査します。たとえば、AUDIT CREATE ANY TRIGGER文を実行すると、CREATE ANY TRIGGERシステム権限を使用して発行された文が監査されます。 

オブジェクト 

emp表に対するALTER TABLE文など、特定のオブジェクトに対する特定の文を監査します。 

ネットワーク 

ネットワーク・プロトコルの不測エラーまたはネットワーク・レイヤーの内部エラーを監査します。 

AUDIT文を使用して文オプションおよび権限オプションを設定するには、AUDIT SYSTEM権限が必要です。AUDIT文を使用してオブジェクト監査オプションを設定するには、監査対象のオブジェクトを所有しているか、またはAUDIT ANY権限が必要です。

文監査オプションおよび権限監査オプションを設定する監査文では、BY句によってユーザーまたはアプリケーション・プロキシのリストを指定し、文監査オプションと権限監査オプションの有効範囲を限定できます。

監査オプションの設定時には、次の監査条件も指定できます。

監査オプションの各選択肢が表す意味とAUDIT文の句の指定については、後述します。

新しいデータベース・セッションが作成されると、そのセッションはデータ・ディクショナリから監査オプションを取得します。これらの監査オプションは、データベースに接続している間は有効です。新しいシステムまたはオブジェクトの監査オプションを設定すると、後続のすべてのデータベース・セッションではこれらのオプションを使用するようになります。既存のセッションでは、セッションの作成時に取得された監査オプションが引き続き使用されます。


注意:

AUDIT文によって指定されるのは監査オプションのみで、監査機能全体が使用可能になるわけではありません。 監査機能を使用可能にして、現在設定されている監査オプションに基づいて監査レコードを生成するかどうかを制御するには、「標準監査を使用可能および使用禁止にする方法」の説明に従って、初期化パラメータAUDIT_TRAILを設定します。 


関連項目:

AUDIT文の詳細は、『Oracle Database SQLリファレンス』を参照してください。 

文監査の使用可能化

AUDIT文とNOAUDIT文に指定できる有効な文監査オプションの詳細は、『Oracle Database SQLリファレンス』を参照してください。

ここでは、2つの特別な文監査のケースについて説明します。

接続と切断の監査

SESSION文オプションは、特定タイプの文が発行されたときに監査レコードを生成しない点で他のオプションとは異なります。このオプションは、インスタンスへの接続によって作成されたセッションごとに、単一の監査レコードを生成します。監査レコードは、接続時に監査証跡に挿入され、切断時に更新されます。セッションに関する累積情報は、そのセッションに対応する単一の監査レコード内に格納されます。このレコードには、接続時刻、切断時刻、処理された論理I/Oや物理I/Oなどの情報が記録されます。

ユーザーおよび正常終了/異常終了に関係なく、データベースとの間のすべての接続と切断について、セッション別(BY SESSION、デフォルトであり、このオプションの唯一の値)に監査するには、次の文を実行します。

AUDIT SESSION;

次の例に示すように、このオプションはユーザーごとに設定することもできます。

AUDIT SESSION
BY jeff, lori;
オブジェクトがないために異常終了した文の監査

NOT EXISTS文オプションは、ターゲット・オブジェクトがないために異常終了したSQL文すべての監査を指定します。

権限監査の使用可能化

権限監査オプションは、対応するシステム権限と完全に一致します。たとえば、DELETE ANY TABLE権限の使用を監査するためのオプションは、DELETE ANY TABLEです。このオプションを使用可能にするには、次のような文を使用します。

AUDIT DELETE ANY TABLE
    BY ACCESS
    WHENEVER NOT SUCCESSFUL;

Oracle Databaseのシステム権限の詳細は、『Oracle Database SQLリファレンス』を参照してください。

DELETE ANY TABLEシステム権限の正常な使用の場合と異常終了した使用の場合をすべて監査するには、次の文を実行します。

AUDIT DELETE ANY TABLE;

すべての表に対する異常終了したSELECTINSERTおよびDELETE文、およびEXECUTE PROCEDUREシステム権限の異常終了した使用を、全データベース・ユーザーに対して個々の監査対象文別にすべて監査するには、次の文を実行します。

AUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE, EXECUTE PROCEDURE
      BY ACCESS
      WHENEVER NOT SUCCESSFUL;

文監査オプションまたは権限監査オプションを設定するには、AUDIT SYSTEMシステム権限が必要です。通常、この権限を付与されているユーザーはセキュリティ管理者のみです。

オブジェクト監査の使用可能化

有効なオブジェクト監査オプションと、各オプションが使用できるスキーマ・オブジェクトのタイプの詳細は、『Oracle Database SQLリファレンス』を参照してください。

ユーザーは、自分のスキーマ内にあるオブジェクトのオブジェクト監査オプションを設定できます。他のユーザーのスキーマ内にあるオブジェクトのオブジェクト監査オプションを設定したり、デフォルトのオブジェクト監査オプションを設定するには、AUDIT ANYシステム権限が必要です。通常、AUDIT ANY権限を付与されているユーザーはセキュリティ管理者のみです。

jeff.emp表に対する正常終了および異常終了したすべてのDELETE文をセッション別(BY SESSION、デフォルト)に監査するには、次の文を実行します。

AUDIT DELETE ON jeff.emp;

ユーザーjwardが所有するdept表に対する正常終了したすべてのSELECTINSERTおよびDELETE文をアクセス別(BY ACCESS)に監査するには、次の文を実行します。

AUDIT SELECT, INSERT, DELETE
     ON jward.dept
     BY ACCESS
     WHENEVER SUCCESSFUL;

異常終了したすべてのSELECT文を監査するためのデフォルトのオブジェクト監査オプションをセッション別(BY SESSION、デフォルト)に設定するには、次の文を実行します。

AUDIT SELECT
     ON DEFAULT
     WHENEVER NOT SUCCESSFUL;

ネットワーク監査の使用可能化

AUDIT文とNOAUDIT文に指定できる有効な文監査オプションの詳細は、『Oracle Database SQLリファレンス』を参照してください。

ネットワーク監査によって検出されるエラー(AUDIT_ACTIONSのACTION 122「ネットワーク・エラー」など)は接続障害ではありませんが、いくつか原因があります。この原因の1つに、Oracleエンジニアが純粋にテスト目的として設定した内部イベントなどがあります。その他の原因には、予測される暗号化を作成または処理するために必要な情報をネットワークが検出できない場合など、暗号化の構成設定の競合があります。表12-2では、このような状況のうちの4つを示します。

表 12-2    監査可能なネットワーク・エラーの状況 
エラー  原因  アクション 

TNS-02507

暗号化アルゴリズムがインストールされていません 

アルゴリズムの選択後、サーバーはアルゴリズムの表でその索引を見つけることができませんでした。アルゴリズムが(間接的に)このリストから選択されているため、処理ができません。 

通常、ユーザーには表示されません。詳細を参照するには、トレースを使用可能にして操作を再実行します。エラーが解消されない場合は、オラクル社カスタマ・サポート・センターまでご連絡ください。 

TNS-12648

暗号化またはデータ整合性アルゴリズム・リストが空です。 

Oracle Advanced Securityのアルゴリズム・リスト・パラメータが空です。 

インストールされているアルゴリズムのうち、少なくとも1つのアルゴリズム名が含まれるようにリストを変更するか、インストールされているすべてのアルゴリズムが許容できる場合は、リスト全体を削除します。 

TNS-12649

不明な暗号化またはデータ整合性アルゴリズムです 

Oracle Advanced Securityのアルゴリズム・リスト・パラメータに、認識されていないアルゴリズム名が含まれています。 

アルゴリズム名を削除、スペルが間違っている場合はスペルを修正、あるいは欠落しているアルゴリズムのドライバをインストールします。 

TNS-12650

共通の暗号化またはデータ整合性アルゴリズムがありません。 

クライアントとサーバーには、暗号化またはデータ整合性、あるいはこれら両方についての共通のアルゴリズムがありません。 

共通のアルゴリズム・セットを選択します。つまり、クライアント・アルゴリズムの選択肢の1つをサーバー・リストに追加するか、サーバー・リストの選択肢の1つをクライアント・アルゴリズムに追加します。  

標準監査オプションの使用禁止

Oracle Database 10gの各種監査オプションを使用禁止にするには、NOAUDIT文を使用します。このオプションは、文監査オプション、権限監査オプションおよびオブジェクト監査オプションの設定を解除するために使用します。文監査オプションおよび権限監査オプションを設定するNOAUDIT文では、BY userまたはBY proxyオプションによってユーザーのリストを指定し、各監査オプションの適用範囲を限定できます。

NOAUDIT文では、WHENEVER句を使用して監査オプションを選択的に使用禁止にできます。この句の指定がない場合は、正常終了と異常終了のどちらの場合にも監査オプションは完全に使用禁止となります。

BY SESSION/BY ACCESSオプションのペアは、NOAUDIT文ではサポートされていません。このため、監査オプションの設定方法に関係なく、監査オプションの設定は適切なNOAUDIT文によって解除されます。


注意:

NOAUDIT文によって指定されるのは監査オプションのみです。監査機能全体が使用禁止になるわけではありません。 監査機能を使用禁止にして、Oracle Databaseによる監査レコードの生成を停止するには、「標準監査を使用可能および使用禁止にする方法」の説明に従って、データベースの初期化パラメータ・ファイルに初期化パラメータAUDIT_TRAILを設定します。  


関連項目:

NOAUDIT文の構文の詳細は、『Oracle Database SQLリファレンス』を参照してください。 

文監査および権限監査を使用禁止にする方法

対応する監査オプションを使用禁止にするには、次の文を実行します。

NOAUDIT session;
NOAUDIT session BY jeff, lori;
NOAUDIT DELETE ANY TABLE;
NOAUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE,
    EXECUTE PROCEDURE;

文監査オプションをすべて使用禁止にするには、次の文を実行します。

NOAUDIT ALL;

権限監査オプションをすべて使用禁止にするには、次の文を実行します。

NOAUDIT ALL PRIVILEGES;

文監査オプションまたは権限監査オプションを使用禁止にするには、AUDIT SYSTEMシステム権限が必要です。

オブジェクト監査を使用禁止にする方法

対応する監査オプションを使用禁止にするには、次の文を実行します。

NOAUDIT DELETE
   ON emp;
NOAUDIT SELECT, INSERT, DELETE
   ON jward.dept;

また、emp表に対するオブジェクト監査オプションをすべて使用禁止にするには、次の文を実行します。

NOAUDIT ALL
   ON emp;

デフォルトのオブジェクト監査オプションをすべて使用禁止にするには、次の文を入力します。

NOAUDIT ALL
   ON DEFAULT;

このNOAUDIT文を発行する前に作成されたすべてのスキーマ・オブジェクトは、作成後にNOAUDIT文を使用して明示的に設定を変更しないかぎり、引き続き作成時に指定されたデフォルトのオブジェクト監査オプションが使用されます。

特定のオブジェクトのオブジェクト監査オプションを使用禁止にするには、そのスキーマ・オブジェクトの所有者であることが必要です。他のユーザーのスキーマ内にあるオブジェクトのオブジェクト監査オプションや、デフォルトのオブジェクト監査オプションを使用禁止にするには、AUDIT ANYシステム権限が必要です。オブジェクトのオブジェクト監査オプションを使用禁止にする権限を持っているユーザーは、他のユーザーによって設定されたオプションを変更できます。

ネットワーク監査を使用禁止にする方法

ネットワーク監査を使用禁止にするには、次の文を実行します。

NOAUDIT NETWORK;

dbリンクの使用状況およびログイン・タイプの記録が停止します。

標準監査証跡の増加とサイズの制御

監査証跡がいっぱいになり、これ以上監査レコードを挿入できなくなった場合は、監査証跡を削除しないかぎり、監査対象の文を正常に実行できません。監査対象の文を発行するすべてのユーザーに対して警告が表示されます。このため、セキュリティ管理者は、監査証跡の増加とサイズを制御する必要があります。

監査が使用可能で、監査レコードが生成されているときは、次の2つの要因によって監査証跡が増加します。

監査証跡の増加を制御するには、次の方法を使用します。

データベース監査証跡(SYS.AUD$表)の最大サイズは、この表が格納されているSYSTEM表領域のデフォルトの記憶域パラメータによって決まります。

関連項目:

監査レコードをオペレーティング・システムの監査証跡に書き込んでいる場合の、オペレーティング・システム監査証跡の管理方法の詳細は、使用しているオペレーティング・システム固有のOracleマニュアルを参照してください。 

監査証跡から監査レコードを削除する方法

セキュリティ管理者は、ある期間、監査機能を使用可能にした後、レコードをデータベース監査証跡から削除できます。これによって、監査証跡の領域が解放され、監査証跡の管理が容易になります。

たとえば、監査証跡からすべての監査レコードを削除するには、次の文を実行します。

DELETE FROM SYS.AUD$;

また、emp表の監査の結果として生成されたすべての監査レコードを監査証跡から削除するには、次の文を実行します。

DELETE FROM SYS.AUD$
     WHERE obj$name='EMP';


注意:

監査証跡からのレコードの削除はすべて例外なく監査されます。 詳細は、「標準監査証跡の監査」、および「管理ユーザーの監査」を参照してください。 


データベース監査証跡からレコードを削除できるのは、DELETE ANY TABLE権限があるSYSユーザー、またはSYSによってSYS.AUD$DELETE権限を付与されているユーザーのみです。


注意:

監査証跡がいっぱいになっている場合に、接続が監査されているとき(つまり、SESSIONオプションを設定している場合)は、その接続に対応する監査レコードを監査証跡に挿入できないため、通常のユーザーはデータベースに接続できません。この場合、セキュリティ管理者は必ずSYSで接続し(SYSによる操作は監査されないため)、監査証跡で使用可能な領域を作成する必要があります。  


監査証跡情報のアーカイブ

監査証跡情報を履歴確認目的でアーカイブする必要がある場合、セキュリティ管理者は、関連するレコードを通常のデータベース表へコピーするか(たとえば、INSERT INTO table SELECT ... FROM SYS.AUD$ ...を使用)、または監査証跡表をオペレーティング・システムのファイルにエクスポートできます。

関連項目:

表のエクスポートの詳細は、『Oracle Databaseユーティリティ』を参照してください。 

監査証跡のサイズの縮小

データベース表の場合と同様に、データベース監査証跡からレコードが削除されても、この表に割り当てられているエクステントはそのまま存在します。

データベース監査証跡に多数のエクステントが割り当てられていても、そのうちの大半が使用されていない場合は、次の手順に従って、データベース監査証跡に割り当てられている領域を縮小できます。

  1. 監査証跡の現在の情報を保存する場合は、その情報を別のデータベース表にコピーするか、またはEXPORTユーティリティを使用してエクスポートします。

  2. 管理者権限を持つユーザーで接続します。

  3. TRUNCATE文を使用して、SYS.AUD$を切り捨てます。

  4. 手順1で作成したアーカイブ済の監査証跡レコードを再ロードします。

SYS.AUD$の新しいバージョンには、現在の監査証跡レコードを記録するために必要な数だけエクステントが割り当てられます。


注意:

直接変更できるSYSオブジェクトは、SYS.AUD$のみです。  


標準監査証跡の保護

疑わしいデータベース・アクティビティを監査する場合は、監査証跡のレコードの整合性を保護することによって、監査情報が正確かつ完全であることを保証してください。

SYS.AUD$表に対してオブジェクト監査オプションを設定した結果として生成された監査レコードを、それ自体は不正な使用から保護されている監査証跡から削除できるのは、管理者権限で接続しているユーザーのみです。

標準監査証跡の監査

アプリケーションで、通常のユーザー(SYSDBA以外のユーザー)にSYS.AUD$へのアクセス権を付与する必要がある場合、このようなアクセスは監査する必要があります。

これを行うには、SYS.AUD$に対する関連監査オプションをオンにします。このオプションは、監査証跡(aud$)自体のアクションを監査するため、動作が多少異なります。

  1. CONNECT sys/passw AS SYSDBA

  2. 次のコマンドを発行します。

    AUDIT SELECT, INSERT, UPDATE, DELETE ON sys.aud$ BY ACCESS;
    
    

このコマンドは、SYSDBA以外のユーザーが実行するアクションのみを監査(AUDIT)することに注意してください。

SYS.AUD$に対するSELECTUPDATEINSERTおよびDELETE権限がある通常のユーザーがSELECT操作を実行すると、監査証跡にその操作のレコードが記録されます。つまり、SYS.AUD$には、それ自体に対するSELECTアクションを識別する、row1という行が記録されます。

ユーザーが後でSYS.AUD$からこのrow1に対してDELETEを実行しようとした場合、このユーザーにはこのアクションを実行する権限があるため、DELETEは成功します。ただし、SYS.AUD$に対するこのDELETEアクションも監査証跡に記録されます。このタイプの監査の設定はセーフティ機能の役割を果たし、異常なアクションや不正なアクションを検出できる場合があります。実際のテスト例のログ・ファイルは、この章の「表SYS.AUD$の監査: 例」を参照してください。


注意:

SYS.AUD$表に対するDELETEINSERTUPDATEおよびMERGE操作は常に監査されており、このような監査レコードは削除できません。 


データベース監査証跡情報の表示

データベース監査証跡(SYS.AUD$)は、各Oracleデータベースのデータ・ディクショナリ内にある単一の表です。この表に含まれている監査情報を効果的に表示するために、いくつかの事前定義のビューが利用できます。監査を使用禁止にする場合は、後でそれらのビューを削除できます。次の各項で、これらのビューに表示される内容、その使用方法および削除方法を示します。

監査証跡ビュー

インストール時に次のビューが作成されます。

ビュー 

説明 

STMT_AUDIT_OPTION_MAP
 

監査オプション・タイプ・コードの情報が含まれます。CREATE DATABASE時にSQL.BSQスクリプトによって作成されます。 

AUDIT_ACTIONS
 

監査証跡のアクション・タイプ・コードの記述が含まれます。 

ALL_DEF_AUDIT_OPTS
 

オブジェクトの作成時に適用されるデフォルトのオブジェクト監査オプションが含まれます。 

DBA_STMT_AUDIT_OPTS
 

システム全体の現行のシステム監査オプションがユーザー別に表示されます。 

DBA_PRIV_AUDIT_OPTS
 

システム全体で監査対象となっている現行のシステム権限がユーザー別に表示されます。 

DBA_OBJ_AUDIT_OPTS
USER_OBJ_AUDIT_OPTS
 

すべてのオブジェクトの監査オプションが表示されます。USERビューには、現行ユーザーが所有するすべてのオブジェクトの監査オプションが表示されます。 

DBA_AUDIT_TRAIL
USER_AUDIT_TRAIL
 

すべての監査証跡エントリがリストされます。USERビューには、現行ユーザーに関連する監査証跡エントリが表示されます。 

DBA_AUDIT_OBJECT
USER_AUDIT_OBJECT
 

システム内にあるすべてのオブジェクトの監査証跡レコードが含まれます。USERビューには、現行ユーザーがアクセス可能なオブジェクトに関する文の監査証跡レコードがリストされます。 

DBA_AUDIT_SESSION
USER_AUDIT_SESSION
 

CONNECTおよびDISCONNECTに関する監査証跡レコードがすべてリストされます。USERビューには、現行ユーザーの接続および切断に関する監査証跡レコードがすべてリストされます。  

DBA_AUDIT_STATEMENT
USER_AUDIT_STATEMENT
 

データベース全体のGRANTREVOKEAUDITNOAUDITおよびALTER SYSTEM文に関する監査証跡レコードがリストされます。USERビューでは、ユーザーが発行したそれぞれの文に関する監査証跡レコードがリストされます。 

DBA_AUDIT_EXISTS
 

BY AUDIT NOT EXISTSによって生成された監査証跡エントリがリストされます。 

DBA_AUDIT_POLICIES
 

システム上にあるすべての監査方針が表示されます。 

DBA_FGA_AUDIT_TRAIL
 

値ベース監査の監査証跡レコードがリストされます。 

DBA_COMMON_AUDIT_TRAIL
 

標準監査とファイングレイン監査のログ・レコードが結合され、XML形式で書き込まれたSYSおよび必須監査レコードが含まれます。 

関連項目:

Oracle Databaseで提供される事前定義ビューの詳細は、 『Oracle Databaseリファレンス』を参照してください。 

監査証跡ビューを使用した疑わしいアクティビティの調査

ここでは、監査証跡情報の検討方法と解釈方法の具体例を説明します。次の状況について考えます。

次の疑わしいアクティビティについて、データベースを監査するとします。

これらの不正なアクションのいくつかは、ユーザーjwardswilliamsによって行われた疑いがあります。

調査を行うには、次の文を順序どおりに発行します。

AUDIT ALTER, INDEX, RENAME ON DEFAULT
    BY SESSION;
CREATE VIEW jeff.employee AS SELECT * FROM jeff.emp;
AUDIT SESSION BY jward, swilliams;
AUDIT ALTER USER;
AUDIT LOCK TABLE
    BY ACCESS
    WHENEVER SUCCESSFUL;
AUDIT DELETE ON jeff.emp
    BY ACCESS
    WHENEVER SUCCESSFUL;

その後、ユーザーjwardによって次の文が発行されました。

ALTER USER tsmith QUOTA 0 ON users;
DROP USER djones;

その後、ユーザーswilliamsによって次の文が発行されました。

LOCK TABLE jeff.emp IN EXCLUSIVE MODE;
DELETE FROM jeff.emp WHERE mgr = 7698;
ALTER TABLE jeff.emp ALLOCATE EXTENT (SIZE 100K);
CREATE INDEX jeff.ename_index ON jeff.emp (ename);
CREATE PROCEDURE jeff.fire_employee (empid NUMBER) AS
  BEGIN
    DELETE FROM jeff.emp WHERE empno = empid;
  END;
/

EXECUTE jeff.fire_employee(7902);

次の各項では、データ・ディクショナリ内の監査証跡ビューを使用して表示できる情報のうち、この調査に関連するものを示します。

アクティブな文監査オプションのリスト

次の問合せを実行すると、設定されている文監査オプションがすべて表示されます。

SELECT * FROM DBA_STMT_AUDIT_OPTS;

USER_NAME               AUDIT_OPTION         SUCCESS         FAILURE
--------------------    -------------------  ----------      ---------
JWARD                   SESSION              BY SESSION      BY SESSION
SWILLIAMS               SESSION              BY SESSION      BY SESSION
                        LOCK TABLE           BY ACCESS       NOT SET

このビューでは、文監査オプションの設定(正常終了と異常終了のどちら(あるいはその両方)に設定されているか、またBY SESSIONBY ACCESSのどちらに設定されているか)を確認できます。

アクティブな権限監査オプションのリスト

次の問合せを実行すると、設定されている権限監査オプションがすべて表示されます。

SELECT * FROM DBA_PRIV_AUDIT_OPTS;

USER_NAME           PRIVILEGE            SUCCESS      FAILURE
------------------- -------------------- ---------   ----------
ALTER USER          BY SESSION           BY SESSION

特定のオブジェクトに対するアクティブなオブジェクト監査オプションのリスト

次の問合せを実行すると、名前がempという文字で始まり、かつjeffのスキーマ内に格納されているオブジェクトについて、監査オプションの設定がすべて表示されます。

SELECT * FROM DBA_OBJ_AUDIT_OPTS
    WHERE OWNER = 'JEFF' AND OBJECT_NAME LIKE 'EMP%';

OWNER OBJECT_NAME OBJECT_TY ALT AUD COM DEL GRA IND INS LOC ...
----- ----------- --------- --- --- --- --- --- --- --- --- ...
JEFF EMP         TABLE     S/S -/- -/- A/- -/- S/S -/- -/- ...
JEFF EMPLOYEE    VIEW      -/- -/- -/- A/- -/- S/S -/- -/- ...

このビューでは、指定したオブジェクトに対するすべての監査オプションの情報が表示されます。このビューの情報は、次のように解釈します。

デフォルトのオブジェクト監査オプションのリスト

次の問合せを実行すると、デフォルトのオブジェクト監査オプションがすべて表示されます。

SELECT * FROM ALL_DEF_AUDIT_OPTS;

ALT AUD COM DEL GRA IND INS LOC REN SEL UPD REF EXE FBK REA
--- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
S/S -/- -/- -/- -/- S/S -/- -/- S/S -/- -/- -/- -/- /-  -/-

このビューでは、USER_OBJ_AUDIT_OPTSDBA_OBJ_AUDIT_OPTSの各ビューに類似した情報が表示されます(前出の例を参照)。

監査レコードのリスト

次の問合せを実行すると、文監査オプションとオブジェクト監査オプションで生成された監査レコードがリストされます。

SELECT * FROM DBA_AUDIT_OBJECT;

AUDIT SESSIONオプションの監査レコードのリスト

次の問合せを実行すると、AUDIT SESSION文監査オプションに対応する監査情報がリストされます。

SELECT USERNAME, LOGOFF_TIME, LOGOFF_LREAD, LOGOFF_PREAD,
    LOGOFF_LWRITE, LOGOFF_DLOCK
    FROM DBA_AUDIT_SESSION;

USERNAME   LOGOFF_TI LOGOFF_LRE LOGOFF_PRE LOGOFF_LWR LOGOFF_DLO
---------- --------- ---------- ---------- ---------- ----------
JWARD      02-AUG-91         53          2         24          0 
SWILLIAMS  02-AUG-91       3337        256        630          0 

監査証跡ビューの削除

監査機能を使用禁止にしていて監査証跡ビューが不要な場合は、SYSでデータベースに接続して、スクリプト・ファイルCATNOAUD.SQLを実行することによって、ビューを削除できます。CATNOAUD.SQLスクリプトの名前と位置は、オペレーティング・システムによって異なります。

表SYS.AUD$の監査: 例

この項のコードは、SYS.AUD$に対して行われた変更の監査を示します。


SQL> @t
SQL> 
SQL> SET FEEDBACK 1
SQL> SET NUMWIDTH 10
SQL> SET LINESIZE 80
SQL> SET TRIMSPOOL ON
SQL> SET TAB OFF
SQL> SET PAGESIZE 100
SQL> 
SQL> column username format a10
SQL> column owner  format a10
SQL> column obj_name format a6
SQL> column action_name format a17
SQL> SET ECHO ON
SQL> 
SQL> connect sys/newdbapassword as sysdba
Connected.
SQL> grant select, insert, update, delete on sys.aud$ to jeff;

Grant succeeded.

SQL> grant select on dba_audit_trail to jeff;

Grant succeeded.

SQL> audit select, update, delete on sys.aud$ by access;

Audit succeeded.

SQL> truncate table sys.aud$;

Table truncated.

SQL> 
SQL> connect jeff/wolf
Connected.
SQL> select count(*) from emp

  COUNT(*)
----------
         0

1 row selected.

SQL> 
SQL> select statementid,entryid,username,action_name,returncode,owner,
  2  obj_name,substr(priv_used,1,8) priv,  SES_ACTIONS
  3  from dba_audit_trail
  4  order by sessionid,entryid;

STATEMENTID    ENTRYID USERNAME   ACTION_NAME       RETURNCODE OWNER      OBJ_NA
----------- ---------- ---------- ----------------- ---------- ---------- ------
PRIV     SES_ACTIONS
-------- -------------------
          8          1 JEFF      SELECT                     0 SYS        AUD$


1 row selected.

SQL> 
SQL> update sys.aud$ set userid = 0;

2 rows updated.

SQL> select statementid,entryid,username,action_name,returncode,owner,
  2  obj_name,substr(priv_used,1,8) priv,  SES_ACTIONS
  3  from dba_audit_trail
  4  order by sessionid,entryid;

STATEMENTID    ENTRYID USERNAME   ACTION_NAME       RETURNCODE OWNER      OBJ_NA
----------- ---------- ---------- ----------------- ---------- ---------- ------
PRIV     SES_ACTIONS
-------- -------------------
          8          1 0          SELECT                     0 SYS        AUD$

          9          2 0          SELECT                     0 SYS        AUD$

         10          3 JEFF       UPDATE                     0 SYS        AUD$

3 rows selected.

SQL> 
SQL> delete from sys.aud$;

3 rows deleted.

SQL> select statementid,entryid,username,action_name,returncode,owner,
  2  obj_name,substr(priv_used,1,8) priv,  SES_ACTIONS
  3  from dba_audit_trail
  4  order by sessionid,entryid;

STATEMENTID    ENTRYID USERNAME   ACTION_NAME       RETURNCODE OWNER      OBJ_NA
----------- ---------- ---------- ----------------- ---------- ---------- ------
PRIV     SES_ACTIONS
-------- -------------------
         10          3 JEFF      UPDATE                     0 SYS        AUD$

         12          5 JEFF      DELETE                     0 SYS        AUD$

2 rows selected.

SQL> 
SQL> connect sys/newdbapassword as sysdba
Connected.
SQL> noaudit insert, select, update, delete on sys.aud$;

Noaudit succeeded.

SQL> 
SQL> spool off

ファイングレイン監査

この章の前半と第8章で説明したように、標準のOracle監査は高度に構成できます。標準の監査証跡では、環境または問合せ結果に関する情報も含めて、権限やオブジェクト・アクセスの監査、あるいは(オプション)SQL使用の監視を行うファクトの固定セットが提供されています。標準監査の範囲はトリガーを使用して大幅に拡張することもできるため、その他のカスタマイズ情報を提供できます。

ただし、標準監査には、不要な監査を最小限に抑え、アクセス権の違反を実証するという2つの監査上の目標に直接対応するメカニズムがありません。アクセス・ログはイベントを再構築する際には役に立ちますが、決定的ではないことがよくあります。

ファイングレイン監査はこれらのニーズに対応しており、ユーザーは詳細な監査条件を指定することによって、標準監査よりも詳細な監査を実施でき、不適切な監査または不要な監査を最小限に抑えることができます。ファイングレイン監査を使用可能にするときに、AUDIT_TRAILを設定する必要はありません。適切と思われるFGA方針を追加および削除して、監視する特定の操作またはオブジェクトに適用します。データベースに組み込まれている監査メカニズムによって、ユーザーは監査を回避できません。ファイングレイン監査レコードは、SYS.FGA_LOG$表に格納され、DBA_FGA_AUDIT_TRAILビューを介してアクセスできます。


注意:

DBA_COMMON_AUDIT_TRAILビューは、標準監査とファイングレイン監査のログ・レコードを結合します。 


関連項目:

方針を追加、削除、使用可能または使用禁止にするには、「DBMS_FGAパッケージ」を使用します。 

ファイングレイン監査の方針

ファイングレイン監査で設定する方針によって、データ・アクセスを内容に基づいて監視できます。方針を使用すると、監査レコードを作成する列および条件を指定できます。指定した列で使用される特定タイプのDML文に監査を限定するなどの条件を設定できます。また、監査イベントの発生時にコールするルーチン名を指定できます。このルーチンにより、エラーや例外を管理者に通知または警告できます。

たとえば、ほとんどの企業では、開発中の製品の仕様やそのテスト結果へのアクセスを論理的に制限したり、給与情報へのアクセスを本人に限定する必要があります。監査人には、アクセスされたデータを判別するための十分な詳細情報が必要です。

特定のユーザーによって特定の表に対してSELECT権限が使用されたということがわかるだけでは、アカウンタビリティを提供するには十分ではありません。中央税務当局にもプライバシに関する同様の問題があり、職員によるデータの漏洩を防止するために所得申告に関する情報へのアクセスを追跡する必要があります。同様に、情報提供者を使用する政府機関では、情報提供者の識別情報が含まれるデータベースへのアクセスを詳細に追跡する必要があります。このような機関では、JEFFTAXPAYERS表またはINFORMANTS表でSELECT権限を使用したというような単純な情報ではなく、アクセスされたデータを判別するための十分な詳細情報も必要です。

トリガーと比較した場合のファイングレイン監査の利点

ファイングレイン監査では、トリガーより優れた機能(および効率性)を提供することによってこれらのニーズを満たします。トリガーでは、処理するすべての行に対してPL/SQLプロセス・コールが行われ、監査レコードが作成されるのは関連列がDML文によって変更された場合のみです。

これに対して、ファイングレイン監査方針では、すべての行に対して監査が行われることはありません。かわりに、すべての方針に対して1回のみ監査が行われます。特に、指定の関連列が指定したタイプのDML文で使用されているときに、その文によって列が変更された場合やその選択基準で使用されている場合に監査されます。この基準の組合せでは、DML文の選択基準の使用のみを理由にして、情報の収集を隠そうとするユーザーが検出されます。トリガーでは、同じオブジェクトに対する別のINSTEAD OFトリガーのアクティビティを監視できないのに対して、ファイングレイン監査では表とビューがサポートされます。

イベント・ハンドラ機能を使用した拡張可能インタフェース

組織では、このようにファイングレイン監査方針を定義して、監査イベントをトリガーするデータ・アクセス条件を指定できます。これらの方針では、トリガー・イベントの発生時に管理者に通知する柔軟なイベント・ハンドラを使用できます。たとえば、人事部社員に従業員の給与に関する情報へのアクセスを許可しながら、500,000ドルを超える給与にアクセスした場合に監査イベントをトリガーできます。監査方針(SALARY > 500000)は、監査方針インタフェース(PL/SQLパッケージDBMS_FGA)を介してEMPLOYEES表に適用されます。

監査関数(handler_module)は、管理者用の警告メカニズムです。監査関数に必要なインタフェースは、次のとおりです。

PROCEDURE fname ( object_schema VARCHAR2, object_name VARCHAR2, policy_name VARCHAR2 )  
AS ...

各項目の意味は次のとおりです。

ファイングレイン監査における関数と関連列

実装時の柔軟性を向上させるため、ユーザー定義の関数を使用して方針の条件を決定し、監査列(関連列と呼びます)を識別して監査方針をさらに詳細に設定できます。たとえば、関数を使用すると、$250,000を超える給与へのアクセスが行われた場合にのみ監査レコードを作成できます。

関連列を指定すると、問合せで特定の列が参照されたときにのみ監査がトリガーされるため、不適切または不要な監査レコードの発生を削減できます。たとえば、従業員名がアクセスされたときのみ、役員の給与へのアクセスを監査できます。これは、人事部社員が対応する従業員名を選択していなければ、給与情報へのアクセスのみでは意味がないためです。このような場合は、すべての関連列が参照される場合にのみ監査を実行するように指定できます。

関連監査列が複数指定されている場合は、SQL文でこれらの監査列のいずれかが参照された場合に監査レコードが生成されます。

DBMS_FGAパッケージは、このような値ベースの監査方針を管理します。セキュリティ管理者はDBMS_FGAパッケージの関数を使用して、ターゲット・オブジェクトの監査方針を作成します。

関連項目:

 

ファイングレイン監査の監査レコード

問合せブロックから戻された行が監査条件と一致すると、ファイングレイン監査証跡に監査イベント・エントリが挿入されます。このエントリには、ユーザー名、SQLテキスト、バインド変数、方針名、セッションID、タイムスタンプおよびその他の属性が含まれます。 trueと評価されたすべてのFGA方針に対して、1行の監査情報のみが監査証跡に挿入されます。拡張フレームワークの一部として、管理者はオプションでイベントを処理する適切な監査イベント・ハンドラを定義することもできます。たとえば、監査イベント・ハンドラは管理者に警告ページを送信できます。

NULL監査条件

指定列(audit_column)に影響を与える指定アクション(statement_types)の監査が確実に行われるようにするには、audit_conditionにNULLを指定(または指定を省略)します。この指定はTRUEとして解釈されます。NULLを指定するだけで、指定列(audit_column)に影響を与える指定アクション(statement_types)の監査が保証されます。このような監査を規定するために監査条件1=1を指定する従来の方法は使用しないでください。この指定では必要な結果が確実に生成されません。NULLを指定すると、行が処理されなかった場合にも監査が行われるため、この方針が設定されたaudit_columnですべてのアクションが監査されます。


注意:

空文字列の使用はNULLと等価ではなく、この方針が設定された表のすべてのアクションの監査が確実に行われるとはかぎりません。 


監査関数は自律型トランザクションとして実行され、handler_moduleのアクションのみをコミットし、ユーザー・トランザクションはコミットしません。この関数はユーザーのSQLトランザクションには影響を与えません。

監査条件にNULLが指定されているか、何も指定されていない場合は、その方針が設定された表に対するアクションが行われると、行が戻されるかどうかに関係なく監査レコードが作成されます。

FGA方針の定義

管理者はDBMS_FGA.ADD_POLICYインタフェースを使用して、SELECTUPDATEDELETEまたはINSERT文の組合せを識別する、表またはビューの各FGA方針を定義します。Oracleでは、INSERTおよびUPDATEの基礎となるアクションを監査することによって、MERGE文もサポートされます。MERGEを監査するには、これらのINSERTおよびUPDATEにFGAを設定します。正常終了したMERGEに対して、方針ごとに1レコードのみ生成されます。

表またはビューに関連付けられたFGA方針では、関連列を指定して、特定の列に影響を与える指定されたすべての文タイプが監査されるようにすることもできます。1つのFGA方針に、関連列として複数の列を指定できます。この例には、社会保障番号、給与、病歴が含まれる列など、プライバシに関連した列があります。関連列が指定されていない場合、監査はすべての列に適用されます。つまり、すべての関連列が参照される場合にのみ監査が行われることを方針で指定していないかぎり、指定した文タイプがいずれかの列に影響を与える場合は必ず監査が行われます。

ファイングレイン監査に追加された利点

通常、ファイングレイン監査方針は、選択的監査の条件として表オブジェクトに対する単純なユーザー定義SQL条件に基づいています。フェッチ中に戻される行が方針の条件を満たすと、その問合せが監査対象となります。方針で指定している場合、Oracle Databaseは後で自律型トランザクションを使用してユーザー定義の監査イベント・ハンドラを実行し、イベントを処理できます。

ファイングレイン監査をユーザー・アプリケーションに実装するには、DBMS_FGAパッケージを使用する方法と、データベース・トリガーを使用する方法があります。

次の例は、表hr.empの文(INSERTUPDATEDELETEおよびSELECT)を監査し、sales部門の従業員レコードのsalary列にアクセスする問合せを監視する方法を示しています。

DBMS_FGA.ADD_POLICY(
object_schema => 'hr',
object_name   => 'emp',
policy_name   => 'chk_hr_emp',
audit_condition => 'dept = ''SALES'' ', 
audit_column => 'salary'
statement_types => 'insert,update,delete,select');

この結果、次のいずれかのSQL文を発行すると、データベースに監査イベント・レコードが記録されます。

SELECT count(*) FROM hr.emp WHERE dept = 'SALES' and salary > 10000000;

SELECT salary FROM hr.emp WHERE dept = 'SALES';

DELETE from hr.emp where salary >1000000

関連するすべての情報とトリガー形式のメカニズムが使用可能な場合、管理者は、記録内容と監査イベントの処理方法を定義できます。

次のコマンドを考えてみます。

/* create audit event handler */
CREATE PROCEDURE sec.log_id (schema1 varchar2, table1 varchar2, policy1 varchar2) AS
BEGIN
UTIL_ALERT_PAGER(schema1, table1, policy1);      -- send an alert note to my pager
END;

/* add the policy */
DBMS_FGA.ADD_POLICY(
object_schema => 'hr',
object_name   => 'emp',
policy_name   => 'chk_hr_emp',
audit_condition => 'dept = ''SALES'' ', 
audit_column => 'salary',
handler_schema => 'sec',
handler_module => 'log_id',
enable               =>  TRUE);


注意:

schemaおよびtableは予約語であるため、この例のように1を追加するなどの変更を加えないと変数として使用できません。 


まず、関連のある行をフェッチした後、イベントが記録され、監査関数SEC.LOG_IDが実行されます。生成された監査イベント・レコードは、SYSTEM表領域のSYSスキーマのfga_log$であるDBA_FGA_AUDIT_TRAILに格納されます。この表には、SQLテキスト、方針名および他の情報を記録するために予約された列(SQL_TEXTSQL_BINDなど)があります。SQLBINDおよびSQLTEXT値は、方針でaudit_trail = DBMS_FGA.DB + DBMS_FGA.EXTENDEDが指定されている場合にのみ、fga_log$LSQLTEXTおよびLSQLBIND列に記録されます。方針にAUDIT_TRAIL=DBMS_FGA.XMLと指定されている場合、監査レコードはXML形式のOSファイルに書き込まれます。


注意:

  • ファイングレイン監査は、コストベースの最適化でのみサポートされています。ルールベースの最適化を使用する問合せでは、行フィルタを適用する前に監査が行われるため、不要な監査イベント・トリガーが発生します。

  • フラッシュバック問合せに含まれるオブジェクトで現在有効な方針が、指定したフラッシュバック・スナップショット(時間またはSCNに基づく)から戻されたデータに適用されます。

 

関連項目:

  • ファイングレイン監査の使用方法の詳細は、『Oracle Databaseアプリケーション開発者ガイド-基礎編』を参照してください。

  • 『PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』の「DBMS_FGA」

 

DBMS_FGAパッケージ

DBMS_FGAパッケージは、ファイングレイン・セキュリティ機能を提供します。監査方針を管理するには、DBMS_FGAに対するEXECUTE権限が必要です。監査関数はユーザー環境およびアプリケーション・コンテキスト値をすべて獲得できるため、方針を管理できるのは権限を付与されたユーザーに限定されます。

この機能は、コストベースの最適化にのみ使用できます。ルールベースのオプティマイザでは、行フィルタの前に監査の監視が発生する可能性があるため、不要な監査レコードが生成される場合があります。ルールベースのオプティマイザおよびコストベースのオプティマイザのどちらの場合でも、DBA_FGA_AUDIT_TRAILを参照して、SQLテキストおよび対応して発行されるバインド変数を分析できます。

次の各項で、このパッケージのプロシージャについて説明します。

各プロシージャの構文、パラメータおよび使用上の注意では、デフォルトおよび適用される制限事項についても説明します。

ADD_POLICYプロシージャ

このプロシージャは、監査条件として提供された述語を使用して、監査方針を作成します。表オブジェクトまたはビュー・オブジェクトに設定可能なFGA方針の最大数は256です。

構文

DBMS_FGA.ADD_POLICY(
   object_schema   VARCHAR2, 
   object_name     VARCHAR2, 
   policy_name     VARCHAR2, 
   audit_condition VARCHAR2, 
   audit_column    VARCHAR2, 
   handler_schema  VARCHAR2, 
   handler_module  VARCHAR2, 
   enable          BOOLEAN, 
   statement_types VARCHAR2,
   audit_trail     BINARY_INTEGER IN DEFAULT,
   audit_column_opts BINARY_INTEGER IN DEFAULT);

パラメータ

表 12-3    ADD_POLICYプロシージャのパラメータ 
パラメータ  説明  デフォルト値 

object_schema 

監査するオブジェクトのスキーマ。(NULLの場合は、現在のログイン・ユーザー・スキーマが使用されます。) 

NULL 

object_name 

監査するオブジェクトの名前。 

policy_name 

方針の一意の名前。 

audit_condition 

監視条件を示す行の条件。NULLの指定が可能で、TRUEと同様に動作します。 

NULL 

audit_column 

アクセスのチェックを行う列。非表示列も含めることができます。デフォルトはNULLで、列がアクセスされるか、影響を受けた場合に監査が行われます。 

NULL 

handler_schema 

イベント・ハンドラを含むスキーマ。デフォルトはNULLで、現行のスキーマが使用されます。 

NULL 

handler_module 

イベント・ハンドラのファンクション名。必要に応じてパッケージ名も含みます。問合せで監査条件に一致する最初の行が処理された後にのみ起動されます。プロシージャが例外で異常終了した場合は、ユーザーのSQL文も異常終了します。 

NULL 

enable 

方針を使用可能にするかどうか。TRUEの場合、使用可能にします。 

TRUE 

statement_types 

この方針を適用できるSQL文のタイプ。INSERTUPDATEDELETEまたはSELECTのみです。 

SELECT 

audit_trail 

ファイングレイン監査証跡を書き込む場所およびLSQLTEXTLSQLBINDの移入の有無。 

DB+EXTENDED 

audit_column_opts 

文の監査が、audit_columnパラメータで指定されたいずれかの列が問合せで参照されたときに実行されるか、または指定されたすべての列が参照されたときにのみ実行されるかを設定します。 

ANY_COLUMNS 

使用上の注意

使用上の注意は、次のとおりです。

V$XML_AUDIT_TRAILビュー

audit_trailパラメータに新しい値(XMLおよびXML,EXTENDED)を使用すると、ファイングレイン監査レコードはXML形式でオペレーティング・システム・ファイルに書き込まれます。

オペレーティング・システム・ファイルに格納された監査レコードは、DBAにはないファイル権限をアクセス時に必要とするため、データベースに格納された監査レコードよりも安全です。また、オペレーティング・システムに監査レコードを格納すると、データベースが一時的にアクセス不可能な状態でも監査レコードが使用可能であるため、可用性が向上します。

新しい動的ビューであるV$XML_AUDIT_TRAILを使用すると、SQL問合せを介してDBAがXMLファイルの監査レコードを使用できるようになるため、利便性が向上します。このビューを問い合せると、AUDIT_FILE_DESTディレクトリ内のすべてのXMLファイル(.xml格納子を持つすべてのファイル)が解析され、リレーショナル表の形式で表示されます。

DBA_COMMON_AUDIT_TRAILビューには、標準およびファイングレイン監査レコードのV$XML_AUDIT_TRAIL動的ビューの内容が含まれます。

監査XMLファイルは、すべてのプラットフォームで.xml拡張子を持つファイルに格納されるため、動的ビューには、次のスキーマを使用してすべてのプラットフォームで監査情報が同じように表示されます。

表 12-4    V$XML_AUDIT_TRAIL動的ビューの要素 
要素   

AUDIT_TYPE (注意1を参照) 

NUMBER 

CLIENT_ID 

VARCHAR2(64) 

COMMENT_TEXT 

VARCHAR2(4000) 

DB_USER 

VARCHAR2(30) 

ENTRYID 

NUMBER 

EXT_NAME 

VARCHAR2(4000) 

EXTENDED_TIMESTAMP(注意1を参照) 

TIMESTAMP(6) WITH TIME ZONE 

GLOBAL_UID 

VARCHAR2(32) 

INSTANCE_NUMBER 

NUMBER 

OBJECT_NAME 

VARCHAR2(128) 

OBJECT_SCHEMA 

VARCHAR2(30) 

OS_PROCESS(注意3を参照) 

VARCHAR2(16) 

OS_USER 

VARCHAR2(255) 

POLICY_NAME 

VARCHAR2(30) 

PROXY_SESSIONID 

NUMBER(注意3を参照) 

SCN 

NUMBER 

SESSION_ID 

NUMBER 

SQL_BIND(注意2を参照) 

VARCHAR2(4000) 

SQL_TEXT(注意2を参照) 

VARCHAR2(4000) 

STATEMENT_TYPE 

VARCHAR2(28) 

STATEMENTID 

NUMBER 

TERMINAL 

VARCHAR2(255) 

TRANSACTIONID 

RAW(8) 

USERHOST 

VARCHAR2(128) 

注意1: AUDIT_TYPE列には、1(標準XML監査)、2(ファイングレインXML監査)、4(SYS XML監査)、8(必須XML監査)が表示されます。すべてのXML監査レコードには、要素Audit_TypeおよびExtended_Timestamp(UTCゾーンで出力されますが、タイムゾーン情報はありません)が含まれます。V$XML_AUDIT_TRAILビューを使用して取得された値は、セッション・タイムゾーンに変換されて出力されます。

注意2: SQL_TEXTおよびSQL_BIND要素値(CLOB型の列)の場合、動的ビューには最初の4000文字のみが表示されます。基礎となるXMLファイルには、SQL_TEXTおよびSQL_BIND値として4000以上の文字が含まれることがあります。

注意3: UNIXシステムの場合はOS_PROCESSです。Windowsシステムの場合、ラベルはProcessId:ThreadId(スレッドとして動作していない場合はProcessId)です。

注意4: XML監査ファイルが多数ある場合、これらのファイルがSQL*Loaderまたはこれと同様のツールを使用してデータベース表にロードされると、V$XML_AUDIT_TRAILの問合せ処理が速くなります。XML監査ファイルは、AUDIT_TRAIL=OSの場合にOSファイルに書き込まれる同等のファイルよりも大きくなります。

エラー処理は、AUDIT_TRAIL=OSの場合と同じです。AUDIT_FILE_DESTによって識別されるディレクトリがいっぱいの場合など、監査レコードをディスクに書き込むときにエラーが発生すると、監査操作は失敗します。この場合、アラート・メッセージが記録されます。

DBMS_FGA.ADD_POLICY (object_schema => 'scott', object_name=>'emp', policy_name => 
'mypolicy1', audit_condition => 'sal < 100', audit_column =>'comm, credit_card, 
expirn_date', handler_schema => NULL, handler_module => NULL, enable => TRUE, 
statement_types=> 'INSERT, UPDATE', audit_trail => DBMS_FGA.DB+DBMS_FGA.EXTENDED, 
audit_column_opts => DBMS_FGA.ALL_COLUMNS); 

DISABLE_POLICYプロシージャ

このプロシージャは、監査方針を使用禁止にします。

構文

DBMS_FGA.DISABLE_POLICY(
   object_schema  VARCHAR2, 
   object_name    VARCHAR2, 
   policy_name    VARCHAR2 ); 

パラメータ

表 12-5    DISABLE_POLICYプロシージャのパラメータ 
パラメータ  説明 

object_schema 

監査するオブジェクトのスキーマ(NULLの場合、現在のログイン・ユーザー・スキーマが使用されます)。 

object_name 

監査するオブジェクトの名前。 

policy_name 

方針の一意の名前。 

object_schemaのデフォルト値はNULLです。(NULLの場合は、現在のログイン・ユーザー・スキーマが使用されます。)

DROP_POLICYプロシージャ

このプロシージャは、監査方針を削除します。

構文

DBMS_FGA.DROP_POLICY(
   object_schema  VARCHAR2, 
   object_name    VARCHAR2, 
   policy_name    VARCHAR2 );

パラメータ

表 12-6    DROP_POLICYプロシージャのパラメータ 
パラメータ  説明 

object_schema 

監査するオブジェクトのスキーマ。(NULLの場合は、現在のログイン・ユーザー・スキーマが使用されます。)

 

object_name 

監査するオブジェクトの名前。 

policy_name 

方針の一意の名前。 

使用上の注意

DBMS_FGAプロシージャは、現行のDMLトランザクションがある場合は、これらがDDLイベント・トリガーの内部にないかぎり、操作前にコミットします。DDLトランザクションでは、DBMS_FGAプロシージャは、DDLトランザクションの一部となります。 object_schemaのデフォルト値はNULLです。(NULLの場合は、現在のログイン・ユーザー・スキーマが使用されます)。

ENABLE_POLICYプロシージャ

このプロシージャは、監査方針を使用可能にします。

構文

DBMS_FGA.ENABLE_POLICY(
   object_schema  VARCHAR2,
   object_name    VARCHAR2,
   policy_name    VARCHAR2,
   enable         BOOLEAN);

パラメータ

表 12-7    ENABLE_POLICYプロシージャのパラメータ 
パラメータ  説明 

object_schema 

監査するオブジェクトのスキーマ。(NULLの場合は、現在のログイン・ユーザー・スキーマが使用されます。) 

object_name 

監査するオブジェクトの名前。 

policy_name 

方針の一意の名前。 

enable 

TRUE(デフォルト)の場合、方針を有効化します。 


戻る 次へ
Oracle
Copyright © 2003, 2008, Oracle Corporation.
All Rights Reserved.
目次
目次
索引
索引