MySQL之启用MariaDB审计插件
young / / / 阅读量

前言

今天日志审计时发现我们的日志记录不合规,于是上午搜了一下关于MySQL启用审计插件的配置,

对于MySQL Percona MariaDB三家都有自己的审计插件,但是呢,MySQL的审计插件是只有企业版才有的,同时也有很多第三方的的MySQL的审计插件,Percona和MariaDB都是GPL的审计插件,此处以 MariaDB Audit Plugin 为例

安装

下载 MariaDB

wget https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-10.4.12/bintar-linux-x86_64/mariadb-10.4.12-linux-x86_64.tar.gz --no-check-certificate

解压文件后找到server_audit.so插件,将该插件拷贝出来备用(拷贝到mysql的plugin目录中)

安装配置

install plugin server_audit SONAME  "server_audit.so";
SET global server_audit_events='QUERY_DDL,QUERY_DML_NO_SELECT,QUERY_DCL';
SET global server_audit_file_path='/web/soft/mysql-5.6.44/logs/audit.log';
SET global server_audit_file_rotate_size=1073741824;
SET global server_audit_file_rotations=100;
SET GLOBAL server_audit_logging=ON;

通过 show variables like '%audit%'; 可查看当前参数

mysql> show variables like '%audit%';
+-------------------------------+---------------------------------------+
| Variable_name                 | Value                                 |
+-------------------------------+---------------------------------------+
| server_audit_events           | QUERY_DDL,QUERY_DML_NO_SELECT         |
| server_audit_excl_users       |                                       |
| server_audit_file_path        | /web/soft/mysql-5.6.44/logs/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          | 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                              |
+-------------------------------+---------------------------------------+

变量解释

server_audit_events :指定记录事件的类型,用逗号分隔多个值(connect,query,table),如果开启了查询缓存(query cache),查询直接从缓存返回数据,将不会有table的记录;
server_audit_output_type : file (输出日志和syslog分离,则需要设置为file。也可以设置为syslog,表示输出日志到syslog中);
server_audit_file_path  :  server_audit.log(server_audit.log的默认路径在mysql的数据目录),可以设置成其他路径;
server_audit_file_rotate_size : 1073741824(设置server_audit.log大小达到限制后进行轮替);
server_audit_file_rotations : 100 (日志文件数量限制为9个);
server_audit_incl_users : 需要进行行为审计的用户;
server_audit_excl_users : 不需要进行行为审计的用户(connect不受该设置影响);
server_audit_file_rotate_now : 设置该值为on表示强制进行日志轮替;
server_audit_syslog_ident : mysql-server_auditing(设置ident,作为syslog记录的一部分);
server_audit_syslog_info : 指定字符串加入到syslog的输出中;

添加MySQL配置

修改/etc/mysql/my.cnf文件,在文件末尾添加如下内容,防止重启失效

[mysqld]

log_output=FILE
server_audit=FORCE_PLUS_PERMANENT  
server_audit_file_path=/web/soft/mysql-5.6.44/logs/audit.log
server_audit_events = 'QUERY_DDL,QUERY_DML_NO_SELECT,QUERY_DCL'
server_audit_logging=ON
server_audit_file_rotate_size=1G
server_audit_file_rotations=100
server_audit_syslog_priority=LOG_INFO

重新启动MySQL

service mysql restart

测试

然后操作mysql 即可在/web/soft/mysql-5.7.29/logs/audit.log 中看到日志信息

20200601 17:32:11,Wechat-MySQL-Master,amtdb,10.255.50.106,4,3,QUERY,wechat,'drop table wct_group_r_user_bak',1051
20200601 17:32:21,Wechat-MySQL-Master,amtdb,10.255.50.106,4,23,QUERY,wechat,'drop table wct_group_r_user_bak',1051
20200601 17:32:34,Wechat-MySQL-Master,amtdb,10.255.50.106,4,31,QUERY,wechat,'drop table cms_live_channel_bak',0
20200601 17:32:44,Wechat-MySQL-Master,amtdb,10.255.50.106,4,35,QUERY,wechat,'drop table cms_live_look_back_bak',0
20200601 17:33:34,Wechat-MySQL-Master,amtdb,10.255.50.106,4,65,QUERY,wechat,'truncate table cms_content',0

注意

开启插件会对数据库性能有影响,具体影响数值未测试,在使用插件时需权衡

附录

所有操作类型

类型名称
CONNECT 连接,断开连接和失败的连接-包括错误代码
QUERY 执行的查询及其结果为纯文本格式,包括由于语法或权限错误而导致的查询失败
TABLE 受查询执行影响的表
QUERY_DDL QUERY,但仅过滤DDL类型的查询(CREATEALTERDROPRENAMETRUNCATE语句-除了CREATE/DROP [PROCEDURE / FUNCTION / USER]RENAME USER(他们不是DDL)
QUERY_DML QUERY,但仅过滤DML类型的查询(DOCALLLOAD DATA/XMLDELETEINSERTSELECTUPDATEHANDLERREPLACE语句)
QUERY_DML_NO_SELECT 与相同QUERY_DML,但不记录SELECT查询。(因为版本1.4.4)( , ,DOCALL,,LOAD DATA/XML , 和语句)DELETE``INSERT``UPDATE``HANDLER``REPLACE
QUERY_DCL QUERY,但仅过滤DCL型查询(CREATE USERDROP USERRENAME USERGRANTREVOKESET PASSWORD语句)
支付宝捐赠
请使用支付宝扫一扫进行捐赠
微信捐赠
请使用微信扫一扫进行赞赏
有 0 篇文章