Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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

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

hit
なんとなくデータベースエンジニア。なんとなくメモしてます
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした