RDS Oracle 監査~基本編~

  • Audit
  • Oracle
  • RDS
  • RDS Oracle の監査機能

    今回は、RDS Oracle の監査機能についてみていきたいと思います。

    私が確認したバージョンは『 Oracle Standard Edition Two 19c 』です。

    一通り理解するまでに結構な時間が掛かってしまいました。

    Oracle には何と、2つの監査機能が存在する

    Oracle には『従来型監査』と『統合監査』という2つの監査機能が存在します。

    どちらを使っても、きめ細かな監査設定が可能です。

    そして、現時点(2020年6月)では統合監査機能は RDS Oracle で使用できません

    AWS公式ドキュメントに記載があります。

    実はこの統合監査機能は Oracle 12c から搭載されている機能で、ゆくゆくは統合監査機能が使用され、従来監査機能は廃止になるそうです。

    ただ、現状においては、RDS Oracle 19c が最新であり、従来監査機能しか使用できないため、今回は従来監査機能を紹介します。

    Oracle の従来監査機能

    私は普段、DataBase に関しては MySQL や PostgreSQL を使用する頻度が多いのですが、Oracle を使ってみてまず驚いたのが公式ドキュメントの充実っぷりです。

    さすが、日本のエンタープライズ領域において多く利用されているだけはありますね。

    従来監査機能の3オプション

    SQLレファレンスに記載がありますが、従来監査機能には主に以下の3種類のオプションが用意されています。

    • Table 12-1 SQL Statement Shortcuts for Auditing
    • Table 12-2 Additional SQL Statement Shortcuts for Auditing
    • Table 12-3 Schema Object Auditing Options

    日本語だと以下のように書いてあります。

    • 表12-1 監査のSQL文ショートカット
    • 表12-2 監査のその他のSQL文ショートカット
    • 表12-3 スキーマ・オブジェクト監査オプション

    これを、権限監査、文監査、オブジェクト監査という言葉で分けているサイトが多いですね。私もそのように先輩から教わりました。

    ただ、分かりやすい言葉で説明されても、その本質が上手く表現されていないとかえって理解しにくいものです。

    個人的にはOracle公式ドキュメントを読んだ方が理解が進みました。

    Oracle の従来監査機能をざっくり解説

    データベース監査のログ取得で考えるべきことは、『いつ』『誰が』『何を』『どのように』『どうした』ということの証跡を残すことです。

    ただ、全部のログを取るとパフォーマンス低下が著しいので、監査対象のログを絞りましょう。という話になります。

    そして、その監査ログを絞る条件をどのように設定できるかが、従来監査機能の3つのオプションです。

    ざっくり、こういうことです。

    従来監査機能の3つのオプションを表にしました。

    対象 オプション
    12-1 user/role 監査のSQL文ショートカット
    12-2 user/role 監査のその他のSQL文ショートカット
    12-3 table/view スキーマ・オブジェクト監査オプション

    まずは、対 user/role に関する設定オプションなのか、対 table/view に対する設定なのか、という違いがあるということです。

    たとえば、対 user/role に対するオプションとしては、USER があります。これは以下で設定できます。

    -- 12-1 user/role 監査のSQL文ショートカット audit USER by koizumi;

    ※青いコメントは、表12-1 の 対象が user/role である「監査のSQL文ショートカット」の設定を使っています、という意味です。

    上記の SQL で、ユーザー koizumi に対して、USER 操作( CREATE USER / ALTER USER / DROP USER )を全て監査ログで取得するようになります。

    対 table/view に対するオプションとしては、SELECT があります。

    -- 12-3 table/view スキーマ・オブジェクト監査オプション audit SELECT on koizumi.table_name by access;

    テーブル table_name に対して、SELECT が発行された場合、全て監査ログで取得するようになります。

    SELECT の監査にも色々ある

    もう一歩踏み込んで説明します。

    たとえば、あるテーブル(koizumi.kojinjoho_table)に、個人情報が格納されているとします。このテーブル(koizumi.kojinjoho_table)に対する SELECT については全て監査ログで残したい。

    とした場合、以下の設定を行います。

    -- 12-3 table/view スキーマ・オブジェクト監査オプション audit SELECT on koizumi.kojinjoho_table by access;

    では、別のケースで、アプリ以外からテーブル(koizumi.kojinjoho_table)にアクセスできるのは管理者(admin)だけなので、管理者(admin)の SELECT さえ見ておけばいい。

    念のため、管理者(admin)がどんなテーブルを見たか、すべて記録しておきたい。

    とした場合は、以下のような設定をします。

    -- 12-2 user/role 監査のその他のSQL文ショートカット audit SELECT TABLE by admin by access;

    このように対 user/role に関する設定が適しているか、対 table/view に対する設定が適しているか、臨機応変に使い分けます。

    ただし、実際の現場では、テーブルが増えたり減ったりすることは往々にしてあるので、その度に設定変更するのは面倒なので、SELECT は全部監査してしまおうということもあります。

    -- 12-2 user/role 監査のその他のSQL文ショートカット audit SELECT TABLE by access;

    このように by admin を外せば、ALL USER が対象です。これで全ユーザーの SELECT が監査されます。

    まとめ

    Oracle の従来監査機能は3つの設定オプションがあります。

    対象 オプション
    12-1 user/role 監査のSQL文ショートカット
    12-2 user/role 監査のその他のSQL文ショートカット
    12-3 table/view スキーマ・オブジェクト監査オプション

    user/role に対して監査したければ、表12-1 監査のSQL文ショートカット、表12-2 監査のその他のSQL文ショートカットを使用します。

    table/view に対するアクセスだけ監査したければ、表12-3 スキーマ・オブジェクト監査オプションを使用します。

    今日はここまで。

  • Audit
  • Oracle
  • RDS