MySQL的防火墙功能
防火墙——将保护您免受任何软件中至少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的安全。
关于MySQL防火墙的内容介绍至此,欢迎您下载试用MySQL防火墙功能!
- 解密所有APP运行过程中的内部逻辑
- RecyclerView数据动态更新
- android PakageManagerService启动流程分析
- RFID入门:Mifare1智能水卡破解分析
- RecyclerView点击事件处理
- Python 实现一个火车票查询的工具
- HTTPS迎来春天:Chrome计划将所有HTTP标记为不安全
- View绘制流程
- Linux Rootkit系列一:LKM的基础编写及隐藏
- Swift基础语法(常量变量、数据类型、元组、可选、断言)
- 【实战】Python 读写 Excel 实例应用
- 10万WordPress网站沦陷:恶意软件SoakSoak来了
- 自己动手实现一个Android Studio插件
- Oracle数据库漏洞分析:无需用户名和密码进入你的数据库
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- PYES异常: TypeError: 'NoneType' object is not callable
- 第十八篇 zabbix创建自定义报警媒介
- 原创|如果懂了HashMap这两点,面试就没问题了
- RTSP协议网络摄像头互联网直播开源流媒体平台
- RTSP协议网页无插件播放,匿名登录不显示设备资源如何解决?
- 设计模式~代理模式
- Linux工具入门:make工具与Makefile文件
- PF_RING的多种负载均衡方法
- 【拓展】686- 如何在 Web 上大规模生成 UUID
- Linux进程管理与性能监控
- 重学数据结构(一、线性表)
- Jmeter系列(49)- 详解 HTTP Cookie 管理器
- java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener问题解决
- ELK + Filebeat + Kafka 分布式日志管理平台搭建
- 一切皆是文件:UNIX,Linux 操作系統的設計哲學