SlideShare a Scribd company logo
Copyright © 2015 NTT DATA Corporation
2015年5月30日
NTTデータ 基盤システム事業本部
石井愛弓
PostgreSQL監査
PostgreSQLアンカンファレンス@東京 
2015/5
2Copyright © 2015 NTT DATA Corporation
目次
•  監査とは
•  PostgreSQLの監査
•  監査の課題
•  pg_audit紹介
•  まとめ
3Copyright © 2015 NTT DATA Corporation
監査とは
実際の業務が遵守すべきルールに則っているかどうかを、客観的に検証・指摘
する業務。
DBにおいては、不正アクセス・不正操作が無かったかどうか等の判断
を行う
•  監査情報は、アクセス/操作ログ。
•  不正なログインをしていないか?
•  重要な情報(クレジットカード情報等)を不正に抜き出していないか?…
etc
→ログは、部外者が閲覧や改ざんできないよう保護を行う。
・ログを確実にとること
・ログが改ざんされないようにすること
[DBの監査で重要なこと]
Copyright © 2015 NTT DATA Corporation 4
PostgreSQL監査
5Copyright © 2015 NTT DATA Corporation
どのタイミングでログを出力すべきか?
項目 必要な設定
1 ログイン log_connections=on
2
ログアウト log_disconnections =on
3
DBオブジェクト(テーブル等)の作成、
変更
log_statement=ddl
4
DBオブジェクト(テーブル等)の参照、
更新
log_statement=all
5 設定ファイル(postgresql.conf)の変更 OSでの監査が必要。
=# CREATE TABLE test (id integer, name varchar);
LOG: statement: CREATE TABLE test (id integer, name varchar);
6Copyright © 2015 NTT DATA Corporation
監査で必要な情報は何か?(log_statement以外の項目)
1 いつ タイムスタンプ
2 だれが データベースユーザ名
3 どこから 接続元IP/接続元ホスト名
4 どのデータベースに データベース名
5 どんな処理をして コマンドタグ
6
どのような結果になっ
たか
SQLSTATE エラーコード
7Copyright © 2015 NTT DATA Corporation
log_line_prefixによる情報の取得
postgresql.conf にて
log_line_prefix = ‘%t  %u  %h  %d  %i  %e‘
2015-05-19 15:21:37 JST  hoge  [local]  postgres  authentication 00000
タイムスタンプ ユーザ ホスト DB コマンドタグ エラーコード
8Copyright © 2015 NTT DATA Corporation
(参考)log_line_prefix
エスケープ 効果 セッションのみ
%a アプリケーション名 ○
%u ユーザ名 ○
%d データベース名 ○
%r 遠隔ホスト名、またはIPアドレス、およびポート番号 ○
%h 遠隔ホスト名、またはIPアドレス ○
%p プロセス識別子 ×
%t ミリ秒無しのタイムスタンプ ×
%m ミリ秒付きタイムスタンプ ×
%i コマンドタグ。セッションの現在のコマンド種類 ○
%e SQLSTATE エラーコード ×
%c セッションID。下記参照 ×
%l
各セッションまたは各プロセスのログ行の番号。1から始まりま
す。
×
%s プロセスの開始タイムスタンプ ×
%v 仮想トランザクションID(backendID/localXID) ×
%x トランザクションID (未割り当ての場合は0) ×
%q
何も出力しません。 非セッションプロセスではこのエスケープ以
降の出力を停止します。 セッションプロセスでは無視されます。
×
%% %文字そのもの ×
9Copyright © 2015 NTT DATA Corporation
一通りの監査をするための設定のまとめ
ログイン/ログアウト、DBオブジェクトの参照の監査が必要な場合、
少なくとも以下の設定を実施する。
postgresql.conf
•  log_line_prefix = ‘%t  %u  %h  %d  %i  %e‘
•  log_connections=on
•  log_disconnections =on
•  log_statement=all
Copyright © 2015 NTT DATA Corporation 1
監査の課題とpg_audit
11Copyright © 2015 NTT DATA Corporation
監査におけるPostgreSQLの現在の課題の例
•  テーブル単位、列単位で監査できない
•  大規模データベースでは、監査する対象を絞り込まないと、ログ出力量
が大きくなってしまう
•  監査対象のSQLを細かく指定(READのみ、FUNCTIONのみ等)できない
•  View、トリガ、doコマンド、PL/pgSQLの内部のコマンドが監査がで
きない
•  ログで出力されるテーブル名にスキーマ名が修飾されない
•  別スキーマの同名テーブルと区別できない
12Copyright © 2015 NTT DATA Corporation
そこで、pg_audit
2015/05 、pg_auditがcontribモジュールとしてコミットされた。(PostgreSQL9.5)
 監査機能を充実させるためのモジュール
