使用ProxySQL做数据库审计
2017/08/24
posted in
ProxySQL
2017/08/24
posted in
ProxySQL
数据库审计是数据库运维中的一项重要手段,mysql的主流发行版本都提供有各种数据库审计的插件。
Oracle
公司对MySQL企业版
提供了官方的审计插件。
Mcafee
公司也对MySQL
提供了相应的审计插件。
但是审计插件
的使用会有一定的性能开销,并且也存着相应的风险。
但是如果我们使用了中间件后,在中间件中对MySQL
做审计,则完全没有了这样的顾虑。
使用proxysql
做审计的思路很简单,在proxysql
的转发规则中我们可以设置对指定规则记录日志。那么我们就可以对一些敏感操作进行审计。
首先,我们来创建一个存放日志的目录:
mkdir -p /data/ProxySQL/log
然后在ProxySQL
中配置日志的地址
# 首先进入管理端口:
$ mysql -uadmin -padmin -h127.0.0.1 -P6032
# 然后设置变量,并加载和持久化:
set mysql-eventslog_filename = ‘/data/ProxySQL/log/sql.log’
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
在mysql_query_rules
表中设置路由规则
# 记录所有delete操作
Insert into mysql_query_rules(rule_id,active,match_digest,log,apply) values(1000,1,’^delete’,1,1)
这样,所有通过proxysql
的delete
操作都会记入日志
但是proxysql
的日志时二进制格式的,我们需要通过proxysql
提供的一个工具eventslog_reader_sample
进行解析
但是我们安装的rpm包里并没有这个工具,我们需要单独下载并编译它
在 https://github.com/sysown/proxysql/tree/v1.4.2/tools 我们可以看到eventslog_reader_sample.cpp
和Makefile
文件
我们需要下载并make一下,就可以生成可用的工具了。
我在编译eventslog_reader_sample
的时候遇到了一些问题,在编译好以后使用eventslog_reader_sample
解析二进制log时会报错
这可能和proxysql
的版本有关系,在eventslog_reader_sample
执行时会判断log
文件的第一个字节是否为0x00
,而我输出的log
都是以0x81
开头的。所以总会报错。
解决的方法是修改cpp文件,我直接将99-105行的判断
switch (et) {
case PROXYSQL_QUERY:
read_query(f);
break;
default:
break;
}
给去掉了,直接改成了
read_query(f);
再进行编译,然后就可以用了。
以上。