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

庆登登登 2024-10-07 09:37:00 阅读 86

一、基本介绍

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、修改插件的权限及属主

<code>[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/

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

以上步骤,已经完成审计插件的安装和配置,下面来了解一下主要配置参数的作用:

在这里插入图片描述

日志内容示例:

<code># 进行操作后 查看审计日志内容

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]

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



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。