•  詳細なログ出力
•  テーブル単位、列単位監査
•  トリガ等内部処理のログ取得
[インストール方法]
$ make
# make install
shared_preload_libraries =‘pg_audit’  
5/29、revertされました。
13Copyright © 2015 NTT DATA Corporation
pg_audit紹介:ログの種類
•  SESSIONログ
•  細かい粒度で出力するログを設定できる(DDL, FUNCTION, MISC,
READ, ROLE, WRITE, NONE, ALL)
•  テーブルのスキーマ名を取得できる
•  View、トリガ、doコマンド、PL/pgSQLの内部コマンドのログも取得で
きる
•  OBJECTログ
•  OBJECT(テーブル、列)ごとにログを出力できる
→必要な機能を持つ一方のログ、または両方のログを選んで、監査を実施で
きる。
<ケース①>
ü  すべてのDDLをログ出力したい。
ü  credit_cardテーブルは、SELECTもログ出力したい。
pg_audit.log = ‘ddl’
pg_audit.role = ‘audit_user’
=# GRANT ALL ON credit_card TO audit_user;
コマンド
の種類
ごと
オブジェ
クトごと
14Copyright © 2015 NTT DATA Corporation
pg_audit紹介:ログの中身①
LOG: AUDIT: SESSION,8,1,READ,SELECT,,,"select * from
test,test2;",<none>
LOG: AUDIT: OBJECT,8,1,READ,SELECT,TABLE,public.test, 
<previously logged>,<previously logged>
LOG: AUDIT: <ログの種類>, <statementID>, <substatementID>,
<コマンドの種類1>, <コマンドの種類2>,<オブジェクトの種類>, <オブジェクト
名(スキーマ名付)>,<コマンド>,<パラメータ>
postgres=# select * from test,test2;
statementID:メイン文が発行されるごとに振られる連番。コネクション開始時は1。
substatementID:メイン文の中で、サブ文に振られる連番。最初は1。(関数使用時などは2,3と
続く)
LOG: statement: select * from test,test2;
↑log_statementよりも、より詳細な情報が得られる。
15Copyright © 2015 NTT DATA Corporation
pg_audit紹介:ログの中身②
postgres=# SELECT hoge();
LOG: AUDIT: SESSION,19,1,READ,SELECT,,,SELECT hoge();,<none>
LOG: AUDIT: SESSION,19,2,FUNCTION,EXECUTE,FUNCTION,public.hoge,SELECT
hoge2();,<none>
LOG: AUDIT: SESSION,19,3,MISC,REINDEX,,, REINDEX INDEX test2_idx ;SELECT
count(*) from test2;,<none>
LOG: AUDIT: OBJECT,19,4,READ,SELECT,TABLE,public.test2, REINDEX INDEX
test2_idx ;SELECT count(*) from test2;,<none>
LOG: AUDIT: SESSION,19,4,READ,SELECT,TABLE,public.test2,<previously
logged>,<previously logged>
CREATE FUNCTION hoge () returns bigint AS $$
REINDEX INDEX test2_idx;
SELECT count(*) from test2;
$$language 'sql';
① ②
④
③
LOG: statement: SELECT hoge();
16Copyright © 2015 NTT DATA Corporation
pg_audit紹介:その他いろいろな設定
パラメータ
取りうる値 デフォル
ト
説明
pg_audit.log
DDL, FUNCTION,
MISC, READ, ROLE,
WRITE, NONE, ALL
none 監査するSQL等の種類
pg_audit.role ユーザ名の文字列 “” 監査用ユーザを指定する。
pg_audit.log_catalog bool true pg_catalogのログを出力するか?
pg_audit.log_level
LOG, NOTICE,
WARNING, ERRORな
どログレベル各種
LOG リグレッションテストの際にNOTICEに
してクライアントにログ出力する。そ
れ以外はLOGなどでサーバログにて出
力する。
pg_audit.log_parameter
bool false PreparedStatementのパラメータをログ
に出力するか?
pg_audit.log_relation
bool false SESSIONログをリレーションごとに出
したい場合はtrue
→select * from test, test2のとき、2つ
出すか、1つだすか?
pg_audit.log_statement_o
nce
bool false OBJECTログとSESSIONログで同じ
SQLのログを残す際に、共通となる部
分を繰り返し表示するかどうか(また
はpreviously loggedとして省略する
か)
17Copyright © 2015 NTT DATA Corporation
pg_auditを使ってもできないことの例
•  スーパーユーザの監査
•  SET文等でパラメータを変更しログを出さないようにする、など
•  OSユーザの監査
•  postgresql.confの書き換えてログを出さないようにする、など
18Copyright © 2015 NTT DATA Corporation
pg_audit使いどころ まとめ
•  テーブル単位、列単位で監査したい
•  監査対象のSQLを細かく指定したい(READのみ,FUNCTIONのみ等)
•  View, トリガ, doコマンド, PL/pgSQLの内部の処理を監査したい
•  テーブル名がスキーマ名で修飾されるようにしたい
19Copyright © 2015 NTT DATA Corporation
PostgreSQL監査まとめ
•  PostgreSQLの監査で、できること・できないことを知る
•  必要に応じて、外部モジュールやOSのログと併せて、監査を行う
OS
PostgreSQL
外部モジュール
Copyright © 2011 NTT DATA Corporation
Copyright © 2015 NTT DATA Corporation

