今まで、あまり気にしていなかったのですが、MariaDBって監査(audit)の機能が標準で実装されております。例えば、作業者のミスでデータが消えてしまった。重たい話では、「情報が漏洩した」なんてことが発生した場合に「いつ?」「だれか?」「何をした?」ってのを追跡したい場合ってどう対応していますか?
聞いた話では、データの情報漏えいって、ほぼ内部からしい・・なんか不安ですよね?
そのため必要なのが「監査」で、テーブルへのアクセス履歴やSQL分の実行履歴といった監査ログの記録が重要になってきます
今も昔もそうなのですが、データベースのセキュリティって結構軽く見がちです。
まあ、実装も大変ですしね。いままでは、でも、MariaDB 10には標準でモジュールが入ってました。入っているのであれば、使ってみようという意味も含め以下にメモを書いた次第です
結構あっさり設定できたので、MariaDBを使っている方は試してみてくださいね!
audit pluginのインストール
MySQL> INSTALL PLUGIN server_audit SONAME 'server_audit';
Query OK, 0 rows affected (0.18 sec)
プラグインディレクトリの確認
MariaDB [(none)]> SHOW VARIABLES LIKE 'plugin_dir';
+---------------+--------------------------+
| Variable_name | Value |
+---------------+--------------------------+
| plugin_dir | /usr/lib64/mysql/plugin/ |
+---------------+--------------------------+
1 row in set (0.05 sec)
Audit Logの設定値確認
MariaDB [(none)]>
show global variables like '%audit%' ;
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| server_audit_events | CONNECT,QUERY |
| server_audit_excl_users | |
| server_audit_file_path | server_audit.log |
| server_audit_file_rotate_now | OFF |
| server_audit_file_rotate_size | 1000000 |
| server_audit_file_rotations | 9 |
| server_audit_incl_users | |
| server_audit_logging | OFF |
| server_audit_mode | 0 |
| server_audit_output_type | file |
| server_audit_syslog_facility | LOG_USER |
| server_audit_syslog_ident | mysql-server_auditing |
| server_audit_syslog_info | |
| server_audit_syslog_priority | LOG_INFO |
+-------------------------------+-----------------------+
14 rows in set (0.00 sec)
Audit Logの開始
MariaDB [(none)]>
SET GLOBAL server_audit_logging=1;
FLUSH LOGS ;
ログファイルに書き込まれているか確認
- デフォルトのログのフォーマットは以下の通りです
[timestamp],[serverhost],[username],[host],[connectionid],
[queryid],[operation],[database],[object],[retcode]
- 詳細な情報がほしい場合は、以下のパラメータを追加すると良いでしょう
MariaDB [(none)]>
SET GLOBAL server_audit_output_type=syslog ;
[timestamp][syslog_host][syslog_ident]:[syslog_info][serverhost],[username],[host],
[connectionid],[queryid],[operation],[database],[object],[retcode]
- デフォルトログイメージはこんなかんじになります
[root@dblibm01new mysql]# cat /var/lib/mysql/server_audit.log
20141203 20:38:28,server01.local,sysadm,localhost,14,8,QUERY,,'SET GLOBAL server_audit_logging=1',0
20141203 20:39:45,server01.local,sysadm,localhost,14,0,DISCONNECT,,,0
20141203 20:39:49,server01.local,develop,192.168.33.215,15,0,FAILED_CONNECT,,,1045
20141203 20:39:49,server01.local,develop,192.168.33.215,15,0,DISCONNECT,,,0
20141203 20:39:49,server01.local,develop,192.168.33.215,16,0,FAILED_CONNECT,,,1045
20141203 20:39:49,server01.local,develop,192.168.33.215,16,0,DISCONNECT,,,0
auditログのローテートをしたい場合は、
例えば、ローテートの数を7に、ローテートサイズを、1Gにしたい場合は、以下のような設定になります
MariaDB [(none)]>
SET GLOBAL server_audit_file_rotations=7;
SET GLOBAL server_audit_file_rotate_size=1000000;
SET GLOBAL server_audit_file_rotate_now=ON ;
MySQLの再起動時も、Auditが開始されるように、以下の通り server.cnf に以下を記述しておいたほうが良いでしょう
- /etc/my.cnf.d/server.cnf
[mysqld]
# Audit Plugin
server_audit_logging=1
server_audit_events=connect,query
・
・
・
以上、駆け足で説明しました!!