監査は、データベースで何が起こっているかを知る方法であり、多くのセキュリティ規制や標準(PCI-ペイメントカード業界など)でも必要です。
最も人気のあるオープンソースデータベースサーバーの1つであるMariaDBサーバーには、この監査タスクを支援するために、独自の監査プラグイン(MySQLでも機能します)があります。このブログでは、この便利なMariaDB監査プラグインをインストールして使用する方法を説明します。
Enterpriseインストール10.6、10.5、および10.4に含まれているMariaDBEnterpriseAudit用プラグインのMariaDBのより高度なバージョンも紹介します。しかし、それについては後で詳しく説明します。
MariaDB監査プラグインとは何ですか?
監査プラグインは、監査規制に準拠するためにユーザーアクセスを記録するための要件を満たすために、MariaDBによって開発されました。
クライアントセッションごとに、サーバーに接続したユーザー、実行されたクエリ、アクセスされたテーブル、サーバー変数の変更をログファイル(またはsyslog)に記録します。
MariaDB、MySQL、およびPerconaサーバーで動作します。 MariaDBは、デフォルトでバージョン10.0.10および5.5.37からの監査プラグインの組み込みを開始し、MariaDB5.5.20からの任意のバージョンにインストールできます。
MariaDBAuditPluginのインストール
プラグインファイル(server_audit.so)は、MariaDBのインストール中にプラグインディレクトリ/ usr / lib / mysql / plugin /にデフォルトでインストールされます:
$ ls -lah /usr/lib/mysql/plugin/ |grep server_audit
-rw-r--r-- 1 root root 63K May 9 19:33 server_audit.so
したがって、MariaDBインスタンスに追加する必要があります:
MariaDB [(none)]> INSTALL SONAME 'server_audit';
Query OK, 0 rows affected (0.003 sec)
MariaDB [(none)]> SHOW PLUGINS;
+--------------+--------+-------+-----------------+---------+
| Name | Status | Type | Library | License |
+--------------+--------+-------+-----------------+---------+
| SERVER_AUDIT | ACTIVE | AUDIT | server_audit.so | GPL |
+--------------+--------+-------+-----------------+---------+
そして、SET GLOBALコマンドを使用して有効にします:
MariaDB [(none)]> SET GLOBAL server_audit_logging=ON;
Query OK, 0 rows affected (0.000 sec)
または、my.cnf構成ファイルで永続化して、監査を開始します。
[MYSQLD]
server_audit_logging=ON
MariaDBインスタンスに追加する別の方法は、my.cnf構成ファイルにplugin_load_addパラメーターを追加することです。
[mariadb]
plugin_load_add = server_audit
FORCE_PLUS_PERMANENTを追加して、アンインストールしないようにすることもお勧めします:
[mariadb]
plugin_load_add = server_audit
server_audit=FORCE_PLUS_PERMANENT
これで、MariaDB監査プラグインがインストールされました。構成方法を見てみましょう。
MariaDB監査プラグインの構成
現在の構成を確認するには、次のコマンドを実行して「server_audit%」グローバル変数の値を確認できます。
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE "server_audit%";
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| server_audit_events | |
| 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_query_log_limit | 1024 |
| server_audit_syslog_facility | LOG_USER |
| server_audit_syslog_ident | mysql-server_auditing |
| server_audit_syslog_info | |
| server_audit_syslog_priority | LOG_INFO |
+-------------------------------+-----------------------+
15 rows in set (0.001 sec)
SET GLOBALコマンドを使用してこれらの変数を変更するか、[mysqld]セクションのmy.cnf構成ファイルで永続化することができます。
- server_audit_logging :監査ログを有効にします。
- server_audit_events :記録するイベントを指定します。デフォルトでは、値は空です。これは、すべてのイベントが記録されることを意味します。オプションは、CONNECTION、QUERY、およびTABLEです。
- server_audit_excl_users、server_audit_incl_users :これらの変数は、どのユーザーのアクティビティを除外するか、監査ログファイルに含めるかを指定します。デフォルトでは、すべてのユーザーのアクティビティが記録されます。
- server_audit_output_type :デフォルトでは、監査出力はファイルに送信されます。もう1つのオプションはsyslogです。これは、すべてのエントリがsyslog機能に送られることを意味します。
- server_audit_syslog_facility、server_audit_syslog_priority :syslog機能とsyslogに送信する必要のあるイベントの優先度を指定します。
構成後、指定したログファイル(またはsyslog)で監査イベントを確認できます。それがどのように見えるか見てみましょう。
MariaDB監査プラグインログ
監査ログプラグインによって登録されたイベントを確認するには、指定されたログファイル(デフォルトではserver_audit.log)を確認できます。
$ tail -f /var/lib/mysql/server_audit.log
20200703 19:07:04,MariaDB1,cmon,10.10.10.116,64,915239,QUERY,information_schema,'FLUSH /*!50500 SLOW */ LOGS',0
20200703 19:07:05,MariaDB1,cmon,10.10.10.116,61,915240,QUERY,information_schema,'SHOW GLOBAL STATUS',0
20200703 19:07:05,MariaDB1,cmon,10.10.10.116,64,915241,WRITE,mysql,slow_log,
20200703 19:07:05,MariaDB1,cmon,10.10.10.116,64,915241,QUERY,information_schema,'SET GLOBAL SLOW_QUERY_LOG=1',0
20200703 19:07:06,MariaDB1,cmon,10.10.10.116,61,915242,QUERY,information_schema,'SHOW GLOBAL STATUS',0
20200703 19:15:42,MariaDB1,root,localhost,124,0,CONNECT,,,0
20200703 19:15:42,MariaDB1,root,localhost,124,917042,QUERY,,'select @@version_comment limit 1',0
20200703 19:15:48,MariaDB1,root,localhost,124,0,DISCONNECT,,,0
20200703 19:57:41,MariaDB1,root,localhost,135,925831,QUERY,,'create database test1',0
20200703 19:58:05,MariaDB1,root,127.0.0.1,136,0,FAILED_CONNECT,,,1045
20200703 19:58:05,MariaDB1,root,127.0.0.1,136,0,DISCONNECT,,,0
20200703 19:58:49,MariaDB1,root,localhost,137,926073,QUERY,,'SELECT DATABASE()',0
20200703 19:58:49,MariaDB1,root,localhost,137,926075,QUERY,test1,'show databases',0
20200703 19:58:49,MariaDB1,root,localhost,137,926076,QUERY,test1,'show tables',0
20200703 19:59:20,MariaDB1,root,localhost,137,926182,CREATE,test1,t1,
20200703 19:59:20,MariaDB1,root,localhost,137,926182,QUERY,test1,'create table t1 (id int, message text)',0
20200703 19:59:48,MariaDB1,root,localhost,137,926287,QUERY,test1,'insert into t1 values (4,\'message 1\')',0
上記のログでわかるように、server_audit_eventsの構成に応じて、データベース接続とそこで実行されているクエリに関するイベントが発生します。
ClusterControlでのMariaDB監査プラグインの使用
手動設定を回避するために、ClusterControlUIから監査プラグインを有効にすることができます。このためには、ClusterControl-> MariaDB Cluster-> Security-> Audit Log:
に移動するだけです。
そして、手動でインストールしたり設定したりしなくても、プラグインが有効になります。
ClusterControlを使用すると、セキュリティだけでなく、監視、管理、バックアップなどのさまざまな機能を利用することもできます。
MariaDB Enterprise Auditプラグイン、server_audit2の紹介
MariaDBは進化を続けており、プラグインの改善が含まれています。 10.6、10.5、および10.4 MariaDB Enterprise Serverのインストールに含まれている、MariaDBEnterpriseAuditの最新のプラグインはserver_audit2.soです。一言で言えば、ユーザーはコンプライアンス監査に必要な情報を保存できます。
プラグインは、フィルターテンプレートとユーザーのシステムテーブル、デフォルトのフィルター、およびユーザーごとのアカウントレベルのフィルターを導入します。新しいデフォルトのフィルターを使用すると、フィルターを定義しなくても、すべてのユーザーの監査ルールを定義できます。このテーブルは、フィルター名(「デフォルト」に設定する必要があります)とルール列で構成されています。ルールセットは、SET GLOBAL server_audit_reload_filters =ON;
ユーザーは、特定のユーザーに適用可能なフィルター名を保存してプラグイン自体を監査することもできるため、監査プラグインの構成に変更が発生した場合は、AUDIT_CONFIGイベントに記録されます( MariaDB、情報を新しい監査ログファイルに追加して、現在の設定をログに記録することもできます。
さらに、server_audit_usersテーブルをserver_audit2.soで使用できるようになりました。ユーザー関連情報を保存するプラグイン。
MariaDBインストールにこのプラグインがあることを確認するには、plugin_dirシステム変数で定義されたディレクトリでserver_audit2.soを検索するか、ディレクトリがわからない場合は@@plugin_dirをクエリします。 my.cnfの変数を調べるのに時間を費やしたい。
監査は多くのセキュリティ規制に必要であり、データベースで何が起こったのか、いつ、誰がその責任を負ったのかを知りたい場合にも役立ちます。
MariaDB監査プラグインとそのエンタープライズバリアントは、外部ツールを使用せずにデータベースを監査するための優れた方法であり、MySQLおよびPerconaサーバーとも互換性があります。手動で構成することを避けたい場合は、ClusterControlを使用して、UIから簡単な方法で監査プラグインを有効にすることができます。