使用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); |
再进行编译,然后就可以用了。
以上。