More Related Content

PPTX
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PPTX
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
PPTX
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PPTX
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PPTX
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PDF
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
PDF
AWSのログ管理ベストプラクティス
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
アーキテクチャから理解するPostgreSQLのレプリケーション
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
AWSのログ管理ベストプラクティス

What's hot (20)

PDF
Infrastructure as Code (IaC) 談義 2022
PDF
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
PDF
ビッグデータ処理データベースの全体像と使い分け
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
PPTX
Spring CloudとZipkinを利用した分散トレーシング
PDF
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
PPTX
はじめてのElasticsearchクラスタ
PPTX
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
NTT DATA と PostgreSQL が挑んだ総力戦
PDF
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
PPTX
え!?データがオンプレにあるけどPower BI で BI したいの?
PDF
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PDF
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
PDF
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
PDF
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
PPTX
さくっと理解するSpring bootの仕組み
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
PPTX
Python製BDDツールで自動化してみた
PPTX
KeycloakでAPI認可に入門する
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
Infrastructure as Code (IaC) 談義 2022
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
ビッグデータ処理データベースの全体像と使い分け
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Spring CloudとZipkinを利用した分散トレーシング
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
はじめてのElasticsearchクラスタ
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA と PostgreSQL が挑んだ総力戦
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
え!?データがオンプレにあるけどPower BI で BI したいの?
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
さくっと理解するSpring bootの仕組み
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Python製BDDツールで自動化してみた
KeycloakでAPI認可に入門する
ヤフー社内でやってるMySQLチューニングセミナー大公開
Ad

Similar to PostgreSQL監査 (20)

