MaxscaleでDatabase Firewall (ログ出力編)
41日目
MaxscaleでDatabase Firewall (準備編) - tsaekiのブログの続き。
クエリログを出力してみます。
サンプルの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
MySQL、MariaDBでもMariaDB Audit Pluginがあるけど、直接データベースの設定するより精神的にいい?かなと思います。