mysql审计之general_log
精选
原创
©著作权归作者所有:来自51CTO博客作者哭泣的馒头的原创作品,请联系作者获取转载授权,否则将追究法律责任
一、概述
1、配置参数
#开启审计日志
general_log=on
#配置审计日志文件,mysql默认配置的是datadir目录下面,主机名.log的文件
general_log_file=/data/mysql/general_log
#配置日志输出到文件还是表,默认文件
log_output=file
2、优势
mysql自带,不需要额外安装插件
配置参数可以直接全局配置(set global),不需要重启数据库
3、弊端
只要用户执行了操作,无论对错,MySQL就会记录日志,这样的话日志量会非常庞大,对数据库效率有影响
无法控制记录SQL类型(连接、查询等),全量记录,而且还是明文记录,容易记录敏感信息
二、具体配置
1、日志写到文件
1、概述
当前使用的mysql版本为8.0.25,基于binlog的主从复制
2、配置参数
general_log=on
general_log_file=/data/mysql/general_log
log_output=file
3、试验记录
数据库启动general_log的信息会写入general_log
所有的操作都会记录,从库启动线程,主库也会记录连接信息
对于主从同步,从库会记录建库、建表等语句,对于数据增删改查只显示Begin、Commit,不显示具体SQL命令
当然默认的查询不会同步到从库,更改参数也不会同步到从库
如果手动删除general_log,即使重新touch创建也不会写入日志,可以set global general_log=off/on,重新启动general日志
所以使用脚本不能直接mv,可以cp复制完,cat /dev/null > general.log
日志记录的时间默认少8小时,可以配置set global log_timestamps=system解决,也可以采集的时候date -d 'sqltime' +%Y%m%d%H%M%S进行转换
2、日记写到table
1、配置参数
general_log=on
general_log_file=/data/mysql/general_log
log_output=table
2、试验记录
数据库启动general_log的信息会写入general_log
数据存储在mysql.general_log,这张表不会主从同步到从库
数据同步和file模式一下,主从同步账号是skip-grants user []@[],正常的是用户[用户]@主机名[IP]
直接查看表中命令全是加密的,使用-e也是密文,-e加重定向到文件,查看文件中内容是明文的
时间是正常的
数据无法被delete,但是可以truncate,注意主库truncate语句会同步到从库
3、关闭general_log
set global general_log=off
如果配置文件配置了,删掉就好