データベースの監査ログ

  • Audit
  • スポンサーリンク

    なぜ、監査ログを取るのか

    個人情報保護法案、日本版SOX法、PCIDSS、GDPRといったガイドラインが存在します。

    そこには、個人情報に対するいかなる操作もログに記録し長期間保管しなければいけない。また、操作ログを改ざんされたり、漏洩しないよう、万全の対策を施さねばならない。

    といったようなことが書かれています。もちろん、大手の企業はそういったいわゆるガイドラインへの対応はきっちり行っています。

    データベースの監査機能

    どんなデータベースにも監査ログを取得する機能が備わっています。

    ただし、バージョンによって監査ログを収集する機能が異なる場合が往々にしてあります。

    そのため、監査ログの要件を詰めるときは、対象のデータベースでどんなログが取得できるか、調査が必要です。

    監査ログの中身は?

    具体的に言うと以下の要素になります。

    • 誰が:user
    • 何を:object(table, column)
    • いつ:time
    • どこから:ip, hostname
    • どのように:DML(select,insert,update,delete)、DDL(create,drop,alter)

    厳密にはこれだけではありませんが、ざっくり説明しますと、このような感じです。

    パフォーマンス低下

    上で述べたガイドラインにあるように、監査ログは取得しなければいけないのですが、実際にやろうとすると色々問題があります。

    監査ログを取得するというのは、データベースに非常に負荷が掛かります。

    たとえば、このデータベースには個人情報がたくさん入っているので、データベース上で実行されるSQL全てを記録する必要があった、とします。

    通常のOLTPのシステムで、毎日数千人以上が利用するような場合、発行されるSQLは膨大な量になりますし、それを全て監査ログにして出力した場合、ピーク時のデータベースへの負荷は跳ね上がります。

    そのため、いかにパフォーマンスへの影響を抑えるか、考えなければいけません。

    その解決法として、たとえば、必要最小限のログ量に抑えるという方法があります。

    • 個人情報のあるテーブルを参照できるのは USER01 だけなので、USER01 の監査ログだけを取得する。
    • 個人情報があるテーブルは一つだけなので、そのテーブルに対する SELECT だけ監査ログを取得する。
    • 特定のテーブルの特定の列だけ監査する。

    といった具合です。そのために、監査ログのフィルター機能が備わっているデータベースも存在します。

    ログが見にくい

    基本的にデータベースから出力されるログはテキスト、XML、JSON形式などです。

    それが1日に数GB、月に数TB、年間で数十TBと膨れ上がります。

    何か怪しいアクセスはなかったか、といったことを後から調査する際、そのまま保存したのでは調べにくいです。

    そのため、調べやすいようまとめておく必要があります。

    そこで活躍するのが、統合ログ監視ツールと呼ばれるものです。google で検索すると色々と出てくると思います。

    自分でやろうとすると結構大変なので、そういったツールに任せるのが得策です。

    お金に余裕があれば、例えば AWS には Splunk という高価なログ収集ツールがありますので、そういったものを利用するのも手です。

    データベースの監査は一筋縄ではいかない

    私は仕事柄、データベースの領域を中心に扱っておりますが、データベース監査は考慮することが多いです。

    • データベースの種類・バージョンによって、ログの設定方法やログの中身が異なる。
    • ログの改ざんや漏洩のないよう、セキュリティを設計しなければいけない。
    • 統合ログ監視ツールの導入など、ログの可視化の仕組みを作らなければいけない。
    • 運用中の監査設定の変更追加削除など、手段や手続きを定めないといけない。

    監査は抜けや漏れが許されない重要な業務です。各企業毎に監査方針は異なりますので、柔軟に対応していくしかないですね。

  • Audit
  • スポンサーリンク