15
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MariaDBでデータベースを監査して、クエリーを追跡する!

Last updated at Posted at 2014-12-03

今まで、あまり気にしていなかったのですが、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
・
・
・

以上、駆け足で説明しました!!

15
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?