如何实现MySQL数据库审计?

author qiuru
##mysql 日志审计功能有三种方式

**一.开启general_log

二.BinLog+Init_connect

三.审计插件**

一、开启general_log

set global general_log=on

#检查验证
show variables like ‘%general_log%’;

弊端:只要用户执行了操作,无论对错,MySQL就会记录日志,这样的话日志量会非常庞大,对数据库效率有影响

二、BinLog+init_connect方式

BinLog是MySQL操作时留下的日志,BinLog一方面可以用在数据库的恢复与主从复制上,另外一方面可以用来做数据库的审计。

由于BinLog日志里面无法查询是谁在哪个时间段登录的等信息,缺少审计必要的信息。在MySQL中,每个连接都会先执行init_connect进行连接的初始化,
我们可以在这里获取用户的登录名称和thread ID值。然后配合BinLog,就可以追踪到每个操作语句的操作时间,操作人等信息,再加上BinLog的日志信息实现审计。

步骤:

1.创建审计用的数据库和表
create database audit_db ;

use audit_db;

create table access_log(
id int primary key auto_increment,
connection_id int,
connection_user varchar(30),
logintime datetime
);

grant all privileges on audit_log.* to ‘user001’@‘localhost’ identified by ‘password001’;

flush privileges;

2.设置init_connect,并重启MySQL数据库在初始化参数文件[mysql]部分添加如下内容
log-bin=mysql-bin #开启Binlog
init_connect=‘insert into audit_db.access_log(connection_id, connection_user,logintime) values(connection_id(),user(),now());’ #设置初始化连接参数

3.使用user001登录进行增删改查的操作

4.用mysqlbinlog工具查看BinLog,根据delete操作找到相应的Thread Id,而后在前面创建的审计日志表audit_db.access_log里面根据ThreadID找到用户登录信息

show master status;

比如:查看当前binlog mysqlbin.000029的内容,并找到delete操作对应的ThreadID
mysqlbinlog …/data/mysql-bin.000029

从Binlog中可以得知删除Test2表对应的threadid是8,根据ThreadID在审计表里查看用户的登录信息,可以得知这个删除操作是user001用户在本机执行的操作

select * from audit_log.access_log;

弊端:采用这种方式进行审计,由于init-connect只会在连接时执行,不会对数据库产生大的性能影响,但是init-connect不会记录拥有root权限的用户记录.

三、审计插件方式

除了商业版的审计插件外,常见的还有三类审计插件Percona Audit Log Plugin、MariaDB Audit Plugin、McAfee MySQL Audit Plugin。
这几个插件功能上大同小异,只是展示的内容和格式略有不同。我们以MariaDB Audit Plugin为例,给大家介绍如何采用插件的方式实现对Mysql数据的审计

mysql与MariaDB 的版本对应很重要,低版本的容易导致数据库奔溃,\5.7.17版本的mysql数据库、MariaDB 的版本是5.5.57下载路径https://downloads.mariadb.org/mariadb/5.5/

下载地址:https://downloads.mariadb.org/mariadb/

下载mariadb的数据库进行安装 然后拷贝里面的server_audit.so文件

把server_audit.so复制到对应的mysql插件库中/usr/lib64/mysql/plugin,执行install安装命令
INSTALL PLUGIN server_audit SONAME ‘server_audit.so’;

#验证查看
show variables like ‘%server_audit%’;

审计参数说明:
server_audit_logging:启动或关闭审计
server_audit_events:指定记录事件的类型,可以用逗号分隔的多个值(connect,query,table) ,默认为空代表审计所有事件。
server_audit_incl_users:指定哪些用户的活动将记录,默认审计所有用户,该变量比
server_audit_excl_users:优先级高
server_audit_excl_users:指定哪些用户行为不记录
server_audit_output_type:指定日志输出类型,可为SYSLOG或FILE,缺省输出至审计文件

#开启
set global server_audit_logging=on

做一些增删改查的操作 看日志文件记录内容

参考资料:
https://blog.csdn.net/chj_1224365967/article/details/112879957
https://www.58jb.com/html/160.html
https://www.cnblogs.com/lll-freshman/p/13651952.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值