EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

データベース・セキュリティの実装 第2回 ログの取得と監査設計のポイント

edited by DB Online   2011/11/02 00:00

ファイングレイン監査

 ファイングレイン監査は指定した条件のデータに実際にアクセスがあった際に証跡を出力する。ファイングレイン監査はSELECT・INSERT・UPDATE・DELETEに対してのみしか設定ができないが、監査対象として表名だけではなく、列や条件の指定ができる。そのため、従業員表(表)の特定の部門の従業員(条件)の給与列(列)にアクセスがあった場合のみ監査するといった柔軟な設定が可能となり、不要な監査証跡の削減に役立つ。

 また、監査証跡出力時にオプションで任意のアクションをプログラムできる。たとえば、監査証跡表をデフォルトとは別に作成して監査レコードを出力したり、SNMPやメールで管理者にアラートを上げたりすることが可能だ。

ファイングレイン監査による詳細な監査設定
ファイングレイン監査による詳細な監査設定

 ファイングレイン監査の監査証跡の出力先もOSファイルとデータベース表(SYS.FGA_LOG$表)を選択できる。ファイングレイン監査の設定をおこなうDBMS_FGAパッケージでパラメータとして出力先を指定する。出力先にOSファイルを指定した場合には、AUDIT_FILE_DEST初期化パラメータで指定したディレクトリに出力される。

 ファイングレイン監査の監査証跡表もOracle Database 11gR2では、DBMS_AUDIT_MGMTパッケージを利用することで他の表領域に移動できる。監査証跡表を自動セグメント領域管理の表領域に移動することで、バッファビジーやキャッシュフュージョンによる待機を軽減可能であるため、該当バージョン利用の場合にはぜひ利用してほしい。

DBA監査

 Oracle DatabaseではSYSDBAおよびSYSOPER権限で接続したユーザーの接続、データベースの起動・停止に関して、必ずAUDIT_FILE_DEST初期化パラメータで指定した位置にログが出力される。このログ出力を停止することはできない。

 さらにAUDIT_SYS_OPERATIONS初期化パラメータをTRUEに設定することで、SYSDBAおよびSYSOPER権限で接続したユーザーのすべての操作を監査しOSファイルに出力できる。この監査はDBA監査と呼ばれる。

 なお、SYSユーザーによる操作は標準監査やファイングレイン監査の監査証跡には残らない。そのため、SYSユーザーを監査するためにはこのDBA監査が必須となる。

アプリケーション・コンテキストの利用

 WEBアプリケーションサーバーなど現在多くのシステムで利用されている、3層構造のアプリケーションでは、コネクションプールや代表ユーザーを利用するため、アプリケーションを利用している実際に利用者情報がデータベースから把握できず、データベースで監査をとっても実際に誰がそのSQL文を発行したかわからないことがある。

 Oracle Databaseでは、接続ごとにアプリケーションが任意の値を設定できるメモリ空間を定義できる。このメモリ空間はアプリケーション・コンテキストと呼ばれる。アプリケーション・コンテキストはアプリケーション開発者が独自に定義することもできるが、Oracleでは事前定義のアプリケーション・コンテキストを用意しており、その一つにCLIENT_IDENTIFIER属性がある。このCLIENT_IDENTIFIERに設定された値はすべての監査の監査証跡に含まれるため、アプリケーションはここに実際の利用者情報を格納しておくことで、データベースで実施した監査に実際の利用者情報を含めることができる。

CLIENT_IDENTIFIER属性を利用したアプリケーションユーザーの監査
CLIENT_IDENTIFIER属性を利用したアプリケーションユーザーの監査

 たとえば、コネクションプールを利用しているJAVAのアプリケーションを利用している場合、アプリケーションがデータベース処理をおこなうためにコネクションプールからコネクションを獲得するメソッドの中にCLIENT_IDENTIFIERを設定する命令を1行追加するだけで監査証跡にアプリケーションユーザーを含めることができる。

 アプリケーションサーバーを利用している場合、アプリケーションサーバーのコネクションプール設定画面からコネクション獲得時の追加処理としてアプリケーションユーザー名をCLIENT_IDENTIFIERにセットする処理を追加するだけでアプリケーション側には全く手を加えずに設定できる。

 CLIENT_IDENTIFERは、PL/SQL、Oracle Call Interface(OCI)およびJDBCドライバを利用して設定できる。詳細は「セキュリティ・ガイド」マニュアルのデータベースに認識されないアプリケーションユーザーの識別でのクライアント識別子の使用を参照してほしい。

 Oracle Databaseには、いままでに紹介した監査機能のほかにもデータの変更履歴を後から確認できる機能がある。変更履歴を確認することで、監査証跡だけからは分からない実際のデータの値の変化を確認することができる。今回は更新履歴を後から確認できる機能として、LogMinerとTotal Recallを紹介する。


著者プロフィール

  • oracletech.jp編集部(オラクルテックジェイピーヘンシュウブ)

    oracletech.jpは、オラクル・データベースと関連製品をお使いいただいている皆様、開発に携わっているエンジニアの皆様、オラクル製品を販売いただいている皆様すべてにとって有益な情報源となることを目指しています。 エンタープライズ系ITを中心に、製品情報や技術情報からテクノロジー・トレンド、キャンペーンやイベント/セミナー情報まで多岐にわたります。日本オラクルの社員だけでなく、外部の有識者やフリーランス・ライターを含む幅広い執筆陣により"ベンダー発"の枠を脱したコンテンツ発信を目指します。 好奇心が、エンジニア人生を豊かにする。 oracletech.jp

バックナンバー

連載:oracletechアーカイブス!
All contents copyright © 2007-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5