SlideShare a Scribd company logo
1 of 20
Download to read offline
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

What's hot

Pacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/Spring
Pacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/SpringPacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/Spring
Pacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/Spring
Takatoshi Matsuo
 
Dbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_syncDbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_sync
Koji Shinkubo
 

What's hot (20)

PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Azure Database for PostgreSQL 入門 (PostgreSQL Conference Japan 2021)
Azure Database for PostgreSQL 入門 (PostgreSQL Conference Japan 2021)Azure Database for PostgreSQL 入門 (PostgreSQL Conference Japan 2021)
Azure Database for PostgreSQL 入門 (PostgreSQL Conference Japan 2021)
 
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
 
いまさら聞けないPostgreSQL運用管理
いまさら聞けないPostgreSQL運用管理いまさら聞けないPostgreSQL運用管理
いまさら聞けないPostgreSQL運用管理
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
 
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
 
Pacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/Spring
Pacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/SpringPacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/Spring
Pacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/Spring
 
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングまずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニング
 
Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Aurora - Auroraの止まらない進化とその中身Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Aurora - Auroraの止まらない進化とその中身
 
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
 
Dbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_syncDbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_sync
 
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
 
PostreSQL監査
PostreSQL監査PostreSQL監査
PostreSQL監査
 
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 

Similar to PostgreSQL監査

[社内勉強会]サクっと業務でつくったログ/データ調査環境(re:dash ☓ AWS Athena ☓ embulk)
[社内勉強会]サクっと業務でつくったログ/データ調査環境(re:dash ☓ AWS Athena ☓ embulk)[社内勉強会]サクっと業務でつくったログ/データ調査環境(re:dash ☓ AWS Athena ☓ embulk)
[社内勉強会]サクっと業務でつくったログ/データ調査環境(re:dash ☓ AWS Athena ☓ embulk)
Takahiro Moteki
 

Similar to PostgreSQL監査 (20)

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

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