監査プラグイン – MariaDB Enterprise Server 10.4

MariaDB Corporation は2019年6月に MariaDB Enterprise Server をリリース致しました。

MariaDB Enterprise Server はエンタープライズ向けにビルドされた MariaDB Server であり,拡張機能,ライフサイクル,デフォルト設定がエンタープライズ向けに最適化されています。

MariaDB Enterprise Server は2019年9月現在,10.4/10.3/10.2 と3バージョンありますが,MariaDB Enterprise Audit は 10.4 でのみ利用可能な機能となります。
今回は MariaDB Enterprise Audit に関してご説明いたします。

mariadb-enterprise.cnf

MariaDB Enterprise Server 10.4 では,/etc/my.cnf.d ディレクトリに mariadb-enterprise.cnf というファイル名で専用のデフォルト設定ファイルが追加されています。この設定ファイルの audit プラグインに関する設定は以下のようになっています。

[mariadb]
# -- Auditing - pre-load Plugin
plugin-load-add=server_audit2
server_audit=FORCE_PLUS_PERMANENT
server_audit_logging=OFF
plugin-load-add=disks

plugin-load-add

plugin-load-add パラメータは,Community Server の場合,server_audit を指定しますが,Enterprise Server の場合は機能拡張されていますので,共有オブジェクト名が server_audit2 となり別モジュールとなります。

server_audit

server_audit パラメータは Community Server にもありますが,FORCE_PLUS_PERMANENT を指定すると,動的に削除(無効)することができないため,よりセキュアな設定となります。

デフォルト設定でのエラーログ

デフォルト設定で起動した際のエラーログ(hostname.err)には Audit プラグイン関連のログが以下のように記録されます。バージョンが 2.0 となっていることが確認できます。

hostname.err

2019-09-11 10:24:13 server_audit: MariaDB Audit Plugin version 2.0.2 STARTED.
2019-09-11 10:24:13 server_audit: Query cache is enabled with the TABLE events. Some table reads can be veiled.

Community Server 10.4 : CONNECT, QUERY イベントのログ

比較のため,MariaDB Community Server 10.4 にて以下の設定を行い,

[mariadb]
server_audit_logging = on
server_audit_events = 'CONNECT,QUERY'

以下のSQL文を実行,テストテーブルの作成/クレジットカード番号のINSERTを行います。

USE test;
CREATE TABLE cards (id INT PRIMARY KEY AUTO_INCREMENT, card_number CHAR(20));
INSERT INTO cards(card_number) VALUES ('1234-5678-9012-3456');

INSERT するデータは server_audit.log に以下のように平文(clear text)で記録されてしまいます。

20190912 16:56:56,mdb104,mycli,localhost,10,0,CONNECT,test,,0
20190912 16:56:56,mdb104,mycli,localhost,10,15,QUERY,test,'show databases',0
20190912 16:56:56,mdb104,mycli,localhost,10,16,QUERY,test,'show tables',0
20190912 16:56:56,mdb104,mycli,localhost,10,18,QUERY,test,'select @@version_comment limit 1',0
20190912 16:56:59,mdb104,mycli,localhost,10,19,QUERY,test,'DROP TABLE cards',0
20190912 16:57:06,mdb104,mycli,localhost,10,20,QUERY,test,'SELECT DATABASE()',0
20190912 16:57:06,mdb104,mycli,localhost,10,22,QUERY,test,'CREATE TABLE cards (id INT PRIMARY KEY AUTO_INCREMENT, card_number CHAR(20))',0
20190912 16:57:06,mdb104,mycli,localhost,10,23,QUERY,test,'INSERT INTO cards(card_number) VALUES (\'1234-5678-9012-3456\')',0
20190912 16:57:06,mdb104,mycli,localhost,10,0,DISCONNECT,test,,0

なお,SELECT 文を実行した際のクエリ結果は server_audit.log には記録されません。

20190912 16:58:20,mdb104,mycli,localhost,11,0,CONNECT,test,,0
20190912 16:58:20,mdb104,mycli,localhost,11,25,QUERY,test,'show databases',0
20190912 16:58:20,mdb104,mycli,localhost,11,26,QUERY,test,'show tables',0
20190912 16:58:20,mdb104,mycli,localhost,11,28,QUERY,test,'select @@version_comment limit 1',0
20190912 16:58:28,mdb104,mycli,localhost,11,29,QUERY,test,'SELECT * FROM cards',0
20190912 16:58:29,mdb104,mycli,localhost,11,0,DISCONNECT,test,,0

MariaDB Enterprise Server 10.4 Audit Filters

一方,MariaDB Enterprise Server には Audit フィルタという監査ログのフィルタ機能があり,Query Event で DML を選択しない場合,INSERT/UPDATE 実行時のデータを監査ログに出力させなくすることが可能です。

以下の INSERT 文で設定を行うことが可能です。

INSERT INTO mysql.server_audit_filters (filtername, rule)
  VALUES ('default',
    '{"connect_event": ["ALL"],
      "table_event":["ALL"],
      "query_event": ["DDL","DCL"]
      }');

DML をフィルタリングするようにした上で,さきほどのテストテーブル作成,クレジットカード番号のINSERTを行いますと,

CREATE OR REPLACE DATABASE test;
USE test;
CREATE TABLE cards (id INT PRIMARY KEY AUTO_INCREMENT, card_number CHAR(20));
INSERT INTO cards(card_number) VALUES ('1234-5678-9012-3456');

監査ログは以下のようになり,INSERT文そのものは記録されませんが,test.cards テーブルに書込(WRITE)があった形跡は確認できます。

20190912 17:01:02,mdb104,audit_test,localhost,8,0,CONNECT,,,0
20190912 17:01:02,mdb104,audit_test,localhost,8,1,READ,mysql,proc,
20190912 17:01:02,mdb104,audit_test,localhost,8,1,WRITE,mysql,table_stats,
20190912 17:01:02,mdb104,audit_test,localhost,8,1,WRITE,mysql,column_stats,
20190912 17:01:02,mdb104,audit_test,localhost,8,1,WRITE,mysql,index_stats,
20190912 17:01:02,mdb104,audit_test,localhost,8,1,DROP,test,cards,
20190912 17:01:02,mdb104,audit_test,localhost,8,1,WRITE,mysql,proc,
20190912 17:01:02,mdb104,audit_test,localhost,8,1,WRITE,mysql,event,
20190912 17:01:02,mdb104,audit_test,localhost,8,1,QUERY,,'CREATE OR REPLACE DATABASE test',0
20190912 17:01:02,mdb104,audit_test,localhost,8,4,CREATE,test,cards,
20190912 17:01:02,mdb104,audit_test,localhost,8,4,QUERY,test,'CREATE TABLE cards (id INT PRIMARY KEY AUTO_INCREMENT, card_number CHAR(20))',0
20190912 17:01:02,mdb104,audit_test,localhost,8,5,WRITE,test,cards,
20190912 17:01:02,mdb104,audit_test,localhost,8,5,READ,mysql,table_stats,
20190912 17:01:02,mdb104,audit_test,localhost,8,5,READ,mysql,column_stats,
20190912 17:01:02,mdb104,audit_test,localhost,8,5,READ,mysql,index_stats,
20190912 17:01:02,mdb104,audit_test,localhost,8,0,DISCONNECT,test,,0

MariaDB Enterprise Server の詳細に関しましては,以下のボタンよりお問い合わせ願います。

お問い合わせ

付録

MariaDB Corporation Subscription Services Policies 1.03 – 2019-07-08

MariaDB Enterprise Documentation