Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2796372
  • 博文数量: 389
  • 博客积分: 4177
  • 博客等级: 上校
  • 技术积分: 4773
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-16 23:29
文章分类

全部博文(389)

分类: Mysql/postgreSQL

2015-05-27 16:23:49

                                              MaxScale语句改写

     MaxScale的一个很强大功能就是可以对某些SQL进行过滤,比如在生产环境中我可能有这样的需求,不允许执行
某些高危的sql,比如所有delete语句通通禁止.

启用正则表达式模块,改写sql关键字

[fetch]
type=filter
module=regexfilter
match=delete
replace=

[fetch1]
type=filter
module=regexfilter
match=insert
replace=xx


在定义好的路由器上使用这两个filter,多个filter之前用'|'号分开


filters=fetch|qla|fetch1

刚开始的filter不会被激活,只会在第一次使用的时候才会被激活

MaxScale> show filters
Filter 0x109c0a40 (qla)
        Module: qlafilter
        Options:        /tmp/QueryLog
        Module not loaded.
Filter 0x109c0860 (fetch)
        Module: regexfilter
        Module not loaded.
Filter 0x109c0680 (fetch1)
        Module: regexfilter
        Module not loaded.


在客户端发布以下sql

mysql> delete from sbtest.ttt;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from sbtest.ttt' at line 1
mysql> insert into ttt values(11,12);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'xx into ttt values(11,12)' at line 1
mysql>

可以看到delete语句失败了,而insert语句的insert关键字好变成了'xx',初步实现了我们的改写sql关键字的目标

现在再次查看两条规则,可以看到已经被激活了


MaxScale> show filters
Filter 0x109c0a40 (qla)
        Module: qlafilter
        Options:        /tmp/QueryLog
Filter 0x109c0860 (fetch)
        Module: regexfilter
                Search and replace:                     s/delete//
Filter 0x109c0680 (fetch1)
        Module: regexfilter
                Search and replace:                     s/insert/xx/

阅读(3666) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~