使用ProxySQL做数据库审计
为什么要使用中间件做审计
数据库审计是数据库运维中的一项重要手段,mysql的主流发行版本都提供有各种数据库审计的插件。
Oracle公司对MySQL企业版提供了官方的审计插件。
Mcafee公司也对MySQL提供了相应的审计插件。
但是审计插件的使用会有一定的性能开销,并且也存着相应的风险。
但是如果我们使用了中间件后,在中间件中对MySQL做审计,则完全没有了这样的顾虑。
使用proxysql做审计
使用proxysql做审计的思路很简单,在proxysql的转发规则中我们可以设置对指定规则记录日志。那么我们就可以对一些敏感操作进行审计。
首先,我们来创建一个存放日志的目录:
1 | mkdir -p /data/ProxySQL/log |
然后在ProxySQL中配置日志的地址
1 | 首先进入管理端口: |
在mysql_query_rules表中设置路由规则
1 | # 记录所有delete操作 |
这样,所有通过proxysql的delete操作都会记入日志
但是proxysql的日志时二进制格式的,我们需要通过proxysql提供的一个工具eventslog_reader_sample进行解析
但是我们安装的rpm包里并没有这个工具,我们需要单独下载并编译它
在https://github.com/sysown/proxysql/tree/v1.4.2/tools我们可以看到eventslog_reader_sample.cpp和Makefile文件
我们需要下载并make一下,就可以生成可用的工具了。
tips
我在编译eventslog_reader_sample的时候遇到了一些问题,在编译好以后使用eventslog_reader_sample解析二进制log时会报错

这可能和proxysql的版本有关系,在eventslog_reader_sample执行时会判断log文件的第一个字节是否为0x00,而我输出的log都是以0x81开头的。所以总会报错。
解决的方法是修改cpp文件,我直接将99-105行的判断
1 | switch (et) { |
给去掉了,直接改成了
1 | read_query(f); |
再进行编译,然后就可以用了。
以上。