監査ログは、追加モジュールのfile_fdwを使用することで、SQLでアクセスすることができます。ここでは、専用ログファイルに出力したSession Audit Loggingを例に監査ログを参照する方法を説明します。
file_fdwのインストール
CREATE EXTENSIONを使用し、file_fdwをエクステンションとしてインストールします。
$ psql =# CREATE EXTENSION file_fdw; =# \dx List of installed extensions Name | Version | Schema | Description ---------+---------+------------+------------------------------------------- file_fdw | 1.0 | public | foreign-data wrapper for flat file access pgaudit | 1.0 | public | provides auditing functionality plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language (3 rows)
外部サーバの作成
CREATE SERVERを使用し、file_fdwで管理する外部サーバを作成します。
$ psql =# CREATE SERVER auditlog FOREIGN DATA WRAPPER file_fdw;
監査ログのテーブルの作成
CREATE FOREIGN TABLEを使用し、監査ログのテーブルのカラム、CSVファイル名とフォーマットを定義します。
$ psql =# CREATE FOREIGN TABLE auditlog ( header text, class text, sql_start_time timestamp with time zone, remote_host_name text, backend_process_id text, application_name text, session_user_name text, database_name text, virtual_transaction_id text, statement_id text, substatement_id text, command_tag text, sqlstate text, object_type text, object_name text, error_message text, sql text, parameter text ) SERVER auditlog OPTIONS ( filename '/database/inst1/pgaudit_log/pgaudit-2017-03-12.log', format 'csv' );
注意
監査ログファイルをローテーションさせて複数の監査ログファイルが存在する場合は、それぞれの監査ログファイルに対してテーブルを作成する必要があります。
監査ログの参照
SELECTを使用し、監査ログを参照します。
$ psql =# SELECT * FROM auditlog; header | class | sql_start_time | remote_host_name | backend_process_id ... ----------------+---------+------------------------+------------------+------------------- ... AUDIT: SESSION | WRITE | 2017-03-12 19:00:49+09 | [local] | 19944 ... AUDIT: SESSION | READ | 2017-03-12 19:00:58+09 | [local] | 19944 ...