MaxscaleでDatabase Firewall (ログ出力編)

41日目

MaxscaleでDatabase Firewall (準備編) - tsaekiのブログの続き。
クエリログを出力してみます。

github.com

サンプルのconfigurationです

[Sample-Service]
type=service
router=readconnroute
router_options=running
servers=server1
user=maxscale
password=maxscale_password
filters=SampleLogFilter

[SampleLogFilter]
type=filter
module=qlafilter
match=SELECT.*FROM.*users
filebase=/tmp/sample
log_type=unified
flush=true

usersテーブルをselectすると/tmp/sample.unifiedにクエリログが出力されます。

# Run sample query
$ mysql -usample -h 127.0.0.1 -P 4008 -p sampledb -e "SELECT * FROM users"

# Check query log
$ docker-compose exec mxs /bin/bash
root@882ee08125a4:/# tail -f /tmp/sample.unified
Date,User@Host,Query
2019-02-09 01:35:56,sample@172.18.0.1,SELECT * FROM users
2019-02-09 01:38:32,sample@172.18.0.1,select * from users
項目 備考
match SELECT.*FROM.*users マッチしたクエリを出力。正規表現。大文字小文字区別はない
filebase /tmp/sample 出力先ファイル名。log_typeがsessionだと連番、unifiedだと.unifiedのファイル名になる
log_type unified unifiedは1つのファイルにまとめて出力。デフォルトはsessionでセッションごとにファイルを生成
flush true trueにするとリアルタイムにファイルに出力。デフォルトはfalseでセッション終了後にファイルに出力

また他にも設定項目があって、除外するクエリ、特定の接続元やユーザのみ出力など設定が可能です。
詳細は公式ドキュメントを参考にしてみてください。
maxscale.readthedocs.io

MySQLMariaDBでもMariaDB Audit Pluginがあるけど、直接データベースの設定するより精神的にいい?かなと思います。