目前mysql审计功能,大都是通过开启审计插件或者在中间件上吐出日志记录到相应的存储设备上,是可以实现审计功能的,但这些方法都需要额外的存储成本,对于体谅大的公司,也是一笔部小的开销.
目前我们维护的中间件系统,需要具有审计功能,最初的想法是将sql及操作来源记录到第三方系统,但是考虑成本问题.本人想到了利用mysql的注释功能,将操作的来源加入到mysql语句中,这样也实现了一定的审计功能呢.
好处:
- 注释的sql会记录到binlog(增,删,改操作),慢日志(操过指定时长的全部sql),全日制(当开启时),无须单独的存储空间.
- 周期为日志文件的保留时间,一般公司的二进制日志会保留稍长一段时间,一般异常情况下,也会通过binlog查找业务的异常,这样,也把操作的来源能够找到,更方便定位问题.
实现:
此种做法一般需要公司有中间件,在中间件加入审计相关的注释,无需应用端做任何改造
修改公司的基础包,类似引入公共java包类似的基础包,操作数据库时,直接将相关信息加进去.
测试sql如下:
/* benchtestmjq_rw;172.20.1.1 */ update t1 set id=1000 where id=6
默认情况下利用mysql客户端是没有效果的,因为mysql客户端默认将注释去掉.
需要这样操作,因为comments参数是默认关闭的:
# mysql --help | grep comments
-c, --comments Preserve comments. Send comments to the server. The
default is --skip-comments (discard comments), enable
with --comments.
comments FALSE
# mysql -c -uroot -p123456