MySQL之添加日志审计功能

数据库审计主要用于监视并记录对数据库服务器的各类操作行为,并记入审计日志或数据库中以便日后进行跟踪、查询、分析,以实现对用户操作的监控和审计。审计是一项非常重要的工作,也是企业数据安全体系的重要组成部分。

MySQL企业版自带审计功能,但是需要付费。MySQL社区版没有审计功能,基于成本的考虑,很多用户采用社区版MySQL作为业务系统数据库。采用社区版MySQL如何实现重要的审计功能,本文从自建和云服务两种情况来解答这个问题。

自建MySQL数据库的场景

方法一。 Genreal Log
默认情况下,MySQL不开启General log; 开启General log后,MySQL将所有到达MySQL Server的SQL语句记录下来。

开启General log步骤:

1、查看General Log开启情况:执行SQL命令show variables like '%general_log%’ ;可以看到默认general_log是OFF的:
在这里插入图片描述
2、开启General Log: 执行SQL命令set global general_log=on 而后查看general_log打开了:
在这里插入图片描述
3、验证:general_log打开后,所有SQL的访问都会记录在general_log_file指向的日志文件。我们执行几个SQL语句测试:

在这里插入图片描述
而后查看localhost.log日志文件(日志文件名和位置可能不一样,本人的日志路径为:/var/lib/mysql/localhost.log)里面的内容,我们看到刚才做的操作都已经记录在日志里了:
在这里插入图片描述
开启General Log只要用户执行了操作,无论对错,MySQL就会记录日志,这样的话日志量会非常庞大,对数据库效率有影响。所以我们一般不建议开启开功能,个别情况下可能会临时的开一段时间以供排查故障等使用。

方法二 BinLog+Init_connect

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

由于BinLog日志里面无法查询是谁在哪个时间段登录的等信息,缺少审计必要的信息。在MySQL中,每个连接都会先执行init_connect进行连接的初始化,我们可以在这里获取用户的登录名称和thread ID值。然后配合BinLog,就可以追踪到每个操作语句的操作时间,操作人等信息,再加上BinLog的日志信息实现审计。
配置和验证过程如下:
1、创建审计用的数据库和表:
在这里插入图片描述
2、创建具有操作auditdb数据权限的用户
在这里插入图片描述
如果已经有用户,需要对现有用户添加操作auditdb的权限:

1MySQL> insert into mysql.db (Host,Db,User1,Insert_priv) values ('%','auditdb','','Y');
2Query OK, 1 row affected (0.03 sec)
3MySQL> flush privileges;
4Query OK, 0 rows affected (0.00 sec)

3、设置init_connect,并重启MySQL数据库在初始化参数文件[mysql]部分添加如下内容:

log-bin=mysql-bin #开启Binlog
init_connect='insert into auditdb.accesslog(connectionid, connectionuser,logintime) values(connection_id(),user(),now());' #设置初始化连接参数

在这里插入图片描述
4、用user1用户登录,执行一些写入和删除的操作;
在这里插入图片描述
5、用mysqlbinlog工具查看BinLog,根据delete操作找到相应的ThreadId,而后在前面创建的审计日志表auditdb.accesslog里面根据ThreadID找到用户登录信息:
在这里插入图片描述
查看当前binlog mysqlbin.000029的内容,并找到delete操作对应的ThreadID D:\mysql57\bin>mysqlbinlog …/data/mysql-bin.000029

在这里插入图片描述
从Binlog中可以得知删除Test2表对应的threadid是8,根据ThreadID在审计表里查看用户的登录信息,可以得知这个删除操作是user1用户在本机执行的操作。
在这里插入图片描述
说明:采用这种方式进行审计,由于init-connect只会在连接时执行,不会对数据库产生大的性能影响,但是init-connect不会记录拥有root权限的用户记录.

方法三 使用审计插件

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

一、下载与安装

1、下载MariaDB Audit Plugin插件(下载地址:https://downloads.mariadb.org/mariadb/5.5.64/)
在这里插入图片描述
2、安装:把server_audit.dll复制到对应的mysql插件库中D:\mysql57\lib\plugin,执行install安装命令:
在这里插入图片描述
3、安装验证:Mysql>show variables like ‘%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,缺省输出至审计文件

三、审计过程示例
1、开启审计mysql>set global server_audit_logging=on

在这里插入图片描述
由于是验证测试,我们其余参数都按默认设置。

2、执行一些数据库操作:
在这里插入图片描述
3、查看审计记录日志,server_audit.log,默认在data目录下:
在这里插入图片描述
我们看见,刚才在Mysql数据库的操作都已经审计上了。

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MySQL 5.7 中,可以通过以下步骤来启用审计: 1. 打开 MySQL 配置文件 my.cnf,在 [mysqld] 下添加以下配置项: ``` [mysqld] # 启用审计 audit_log=ON # 审计日志文件路径和文件名 audit_log_file=/var/log/mysql/mysql-audit.log # 审计日志格式 audit_log_format=JSON ``` 2. 重启 MySQL 服务。 3. 使用以下语句创建审计日志表: ``` CREATE TABLE mysql.audit_log ( event_time TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), server_host VARCHAR(255) NOT NULL, server_user VARCHAR(255), log_level VARCHAR(255), thread_id BIGINT(20) UNSIGNED NOT NULL, server_id INT UNSIGNED NOT NULL, command_class VARCHAR(64) NOT NULL, command_text TEXT NOT NULL, argument TEXT, affected_rows BIGINT, sql_mode VARCHAR(8192), user_variables TEXT, server_variables TEXT, server_version VARCHAR(255), client_host VARCHAR(255), client_user VARCHAR(255), client_port INT UNSIGNED, connection_id BIGINT UNSIGNED, proxy_user VARCHAR(255), proxy_host VARCHAR(255), proxy_port INT UNSIGNED, ssl_cipher VARCHAR(255), x509_issuer VARCHAR(255), x509_subject VARCHAR(255), authentication_type VARCHAR(80), query_id BIGINT UNSIGNED ) ENGINE=ROCKSDB; ``` 4. 现在,MySQL 会将所有的审计事件写入指定的审计日志文件中。可以使用以下语句查询审计日志: ``` SELECT * FROM mysql.audit_log; ``` 需要注意的是,启用审计会增加系统开销,因此在生产环境中需要谨慎使用。同时,审计日志中可能包含敏感信息,需要妥善保管和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值