MySQL5.7版本实现数据库审计功能

一、基本介绍

MySQL 数据库审计(MySQL Database Auditing)主要将用户对数据库的各类操作行为记录审计日志,以便日后进行跟踪、查询、分析,以实现对用户操作的监控和审计。审计是一项非常重要的工作,也是企业数据安全体系的重要组成部分,等保评测中也要求有审计日志。对于 DBA 而言,数据库审计也极其重要,特别是发生人为事故后,审计日志便于我们进行责任追溯,问题查找。
实现方式

二、实现方式介绍

MySQL 数据库可以通过多种方式进行审计,包括内置插件、第三方插件和旁路部署等实现方式。

内置插件(Enterprise Audit Plugin)
  • MySQL 企业版提供了内置的审计插件 Enterprise Audit Plugin,可以记录数据库中的所有 SQL查询和用户活动。该插件允许用户自定义审计规则,比如记录指定用户或特定事件的操作。适用于需要详细审计日志的企业场景。
  • 优点: 内置于MySQL,稳定且维护方便。
  • 缺点: 需要 MySQL 企业版,开源版无法使用。
第三方插件(MariaDB Audit Plugin)
  • MariaDB 提供了一个开源的审计插件 MariaDB Audit Plugin,可以在 MySQL 5.5、5.6 和 5.7
    上使用。它记录所有的数据库操作,包括登录、查询、更新等,输出为文本格式的审计日志。
  • 优点: 开源,兼容 MySQL 。
  • 缺点: 功能相对MySQL 企业版的审计插件略有不足。

旁路部署方式暂不做介绍,本章主要介绍使用第三方插件(MariaDB Audit Plugin)来实现数据库审计功能。这个插件是MariaDB数据库中自带的插件,MariaDB和MySQL数据库的关系这里不做解释,自行查阅。

三、下载插件

我们需要下载MariaDB数据库,从它的插件目录中\lib\plugin找到server_audit.so插件(这里下载的是linux版本的,windows版本插件为server_audit.dll),将server_audit.so插件拷贝到mysql的插件目录下(/usr/local/mysql/lib/plugin/)
MySQL版本为 5.7.30
MariaDB版本为10.2.38,对应的server_audit.so插件版本为1.4.13

下载地址: MariaDB10.2.38

下面为插件版本和MariaDB对应表
在这里插入图片描述

四、安装插件

1、修改插件的权限及属主
[root@localhost plugin]# chown mysql:mysql server_audit.so
[root@localhost plugin]# chmod 755 server_audit.so
[root@localhost plugin]# ls -lh server_audit.so 
-rwxr-xr-x. 1 mysql mysql 191K May  4  2021 server_audit.so
2、修改MySQL的配置文件my.cnf启动并配置审计插件(永久生效方式)
[mysqld]
# 处理时间戳警告
explicit_defaults_for_timestamp=1

# 启用审计插件
plugin-load=server_audit=server_audit.so

# 启用审计日志记录
server_audit_logging=ON

# 防止插件被卸载
server_audit = FORCE_PLUS_PERMANENT

# 审计日志文件路径
server_audit_file_path=/var/log/mysql/audit.log
# 审计日志格式 写入文件中
server_audit_output_type=FILE
# 日志轮转开关 server_audit_output_type=FILE时设置
server_audit_file_rotate_now=ON
#  日志轮转大小 /B 50MB
server_audit_file_rotate_size=52428800
#  保存的轮转日志数量
server_audit_file_rotations=9

# 审计日志中包含的事件类型(CONNECT, QUERY, TABLE)
server_audit_events=CONNECT,QUERY_DDL,QUERY_DML_NO_SELECT

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

之后重启数据库服务即可生效

以上步骤,已经完成审计插件的安装和配置,下面来了解一下主要配置参数的作用:
在这里插入图片描述
日志内容示例:

# 进行操作后 查看审计日志内容
20220512 15:17:17,mysqlhost2,test_user,10.30.21.95,118,0,FAILED_CONNECT,,,1045
20220512 15:17:30,mysqlhost2,test_user,10.30.21.95,119,0,FAILED_CONNECT,,,1045
20220512 15:20:26,mysqlhost2,test_user,10.30.21.95,124,0,CONNECT,,,0
20220512 15:20:49,mysqlhost2,test_user,10.30.21.95,124,395,QUERY,,'create database testdb',0
20220512 15:22:06,mysqlhost2,test_user,10.30.21.95,129,419,QUERY,testdb,'CREATE TABLE if not exists `test_tb0` (\r\n  `increment_id` int(11) NOT NULL AUTO_INCREMENT COMMENT \'自增主键\',\r\n  `test_id` int(11) NOT 
NULL ,\r\n  `test_name` varchar(20) DEFAULT NULL,\r\n  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT \'创建时间\',\r\n  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE C
URRENT_TIMESTAMP COMMENT \'修改时间\',\r\n  PRIMARY KEY (`increment_id`)\r\n) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT=\'测试table\'',0
20220512 15:23:09,mysqlhost2,test_user,10.30.21.95,129,426,QUERY,testdb,'insert into test_tb0 (test_id,test_name) values (1001,\'4343df\'),(1002,\'dfd\')',0
20220512 15:23:22,mysqlhost2,test_user,10.30.21.95,129,433,QUERY,testdb,'delete from test_tb0',0
20220512 15:24:14,mysqlhost2,test_user,10.30.21.95,129,448,QUERY,testdb,'create table test_tb0 (id int)',1050
20220512 15:24:25,mysqlhost2,test_user,10.30.21.95,129,452,QUERY,testdb,'drop table test_tb0',0
20220512 15:25:13,mysqlhost2,test_user,10.30.21.95,126,0,DISCONNECT,testdb,,0

# 连接审计主要审计连接数据库、断开连接、连接失败等操作,其日志格式如下:
[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]

# QUERY审计各种数据库变更事件,执行失败也会记录,其日志记录格式如下:
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],QUERY,[database],[object], [retcode]

如需使用插件请到主页资源进行下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值