PDF
PostgreSQLの運用・監視にまつわるエトセトラ
PDF
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PDF
クラウドではじめるリアルタイムデータ分析 #seccamp
PDF
Azure Antenna はじめての Azure Data Lake
PDF
そんな監視で大丈夫か?
PDF
シンプルでシステマチックな Oracle Database, Exadata 性能分析
PDF
[社内勉強会]サクっと業務でつくったログ/データ調査環境(re:dash ☓ AWS Athena ☓ embulk)
PPTX
OSC2019 LT 運用レコメンドプラットフォーム開発におけるマイクロサービス構成の実現
PDF
Cuto紹介資料
PDF
hbstudy#06
PDF
Logにまつわるエトセトラ
PDF
INF-010_そのログ、ただ集めているだけではありませんか? ~IT 運用の世界にも Big Data の活用を!~
PDF
実践で学んだLog Analytics
PPTX
Domoによるモニタリングオートメーション
PDF
情報システムの性能マネジメントについて
PDF
Fluentd casual
PDF
PostgreSQL9.3新機能紹介
PDF
Embulkを活用したログ管理システム
PPTX
Visual Studio App Centerで始めるCI/CD(iOS)
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
クラウドではじめるリアルタイムデータ分析 #seccamp
Azure Antenna はじめての Azure Data Lake
そんな監視で大丈夫か?
シンプルでシステマチックな Oracle Database, Exadata 性能分析
[社内勉強会]サクっと業務でつくったログ/データ調査環境(re:dash ☓ AWS Athena ☓ embulk)
OSC2019 LT 運用レコメンドプラットフォーム開発におけるマイクロサービス構成の実現
Cuto紹介資料
hbstudy#06
Logにまつわるエトセトラ
INF-010_そのログ、ただ集めているだけではありませんか? ~IT 運用の世界にも Big Data の活用を!~
実践で学んだLog Analytics
Domoによるモニタリングオートメーション
情報システムの性能マネジメントについて
Fluentd casual
PostgreSQL9.3新機能紹介
Embulkを活用したログ管理システム
Visual Studio App Centerで始めるCI/CD(iOS)
Ad

