Oracle DBの監査ログを取得することになったので、その時のメモです。
Oracle DBでの監査ログ取得方法として、12c以降ですと以下2種類の方法が用意されているようです。
- 非統合監査(従来型監査)
- 今まであったOracle DB監査機能
- 本記事で取り上げる内容
- 統合監査
- 12cでの新機能
両者の比較、統合監査機能についての説明は、以下の公式資料より。
Oracle Database 12cで進化したセキュリティ機能
AWSのRDSでは、現在、混合モードの統合監査はサポートされているようですが、単独での統合監査はサポートされていないようです。
Amazon RDS Oracle では、次の Oracle データベース機能をサポートしています。
・ 統合監査、混合モード (バージョン 12.2 以降) 詳細については、Oracle ドキュメントの「混合モード監査」を参照してください。
Amazon RDS Oracle では、次の Oracle データベース機能はサポートしていません。
・ 統合監査、Pure モード
AWS RDS - Oracle データベースの機能のサポート
今回は、昔からある非統合監査機能を利用した方法を記載します。
環境情報
AWS RDSを利用しています。
- Oracle Standard Edition Two 12.2.0.1
出力ログ設定
デフォルトで出力される監査ログの形式は非常に解析しにくいので、XML形式で出力するよう設定しておきます。
初期化パラメータの AUDIT_TRAIL
の値を、 xml, extended
と指定します。extendの値をつけておくことで、実行されるSQL文やbind変数の値も、監査ログで取得してくれるようになります。
AWSではParamter Groupで指定することが可能です。パラメータグループの AUDIT_TRAIL
の値を変更後、RDSインスタンスを再起動します。
確認コマンド。
SQL> show parameters audit_trail NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ audit_trail string XML, EXTENDED
監査設定
用意されている監査機能の種類は、以下の4種類があります。
Oracle Direct Seminar - Oracleデータベースの監査
資料上は12cの記述がないですが、12cでもちゃんと使えます。下記にて詳細を確認していきます。
必須監査
必須監査とは、
監査が有効かどうかにかかわらず、デフォルトで監査されるアクティビティ。これらのアクティビティには、管理者権限でのインスタンスへの接続、データベースの起動、データベースの停止などがあります。これらのアクティビティは、オペレーティング・システム監査証跡に書き込まれます。
有無を言わさず有効となっている監査機能です。基本的なログを出力してくれています。
DBA監査
DBA監査の機能は、初期化パラメータの AUDIT_SYS_OPERATIONS
の値により管理されています。
AUDIT_SYS_OPERATIONSは、トップレベルの操作(SYSASM、SYSBACKUP、SYSDBA、SYSDG、SYSKMまたはSYSOPER権限で接続しているユーザーによって直接発行されたSQL文)の監査を有効または無効にします。(PL/SQLプロシージャ内またはファンクション内から実行されるSQL文は、トップレベルとはみなされません。)
SYSDBA等で接続したユーザーより発行されたSQL文を取得してくれるようです。
尚、AWS RDSでは、SYSユーザーやSYSTEMユーザーといった管理アカウントは、エンドユーザー側に公開されていません。そのため、AWS RDSでは、DBA的操作を実行するためのプロシージャを多数用意してくれています。
では、AWS側で用意されているDBAタスク用のプロシージャ実行時のログは、一体どこに出るのでしょうか。パラメータグループには AUDIT_SYS_OPERATIONS
の値も用意されており変更可能のようですが、上述のOracleマニュアルでは、 PL/SQLプロシージャ内またはファンクション内から実行されるSQL文は、トップレベルとはみなされません。
と記述ある通り、プロシージャによる操作はDBA監査の対象としてくれないようです。
しかしながら、下記で記載する 標準監査
の機能を利用すれば、プロシージャ実行の履歴は収集することができるので、そういった方法で対応するのが良いのかと思っています。
標準監査
標準監査とは、
標準監査では、SQL文、権限、スキーマ・オブジェクトおよびネットワーク・アクティビティを監査します。AUDIT SQL文を使用して標準監査を構成し、NOAUDITを使用してこの構成を解除します。監査レコードは、データベース監査証跡またはオペレーティング・システム監査ファイルに書き込むことができます。
上述のDBA監査では対応できない非DBA的操作を補える機能となります。この機能を利用するには、監査対象とする操作に対して、AUDIT SQL文にて事前に監査設定をしてあげる必要があります。
該当のAUDIT SQL文のリファレンスは下記。
実行するDBユーザは、RDSマスターユーザとなっています。上記のOracle DBのマニュアルによると、 AUDIT SYSTEMシステム権限
が必要とあります。
前提条件
SQL文の発行を監査するには、AUDIT SYSTEMシステム権限が必要です。
以下からサンプルたち。
ログイン・ログオフの操作を取得。
SQL> audit session;
ユーザーやロールに関する操作を取得。
SQL> audit user; SQL> audit role;
create, drop, truncate table
の実行処理を取得。
SQL> audit table;
admin
スキーマの sample
テーブルへの参照処理を取得。
SQL> audit select on admin.sample;
デフォルト監査オプションの設定。今後作成されたテーブルに対して、参照処理の監査を自動的に設定される。
SQL> audit select on default;
以下から、現在の監査設定を確認する方法。
システム全般に対する監査設定状況の確認。user_nameがnullになっているのは、全ユーザーが対象となっている設定です。
SQL> column user_name format a12 SQL> column proxy_name format a12 SQL> column audit_option format a20 SQL> column success format a12 SQL> column failure format a12 SQL> select * from DBA_STMT_AUDIT_OPTS; USER_NAME PROXY_NAME AUDIT_OPTION SUCCESS FAILURE ------------ ------------ -------------------- ------------ ------------ CREATE SESSION BY ACCESS BY ACCESS USER BY ACCESS BY ACCESS ROLE BY ACCESS BY ACCESS TABLE BY ACCESS BY ACCESS
オブジェクトに対する監査設定の確認する方法。
SQL> set linesize 160 SQL> column owner format a13 SQL> column object_name format a13 SQL> column object_type format a13 SQL> column alt format a5 SQL> column aud format a5 SQL> column com format a5 SQL> column del format a5 SQL> column gra format a5 SQL> column ind format a5 SQL> column ins format a5 SQL> column loc format a5 SQL> column ren format a5 SQL> column sel format a5 SQL> column upd format a5 SQL> column ref format a5 SQL> column exe format a5 SQL> column cre format a5 SQL> column rea format a5 SQL> column wri format a5 SQL> column fbk format a5 SQL> select * from DBA_OBJ_AUDIT_OPTS; OWNER OBJECT_NAME OBJECT_TYPE ALT AUD COM DEL GRA IND INS LOC REN SEL UPD REF EXE CRE REA WRI FBK ------------- ------------- ------------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ADMIN SAMPLE TABLE -/- -/- -/- -/- -/- -/- -/- -/- -/- A/A -/- -/- -/- -/- -/- -/- -/-
オブジェクトに対するデフォルト監査設定の確認。
SQL> set linesize 160 SQL> column alt format a5 SQL> column aud format a5 SQL> column com format a5 SQL> column del format a5 SQL> column gra format a5 SQL> column ind format a5 SQL> column ins format a5 SQL> column loc format a5 SQL> column ren format a5 SQL> column sel format a5 SQL> column upd format a5 SQL> column ref format a5 SQL> column exe format a5 SQL> column cre format a5 SQL> column rea format a5 SQL> column wri format a5 SQL> column fbk format a5 SQL> select * from ALL_DEF_AUDIT_OPTS; ALT AUD COM DEL GRA IND INS LOC REN SEL UPD REF EXE FBK REA ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -/- -/- -/- -/- -/- -/- -/- -/- -/- A/A -/- -/- -/- -/- -/-
設定した監査設定を削除する方法は、以下の noaudit
コマンドより。
安易に設定すると、当然ですがすごくログが出力されることになります。
FGA(ファイングレイン)監査
FGA監査とは、標準監査より細かく監査設定(収集したい情報の定義)をしたい場合に利用できる機能です。なお、この機能はEnterprise Editionでないと利用できません。
ファイングレイン監査では、ポリシーを作成して、監査が実行される特定の条件を定義できます。これにより、内容に基づいてデータ・アクセスを監視できるようになります。問合せと、INSERT、UPDATE、およびDELETE操作に対して詳細な監査を提供します。たとえば、中央の税務当局は、所員による権限外の閲覧を防止するために、どのデータがアクセスされたかを判断できる十分な詳細を使用して納税申告書へのアクセスを追跡する必要があります。特定の表に対して特定のユーザーによってSELECT権限が使用されたことを知るのみでは不十分です。ファイングレイン監査によって、完全な監視機能が実現します。
通常、ファイングレイン監査ポリシーは、選択的監査の条件である、表オブジェクトに対する単純なユーザー定義SQL述語に基づいています。フェッチ中に行がポリシーの条件を満たすと、その問合せが監査対象となります。
ファイングレイン監査を使用すると、次のタイプのアクションを監査できます。
・午後9時から午前6時の間、または土曜日と日曜日に表にアクセスする場合
・社内ネットワーク外部のIPアドレスを使用する場合
・表の列を選択または更新する場合
・表の列の値を変更する場合
設定を行うには、 DBMS_FGA
というパッケージ内にあるプロシージャを利用することになります。
以下はサンプル。 ADD_POLICY
というプロシージャにて、FGA監査設定を追加することができます。Enterprise Editionの環境がなかったので、下記SQL文の今回実行テストしていません。
BEGIN DBMS_FGA.ADD_POLICY( object_schema => 'admin', object_name => 'sample', policy_name => 'sample_fga_policy', audit_condition => 'col1 > 0', audit_column => 'col1,col2', handler_schema => NULL, handler_module => NULL, enable => TRUE, statement_types => 'SELECT', audit_trail => DBMS_FGA.XML + DBMS_FGA.EXTENDED, audit_column_opts => DBMS_FGA.ANY_COLUMNS); END; /
各パラメータの詳細については、上記のリファレンスリンクを確認してください。用意されているプロシージャには、定義のdropやdisableするためのものも用意されているので、その点に関しても公式リファレンスを参照すること。
設定されている情報は、以下の ALL_AUDIT_POLICIES
というViewより確認可能です。