Для обеспечения соответствия нормативным требованиям стандартов безопасности (SOX, HIPAA, PCI-DSS и т.д.) предприятия внедряют различные технологии мониторинга и аудит данных. Одним из пунктов который предстоит выполнить, является детальное протоколирование доступа к серверам и таблицам баз данных. В популярной СУБД MySQL разработчики предлагают соответствующий API, позволяющий производить аудит. Но штатный плагин audit_log доступен только для коммерческой версии Enterprise (dev.mysql.com/doc/refman/5.5/en/audit-log-plugin.html). Для GPL которые используют на многих ресурсах он не предлагается. Но среди форков MySQL доступны бесплатные и совместимые альтернативы, которые можно использовать для аудита MySQL:
- Плагин для Percona Server (http://percona.com/doc/percona-server/5.5/management/audit_log_plugin.html
- MariaDB Audit Plugin for MySQL — https://mariadb.com/kb/en/mariadb-audit-plugin/
- McAfee MySQL Audit Plugin — http://github.com/mcafee/mysql-audit
Например, MariaDB Audit Plugin позволяет отслеживать доступ пользователей к данным — время, узел (клиент и сервер), запрос, код ошибки и т.д. Совместим с MariaDB 5.5+, MySQL 5.5+ и Percona Server. Распространяется по лицензии GNU GPL.
Для подключения потребуется всего пара минут. При этом перезагрузка сервера не потребуется.
Скачиваем архив server_audit с сайта проекта (mariadb.com/products/connectors-plugins).
$ wget -c https://downloads.skysql.com/enterprise/MariaDB-Audit-Plugin/server_audit-1.1.7.tar.gz
Архив содержит файлы под 32 и 64 разрядные версии Windows и Linux. Распаковываем и копируем модуль server_audit.so под свою версию ОС в папку плагинов (в Ubuntu /usr/lib/mysql/plugin/), проверив права доступа. Нужный каталог в других дистрибутивах можно узнать просмотрев значение переменной plugin_dir.
mysql> SHOW GLOBAL VARIABLES LIKE 'plugin_dir';
Плагин следует загрузить через переменную plugin-load в my.cnf или SQL команду:
mysql> INSTALL PLUGIN server_audit SONAME 'server_audit.so';
Плагин будет зарегистрирован и в последующем загружаться при перезапуске сервера. Проверить правильность работы можно просмотрев информацию о плагине:
mysql> SELECT * from information_schema.plugins where plugin_name='server_audit';
Плагин, работает, но пока ничего не делает. Необходимо его настроить. Смотрим текущую конфигурацию (рис.1):
mysql> SHOW GLOBAL VARIABLES LIKE 'server_audit%';

Пока будет создан файл журнала server_audit.log в каталоге данных (в Ubuntu /var/lib/mysql), который будет перезаписываться при достижении размера 1000000 байт. При этом сохраняется девять предыдущих файлов.
Чтобы включить журналирование, следует установить переменную server_audit_logging variable в ON.
mysql> SET GLOBAL server_audit_logging='ON';
Плагин может регистрировать успех и ошибку трех типов событий: CONNECTION (подключения, отключения), QUERY (запросы и результат) и TABLE (таблицы которые были затронуты запросом). Выбираем нужные и включаем:
mysql> SET GLOBAL server_audit_events='CONNECT,QUERY,TABLE';
Теперь файл server_audit.log начнет заполоняться информацией (рис.2).
Единственное, что после перезагрузки сервера, все настройки будут сброшены, поэтому следует их прописать в my.cnf:
[mysqld]
...
server_audit_logging=on
server_audit_events=connect,query
По умолчанию регистрируется активность всех пользователей, но при желании можно указать учетные записи которые необходимо отслеживать, или наоборот исключить ненужные. За это отвечают две переменные — server_audit_incl_users и server_audit_excl_users.
[mysqld]
...
server_audit_excl_users=test