您的位置:首页 > 数据库 > MySQL

MySQL的防火墙功能

2021-02-28 22:21 477 查看

防火墙——将保护您免受任何软件中至少50%的所有类型的***。MySQL在企业版里为用户提供了防火墙功能。

MySQL的防火墙提供应用级别的防护,数据库管理员可以通过防火墙允许或拒绝SQL文的执行。通过它可以防止SQL注入***以及非法利用数据库。

MySQL的防火墙是基于每个用户的白名单(白名单记录的是摘要语句,用户可以自定义长度)实现,每个用户的防火墙模式有三种,记录、保护和检测模式。工作流程可以参考下图:

当服务器接收到客户端的SQL语句之后,经过解析器标识到达防火墙。防火墙会基于用户采用的模式进行判断,如果未开启防火墙将进入执行SQL阶段。如果开启了防火墙的记录模式,防火墙会将这些SQL语句存储到白名单。如果是其它模式,防火墙将会与白名单内容进行匹配,如果SQL语句不匹配,将会发送警告至错误日志,如果开启的是保护模式,则阻挡该SQL语句执行。

MySQL的防火墙主要由以下几个组件构成:

  • 服务器端名为MYSQL_FIREWALL 的插件:该插件主要负责校验SQL语句是否与白名单匹配。

  • MYSQL_FIREWALL_USERS 和 MYSQL_FIREWALL_WHITELIST 视图:用于缓存防护墙的白名单和用户数据。

  • firewall_users 和 firewall_whitelist系统表:位于mysql系统数据库,用于存放防火墙的白名单和用户数据。

  • sp_set_firewall_mode() 和 sp_reload_firewall_rules():两个存储过程用于设置防火墙的模式和加载防火墙规则。

防火墙的安装过程非常简单,可以通过MySQL WorkBench进行安装,也可以手动进行安装,安装过程在这里不进行详述,可以访问官网手册:“https://dev.mysql.com/doc/refman/8.0/en/firewall-installation.html”。

MySQL防火墙的使用方法也非常简单,在这里举一个简单的例子进行说明。防火墙除了可以防止遭受注入***等安全事件,还可以利用它对SQL语句的执行进行规范和限制,例如,删除或更新语句不加上where条件等等。

安装好防火墙之后,默认是开启的,可以通过下面语句确认:

mysql> SHOW GLOBAL VARIABLES LIKE 'mysql_firewall_mode';

之后,可以对用户开启记录模式:


开启记录模式之后,可以对白名单进行训练,使应用程序的完整遍历周期里用到的SQL语句保存至白名单。在这里以delete语句为例:

记录之后,可以查看一下白名单的内容:


可以看到白名单里面记录了一条带有where条件的delete语句,接下来我们开启保护模式,并执行一下不带where条件的delete语句:

可以看到,未加where条件的delete语句被防火墙阻挡。

管理员可以通过show status语句查看防火墙的状态和阻挡语句的数量:

上面是一个小小的示例,你可以尝试更多的使用方法,以保证MySQL的安全。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: