防火墙——将保护您免受任何软件中至少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的安全。

©著作权归作者所有:来自51CTO博客作者mb5ff97fc6948e0的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 揭秘一条select语句,在MySQL中权限访问控制内幕
  2. 实战:从Mysql数据库frm文件中,提取表结构创建SQL语句
  3. MySQL如何管理客户端连接?线程池篇
  4. Linux下Shell的for循环语句N种写法
  5. 给Mysql服务添加防火墙策略,就这么简单
  6. C#数据库操作类
  7. 类名的引入及自动加载类和常用mysql语句
  8. Hive底层原理:explain执行计划详解
  9. 我的第12个代码

随机推荐

  1. Android APK 文件自动安装
  2. androidd 几个开源框架
  3. Android截屏及图片解析
  4. 实例教程四:采用Pull解析器解析和生成XML
  5. android 相机 前后摄像头判断
  6. Android JNI学习笔记——so文件动态加载
  7. android.inputmethodservice.KeyboardVie
  8. 2.在服务器上使用 gradle 打包 android
  9. Android(安卓)中 AlertDialog 的多种创建
  10. Android技术文章收集