MySQL防火墙
上一篇文章中介绍了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')