MySQL防火墙

2023年 10月 18日 26.3k 0

上一篇文章中介绍了SQL注入攻击,避免MySQL遭受SQL注入攻击的方法之一是使用防火墙。

简介

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”。通过调用存储过程来设置:

    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”实现,例如:

      CALL mysql.sp_set_firewall_mode('user@host','PROTECTING')
      CALL mysql.sp_set_firewall_mode('user@host','OFF')

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

        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语句数量等状态。例如,

          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 |
          +----------------------------+-------+

          以上内容是关于MySQL防火墙的简单介绍,如需了解详情,请访问官网手册。

          感谢关注“MySQL解决方案工程师”!

          相关文章

          Oracle如何使用授予和撤销权限的语法和示例
          Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
          下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
          社区版oceanbase安装
          Oracle 导出CSV工具-sqluldr2
          ETL数据集成丨快速将MySQL数据迁移至Doris数据库

          发布评论