防火墙——将保护您免受任何软件中至少50%的全部类型的***。MySQL在企业版里为用户提供了防火墙功能。html
MySQL的防火墙提供应用级别的防御,数据库管理员能够经过防火墙容许或拒绝SQL文的执行。经过它能够防止SQL注入***以及非法利用数据库。mysql
MySQL的防火墙是基于每一个用户的白名单(白名单记录的是摘要语句,用户能够自定义长度)实现,每一个用户的防火墙模式有三种,记录、保护和检测模式。工做流程能够参考下图:sql
当服务器接收到客户端的SQL语句以后,通过解析器标识到达防火墙。防火墙会基于用户采用的模式进行判断,若是未开启防火墙将进入执行SQL阶段。若是开启了防火墙的记录模式,防火墙会将这些SQL语句存储到白名单。若是是其它模式,防火墙将会与白名单内容进行匹配,若是SQL语句不匹配,将会发送警告至错误日志,若是开启的是保护模式,则阻挡该SQL语句执行。数据库
MySQL的防火墙主要由如下几个组件构成:缓存
服务器端名为MYSQL_FIREWALL 的插件:该插件主要负责校验SQL语句是否与白名单匹配。安全
MYSQL_FIREWALL_USERS 和 MYSQL_FIREWALL_WHITELIST 视图:用于缓存防御墙的白名单和用户数据。服务器
firewall_users 和 firewall_whitelist系统表:位于mysql系统数据库,用于存放防火墙的白名单和用户数据。ide
防火墙的安装过程很是简单,能够经过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的安全。