前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL的防火墙

MySQL的防火墙

作者头像
bisal
发布2023-10-23 19:31:05
1190
发布2023-10-23 19:31:05
举报

徐老师写的这篇文章《MySQL防火墙》给我们介绍MySQL防火墙功能,之前了解很少,学习借鉴一下。

简介

MySQL的防火墙是应用程序级别的防火墙,通过插件实现,包含在企业版中,它可以允许/拒绝每个注册账户的SQL语句执行。防火墙包含四种模式,“RECORDING”、“PROTECTING”、“DETECTING”,及“OFF”。

防火墙功能由三个插件提供功能,分别是MYSQL_FIREWALL、MYSQL_FIREWALL_USERS,及MYSQL_FIREWALL_WHRITELIST,它们包含在"firewall.so"中,该文件保存在"lib/plugin"路径下面。三个插件分别用于校验缓存中的SQL语句,及实现包含缓存信息的INFROMATION_SCHEMA中的表。

此外,防火墙功能还包含一系列组件:

  • “sp_set_firewall_mode()”存储过程用于设定防火墙的模式。
  • mysql系统库中还包含“firewall_users”表,及“firewall_whitelist”表,用于保存注册用户及SQL语句的白名单。
  • 内部使用的函数,包括“set_firewall_mode()”、“normalize_statement()”、“read_firewall_whitelist()”,“read_firewall_users()”。

安装

安装防火墙时,根据操作系统的不同,选择安装脚本“linux_install_firewall.sql”或“win_install_firewall.sql”。安装脚本将进行安装防火墙插件、创建配置防火墙的存储过程及系统表等工作。

注册用户

注册一个用户并设置它的初始防火墙模式。用户的格式为完整的“user@host”,防火墙的初始模式包含“OFF”,及“RECORDING”。通过调用存储过程来设置:

代码语言:javascript
复制
CALL mysql.sp_set_friewall_mode('user'@'host','OFF')

注意,防火墙的初始模式不能设置为“PROTECTING”,此时白名单为空,将无法执行SQL语句。

训练防火墙

  • 使用“RECORDING”模式注册用户
  • 防火墙为每个注册用户创建规范化的摘要语句,并将其缓存
  • 切换防火墙的模式为“PROTECTING”或“OFF”保存白名单。

注意,如果在“RECORDING”模式下重启mysql服务器,重启后防火墙将不会保存任何白名单内容,因此需要切换为“PROTECTING”或“OFF”保存白名单的内容。当用户希望再次修改白名单的内容时,需要将模式改为“RECORDING”,此时白名单中之前的内容不会消失。

摘要语句

白名单中的SQL语句使用摘要语句保存,摘要语句将压缩空格、删除注释,用占位符替换文字的值,因此用户无需担心应用程序传递过来不同的变量值对SQL语句执行的影响。

开启/关闭防火墙

开启/关闭防火墙通过调用存储过程“sp_set_firewall_mode”实现,例如:

代码语言:javascript
复制
CALL mysql.sp_set_firewall_mode('user@host','PROTECTING')
CALL mysql.sp_set_firewall_mode('user@host','OFF')

防火墙开启后,白名单中存在的语句将允许正常执行,如果白名单中不存在该语句,则该SQL语句被阻挡并返回错误,并在错误日志中记录相关信息。如果管理员希望重置白名单,可以使用如下语句:

代码语言:javascript
复制
CALL mysql.sp_set_firewall_mode('user@host','RESET')

监视防火墙

防火墙的使用状态可以通过状态变量进行监测,状态变量包括“Firewall_access_denied ”、“Firewall_access_granted”、“Firewall_access_suspicious”,及“Firewall_cached_entries”。通过执行“SHOW GLOBAL STATUS LIKE 'Firewall%';”语句可以观察到,拒绝执行的SQL语句数量等状态。例如,

代码语言:javascript
复制
mysql> SHOW GLOBAL STATUS LIKE 'Firewall%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Firewall_access_denied     | 3     |
| Firewall_access_granted    | 4     |
| Firewall_access_suspicious | 1     |
| Firewall_cached_entries    | 4     |
+----------------------------+-------+
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档