OneProxy :: 利用正则表达式对SQL语句以及记录进行审计,加强数据库安全!

虽然在中间件上已经可以做不少的安全限制,也可以开启白名单功能来对IP和SQL做限制,但对SQL语句中的变量值以及返回的数据本身并没有作任何检查,在数据安全越来越重要的今天,基于数据内容的审计也是必不可少的。需要随时能够回答这样的问题:哪些SQL涉及了敏感数据?哪些IP访问了敏感数据?在数据库中间件上可以很方便地对SQL及返回的记录进行内容审计,让你可以随时准确地回答前面的两个问题。在OneProxy中,可以设置“proxy-regexpr-audits”选项来识别出有邮件地址的查询(无化是在SQL语句中,还是在返回的记录中),如下所示:

proxy-regexpr-audits.1   = 正则表达式
proxy-regexpr-audits.2   = 正则表达式

下面是用来检查邮件地址的正则表达式:

[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})

接下来我们在数据库中创建一个有邮箱地址的表,如下所示:

mysql> select * from t_email;
+----+----------------+
| id | col2           |
+----+----------------+
|  1 | anysql@126.com |
|  2 | anysql@126.com |
+----+----------------+
2 rows in set (0.00 sec)

当经过中间件发出如下查询语句时,相关的SQL都会被记录下来:

mysql> select * from t_email where id = 1;
+----+----------------+
| id | col2           |
+----+----------------+
|  1 | anysql@126.com |
+----+----------------+
1 row in set (0.00 sec)

mysql> select * from t_email where id = 2;
+----+----------------+
| id | col2           |
+----+----------------+
|  2 | anysql@126.com |
+----+----------------+
1 row in set (0.00 sec)

可以在OneProxy的日志文件中找到相应的审计日志,就可以知道是从哪个IP地址过来的:

... SQLAudit (192.168.1.119:33183) : select * from t_email where id = 1
... SQLAudit (192.168.1.119:33183) : select * from t_email where id = 2

这是基于返回结果集的审计,如果在SQL语句中包含邮件地址,也会被审计下来:

mysql> select * from t_email where col2 = 'anysql@gmail.com';
Empty set (0.00 sec)

虽然在结果集中没有,但在日志文件还是可以找到此条SQL语句:

... (192.168.1.119:50348) : select * from t_email where col2 = 'anysql@gmail.com'

上面只是功能演示,目前正在设计审计日志的保存方式和展示形式,欢迎大家提出宝贵的意见。