MySQL企业版之Firewall(SQL防火墙)


还有待改进。

1. 关于Firewall插件2. Firewall插件的工作方式3. Firewall插件测试4. 总结延伸阅读

1. 关于Firewall插件

Friewall是MySQL企业版非常不错的功能插件之一,启用Firewall功能后,SQL的执行流程见下图示意:

2. Firewall插件的工作方式

Firewall插件的工作机制大概是这样的:

0.将某个账号Register(注册)到Firewall插件中,未注册的账号将不会被Firewall插件保护。

1.先将Firewall插件设置 recording(记录)模式,将各种SQL格式化/模式化之后,形成各种不同的SQL fingerprint(指纹)。例如下面的两条SQL,都会被格式化成一条:

# 原始SQL
a) SELECT * FROM t1 WHERE c1 = 1;
b) SELECT * FROM t1 WEHRE c1 = 1024;

# 格式化之后的SQL
SELECT * FROM t1 WHERE c1 = ?;

备注:在这个过程中,如果总有超长SQL的话,需要加大参数 max_digest_length 的设置,其默认值是1024。

2.Firewall插件会学习上述SQL,形成一个白名单。

3.经过一段时间的训练后,可以将Firewall插件工作模式切换为 protecting(保护)模式,开始工作。这时候就能自动判断有哪些SQL可能是恶意的,会被自动拒绝,并且记录到日志中,如果启用参数 mysql_firewall_trace的话。

4.如果还发生个别SQL被拒绝的情况,则可以将插件切换回 recording(记录)模式,继续学习训练一段时间再切换到工作状态。

5.此外,还有一种工作模式是detecting(探测),在这个模式下,符合白名单的会被放过执行,而其他SQL则会被记录到日志中,但并不会被拒绝执行,这就相当于正式开始工作前的灰度测试模式了。

简言之,就是在业务账号对外正式开放前,先自行模拟各种正常业务请求,使之完成前期必要的学习,正式上线后再开启保护模式。因为外网生产环境中坏人太多,任意时候都有可能有坏蛋提交各种恶意破坏的请求。

3. Firewall插件测试

接下来我们做个简单的测试场景。
首先,先尝试将一个新账号直接设置为 protecting 模式,这时候该账号还未学习任何规则,因此所有的SQL应该都会被拒绝才对。

[root@yejr.run]>CALL mysql.sp_set_firewall_mode(&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值