MySQL审计audit
导读:MySQL社区版是不带审计功能的,如果要使用MySQL审计,可以考虑使用中间件(例如proxysql)或者是MariaDB的审计插件。这里以MariaDB的审计插件为例,实现MySQL 5.7的审计功能。
mariadb-10.1.23-linux-x86_64/lib/plugin
在该路径下存在 server_audit.so 文件,将其拷贝到MySQL服务器上。
mysql> show variables like 'plugin_dir'; +---------------+------------------------------+ | Variable_name | Value | +---------------+------------------------------+ | plugin_dir | /usr/local/mysql/lib/plugin/ | +---------------+------------------------------+
将MariaDB的审计插件server_audit.so存放到该路径下
[root@pro1 plugin]# ll ... -rw-r--r--. 1 root root 176810 Jan 7 16:17 server_audit.so ... # 修改插件权限 [root@pro1 plugin]# chown mysql:mysql server_audit.so [root@pro1 plugin]# chmod 755 server_audit.so [root@pro1 plugin]# ll ... -rwxr-xr-x. 1 mysql mysql 176810 Jan 7 16:17 server_audit.so ...
进入数据库安装插件
mysql> INSTALL PLUGIN server_audit SONAME 'server_audit.so'; Query OK, 0 rows affected (0.00 sec)
安装之后,可以看到数据库插件了
mysql> show plugins ; +----------------------------+----------+--------------------+-----------------+---------+ | Name | Status | Type | Library | License | +----------------------------+----------+--------------------+-----------------+---------+ ... | SERVER_AUDIT | ACTIVE | AUDIT | server_audit.so | GPL | +----------------------------+----------+--------------------+-----------------+---------+
mysql> show variables like '%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_loc_info | | | server_audit_logging | OFF | | server_audit_mode | 1 | | 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 | +-------------------------------+-----------------------+
这里罗列了重点参数的含义:
我的最终配置如下:
mysql> show variables like '%audit%'; +-------------------------------+-----------------------+ | Variable_name | Value | +-------------------------------+-----------------------+ | server_audit_events | CONNECT | | server_audit_excl_users | | | server_audit_file_path | server_audit.log | | server_audit_file_rotate_now | OFF | | server_audit_file_rotate_size | 100000000 | | server_audit_file_rotations | 9 | | server_audit_incl_users | | | server_audit_loc_info | | | server_audit_logging | ON | | server_audit_mode | 1 | | 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 | +-------------------------------+-----------------------+
[timestamp],[serverhost],[username],[host],[connectionid],0,CONNECT,[database],,0 [timestamp],[serverhost],[username],[host],[connectionid],0,DISCONNECT,,,0 [timestamp],[serverhost],[username],[host],[connectionid],0,FAILED_CONNECT,,,[retcode]
(3.2)查询审计
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],QUERY,[database],[object], [retcode]
(3.3)表相关审计
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],CREATE,[database],[object], [timestamp],[serverhost],[username],[host],[connectionid],[queryid],READ,[database],[object], [timestamp],[serverhost],[username],[host],[connectionid],[queryid],WRITE,[database],[object], [timestamp],[serverhost],[username],[host],[connectionid],[queryid],ALTER,[database],[object], [timestamp],[serverhost],[username],[host],[connectionid],[queryid],RENAME,[database], [object_old]|[database_new].[object_new], [timestamp],[serverhost],[username],[host],[connectionid],[queryid],DROP,[database],[object],