PostgreSQL監査

  • 1. Copyright © 2015 NTT DATA Corporation 2015年5月30日 NTTデータ 基盤システム事業本部 石井愛弓 PostgreSQL監査 PostgreSQLアンカンファレンス@東京  2015/5
  • 2. 2Copyright © 2015 NTT DATA Corporation 目次 •  監査とは •  PostgreSQLの監査 •  監査の課題 •  pg_audit紹介 •  まとめ
  • 3. 3Copyright © 2015 NTT DATA Corporation 監査とは 実際の業務が遵守すべきルールに則っているかどうかを、客観的に検証・指摘 する業務。 DBにおいては、不正アクセス・不正操作が無かったかどうか等の判断 を行う •  監査情報は、アクセス/操作ログ。 •  不正なログインをしていないか? •  重要な情報(クレジットカード情報等)を不正に抜き出していないか?… etc →ログは、部外者が閲覧や改ざんできないよう保護を行う。 ・ログを確実にとること ・ログが改ざんされないようにすること [DBの監査で重要なこと]
  • 4. Copyright © 2015 NTT DATA Corporation 4 PostgreSQL監査
  • 5. 5Copyright © 2015 NTT DATA Corporation どのタイミングでログを出力すべきか? 項目 必要な設定 1 ログイン log_connections=on 2 ログアウト log_disconnections =on 3 DBオブジェクト(テーブル等)の作成、 変更 log_statement=ddl 4 DBオブジェクト(テーブル等)の参照、 更新 log_statement=all 5 設定ファイル(postgresql.conf)の変更 OSでの監査が必要。 =# CREATE TABLE test (id integer, name varchar); LOG: statement: CREATE TABLE test (id integer, name varchar);
  • 6. 6Copyright © 2015 NTT DATA Corporation 監査で必要な情報は何か?(log_statement以外の項目) 1 いつ タイムスタンプ 2 だれが データベースユーザ名 3 どこから 接続元IP/接続元ホスト名 4 どのデータベースに データベース名 5 どんな処理をして コマンドタグ 6 どのような結果になっ たか SQLSTATE エラーコード
  • 7. 7Copyright © 2015 NTT DATA Corporation log_line_prefixによる情報の取得 postgresql.conf にて log_line_prefix = ‘%t  %u  %h  %d  %i  %e‘ 2015-05-19 15:21:37 JST  hoge  [local]  postgres  authentication 00000 タイムスタンプ ユーザ ホスト DB コマンドタグ エラーコード
  • 8. 8Copyright © 2015 NTT DATA Corporation (参考)log_line_prefix エスケープ 効果 セッションのみ %a アプリケーション名 ○ %u ユーザ名 ○ %d データベース名 ○ %r 遠隔ホスト名、またはIPアドレス、およびポート番号 ○ %h 遠隔ホスト名、またはIPアドレス ○ %p プロセス識別子 × %t ミリ秒無しのタイムスタンプ × %m ミリ秒付きタイムスタンプ × %i コマンドタグ。セッションの現在のコマンド種類 ○ %e SQLSTATE エラーコード × %c セッションID。下記参照 × %l 各セッションまたは各プロセスのログ行の番号。1から始まりま す。 × %s プロセスの開始タイムスタンプ × %v 仮想トランザクションID(backendID/localXID) × %x トランザクションID (未割り当ての場合は0) × %q 何も出力しません。 非セッションプロセスではこのエスケープ以 降の出力を停止します。 セッションプロセスでは無視されます。 × %% %文字そのもの ×
  • 9. 9Copyright © 2015 NTT DATA Corporation 一通りの監査をするための設定のまとめ ログイン/ログアウト、DBオブジェクトの参照の監査が必要な場合、 少なくとも以下の設定を実施する。 postgresql.conf •  log_line_prefix = ‘%t  %u  %h  %d  %i  %e‘ •  log_connections=on •  log_disconnections =on •  log_statement=all
  • 10. Copyright © 2015 NTT DATA Corporation 1 監査の課題とpg_audit
  • 11. 11Copyright © 2015 NTT DATA Corporation 監査におけるPostgreSQLの現在の課題の例 •  テーブル単位、列単位で監査できない •  大規模データベースでは、監査する対象を絞り込まないと、ログ出力量 が大きくなってしまう •  監査対象のSQLを細かく指定(READのみ、FUNCTIONのみ等)できない •  View、トリガ、doコマンド、PL/pgSQLの内部のコマンドが監査がで きない •  ログで出力されるテーブル名にスキーマ名が修飾されない •  別スキーマの同名テーブルと区別できない
  • 12. 12Copyright © 2015 NTT DATA Corporation そこで、pg_audit 2015/05 、pg_auditがcontribモジュールとしてコミットされた。(PostgreSQL9.5)  監査機能を充実させるためのモジュール •  詳細なログ出力 •  テーブル単位、列単位監査 •  トリガ等内部処理のログ取得 [インストール方法] $ make # make install shared_preload_libraries =‘pg_audit’   5/29、revertされました。
  • 13. 13Copyright © 2015 NTT DATA Corporation pg_audit紹介:ログの種類 •  SESSIONログ •  細かい粒度で出力するログを設定できる(DDL, FUNCTION, MISC, READ, ROLE, WRITE, NONE, ALL) •  テーブルのスキーマ名を取得できる •  View、トリガ、doコマンド、PL/pgSQLの内部コマンドのログも取得で きる •  OBJECTログ •  OBJECT(テーブル、列)ごとにログを出力できる →必要な機能を持つ一方のログ、または両方のログを選んで、監査を実施で きる。 <ケース①> ü  すべてのDDLをログ出力したい。 ü  credit_cardテーブルは、SELECTもログ出力したい。 pg_audit.log = ‘ddl’ pg_audit.role = ‘audit_user’ =# GRANT ALL ON credit_card TO audit_user; コマンド の種類 ごと オブジェ クトごと
  • 14. 14Copyright © 2015 NTT DATA Corporation pg_audit紹介:ログの中身① LOG: AUDIT: SESSION,8,1,READ,SELECT,,,"select * from test,test2;",<none> LOG: AUDIT: OBJECT,8,1,READ,SELECT,TABLE,public.test,  <previously logged>,<previously logged> LOG: AUDIT: <ログの種類>, <statementID>, <substatementID>, <コマンドの種類1>, <コマンドの種類2>,<オブジェクトの種類>, <オブジェクト 名(スキーマ名付)>,<コマンド>,<パラメータ> postgres=# select * from test,test2; statementID:メイン文が発行されるごとに振られる連番。コネクション開始時は1。 substatementID:メイン文の中で、サブ文に振られる連番。最初は1。(関数使用時などは2,3と 続く) LOG: statement: select * from test,test2; ↑log_statementよりも、より詳細な情報が得られる。
  • 15. 15Copyright © 2015 NTT DATA Corporation pg_audit紹介:ログの中身② postgres=# SELECT hoge(); LOG: AUDIT: SESSION,19,1,READ,SELECT,,,SELECT hoge();,<none> LOG: AUDIT: SESSION,19,2,FUNCTION,EXECUTE,FUNCTION,public.hoge,SELECT hoge2();,<none> LOG: AUDIT: SESSION,19,3,MISC,REINDEX,,, REINDEX INDEX test2_idx ;SELECT count(*) from test2;,<none> LOG: AUDIT: OBJECT,19,4,READ,SELECT,TABLE,public.test2, REINDEX INDEX test2_idx ;SELECT count(*) from test2;,<none> LOG: AUDIT: SESSION,19,4,READ,SELECT,TABLE,public.test2,<previously logged>,<previously logged> CREATE FUNCTION hoge () returns bigint AS $$ REINDEX INDEX test2_idx; SELECT count(*) from test2; $$language 'sql'; ① ② ④ ③ LOG: statement: SELECT hoge();
  • 16. 16Copyright © 2015 NTT DATA Corporation pg_audit紹介:その他いろいろな設定 パラメータ 取りうる値 デフォル ト 説明 pg_audit.log DDL, FUNCTION, MISC, READ, ROLE, WRITE, NONE, ALL none 監査するSQL等の種類 pg_audit.role ユーザ名の文字列 “” 監査用ユーザを指定する。 pg_audit.log_catalog bool true pg_catalogのログを出力するか? pg_audit.log_level LOG, NOTICE, WARNING, ERRORな どログレベル各種 LOG リグレッションテストの際にNOTICEに してクライアントにログ出力する。そ れ以外はLOGなどでサーバログにて出 力する。 pg_audit.log_parameter bool false PreparedStatementのパラメータをログ に出力するか? pg_audit.log_relation bool false SESSIONログをリレーションごとに出 したい場合はtrue →select * from test, test2のとき、2つ 出すか、1つだすか? pg_audit.log_statement_o nce bool false OBJECTログとSESSIONログで同じ SQLのログを残す際に、共通となる部 分を繰り返し表示するかどうか(また はpreviously loggedとして省略する か)
  • 17. 17Copyright © 2015 NTT DATA Corporation pg_auditを使ってもできないことの例 •  スーパーユーザの監査 •  SET文等でパラメータを変更しログを出さないようにする、など •  OSユーザの監査 •  postgresql.confの書き換えてログを出さないようにする、など
  • 18. 18Copyright © 2015 NTT DATA Corporation pg_audit使いどころ まとめ •  テーブル単位、列単位で監査したい •  監査対象のSQLを細かく指定したい(READのみ,FUNCTIONのみ等) •  View, トリガ, doコマンド, PL/pgSQLの内部の処理を監査したい •  テーブル名がスキーマ名で修飾されるようにしたい
  • 19. 19Copyright © 2015 NTT DATA Corporation PostgreSQL監査まとめ •  PostgreSQLの監査で、できること・できないことを知る •  必要に応じて、外部モジュールやOSのログと併せて、監査を行う OS PostgreSQL 外部モジュール
  • 20. Copyright © 2011 NTT DATA Corporation Copyright © 2015 NTT DATA Corporation