6.4.6.4 MySQL 企业防火墙参考
以下讨论可作为对 MySQL 企业防火墙组件的参考:
MySQL 企业防火墙 table
MySQL 企业防火墙维护帐户和白名单信息。它使用mysql
系统数据库中的 table 以持久形式存储此数据,并使用INFORMATION_SCHEMA
table 提供对缓存数据的视图。启用后,防火墙会将其操作决策基于缓存的数据。
只有具有该数据库特权的用户才能访问mysql
table。任何人都可以访问INFORMATION_SCHEMA
table。
mysql.firewall_users
table 列出了已注册的防火墙帐户及其操作模式。该 table 具有以下列(相应的INFORMATION_SCHEMA.MYSQL_FIREWALL_USERS
table 具有相似但不一定相同的列):
USERHOST
在防火墙上注册的帐户。每个帐户的格式均为user_name@host_name
,代 table 服务器验证的实际用户名和主机名。注册用户时,不应使用模式和网络掩码。
MODE
该帐户当前的防火墙操作模式。允许的模式值为OFF
,DETECTING
,PROTECTING
,RECORDING
和RESET
。有关其含义的详细信息,请参见MySQL 企业防火墙的过程和功能中对sp_set_firewall_mode()
的描述。
mysql.firewall_whitelist
table 列出了已注册的防火墙帐户及其白名单。该 table 具有以下列(相应的INFORMATION_SCHEMA.MYSQL_FIREWALL_WHITELIST
table 具有相似但不一定相同的列):
USERHOST
在防火墙上注册的帐户。格式与用户帐户 table 的格式相同。
RULE
table 示帐户可接受的对帐单模式的规范化对帐单。帐户白名单是其规则的并集。
ID
一个整数列,它是 table 的主键。该列是在 MySQL 5.7.23 中添加的。
MySQL 企业防火墙的步骤和功能
MySQL 企业防火墙已存储了执行以下过程的过程,这些任务包括在防火墙中注册 MySQL 帐户,构建其操作模式以及 Management 缓存与底层系统 table 之间的防火墙数据传输。它还具有一组用户定义函数(UDF),这些函数为较低级别的任务提供了 SQL 级别的 API,例如将缓存与基础系统 table 同步。
在正常操作下,存储过程将实现用户界面。 UDF 由存储过程调用,而不是由用户直接调用。
要在默认数据库不是包含该过程的数据库时调用存储过程,请用数据库名称限定过程名称。例如:
CALL mysql.sp_set_firewall_mode(user, mode);
下 table 描述了每个防火墙存储过程和 UDF:
sp_reload_firewall_rules(user)
此存储过程使用防火墙 UDF 重置注册帐户,并从mysql.firewall_whitelist
table 中存储的规则中为其重新加载内存中规则。此过程可控制单个帐户的防火墙操作。
user
*参数将受影响的帐户命名为user_name@host_name
格式的字符串。
Example:
CALL mysql.sp_reload_firewall_rules('fwuser@localhost');
Warning
此过程将帐户模式设置为RESET
,这将清除帐户白名单并将其模式设置为OFF
。如果在sp_reload_firewall_rules()
调用之前帐户模式不是OFF
,请在重新加载规则后使用sp_set_firewall_mode()
恢复其先前的模式。例如,如果该帐户处于PROTECTING
模式,则在调用sp_reload_firewall_rules()
之后不再适用,您必须再次将其显式设置为PROTECTING
。
sp_set_firewall_mode(user, mode)
该存储过程将一个 MySQL 帐户注册到防火墙并构建其操作模式。该过程还根据需要调用防火墙 UDF,以在高速缓存和基础系统 table 之间传输防火墙数据。即使mysql_firewall_mode
系统变量是OFF
,也可以调用此过程,尽管在禁用防火墙时为帐户设置模式没有任何作用。
-
user
*参数将受影响的帐户命名为user_name@host_name
格式的字符串。 -
mode
*是用户的操作模式,为字符串。允许这些模式值:
-
OFF
:禁用该帐户的防火墙。-
DETECTING
:入侵检测模式:将可疑(不匹配)语句写入错误日志,但不拒绝访问。 -
PROTECTING
:通过将传入的语句与帐户白名单进行匹配来保护帐户。 -
RECORDING
:培训模式:记录该帐户可接受的对帐单。不会立即因语法错误而失败的传入语句被记录为帐户白名单规则的一部分。 -
RESET
:清除帐户白名单,并将帐户模式设置为OFF
。
-
将帐户的模式切换为RECORDING
以外的任何模式,会将防火墙缓存数据同步到基础mysql
系统数据库 table 以进行持久存储。将模式从OFF
切换到RECORDING
会将白名单从mysql.firewall_whitelist
table 重新加载到缓存中。
如果帐户的白名单为空,则将其模式设置为PROTECTING
会产生一条错误消息,该错误消息将在结果集中返回,但不会出现 SQL 错误:
mysql> CALL mysql.sp_set_firewall_mode('a@b','PROTECTING');
+----------------------------------------------------------------------+
| set_firewall_mode(arg_userhost, arg_mode) |
+----------------------------------------------------------------------+
| ERROR: PROTECTING mode requested for a@b but the whitelist is empty. |
+----------------------------------------------------------------------+
1 row in set (0.02 sec)
Query OK, 0 rows affected (0.02 sec)
此 UDF 将几个防火墙状态变量重置为 0:
Firewall_access_denied
Firewall_access_granted
Firewall_access_suspicious
Example:
SELECT mysql_firewall_flush_status();
此 UDF 将 SQL 语句标准化为用于白名单规则的摘要形式。
Example:
SELECT normalize_statement('SELECT * FROM t1 WHERE c1 > 2');
此聚合 UDF 通过mysql.firewall_users
table 上的SELECT
语句更新防火墙用户缓存。
Example:
SELECT read_firewall_users('fwuser@localhost', 'RECORDING')
FROM mysql.firewall_users;
此聚合 UDF 通过mysql.firewall_whitelist
table 上的SELECT
语句更新记录的语句高速缓存。
Example:
SELECT read_firewall_whitelist('fwuser@localhost', 'RECORDING')
FROM mysql.firewall_whitelist;
该 UDFManagement 用户缓存并构建用户操作模式。
Example:
SELECT set_firewall_mode('fwuser@localhost', 'RECORDING');
MySQL 企业防火墙系统变量
MySQL 企业防火墙支持以下系统变量。使用它们来配置防火墙操作。除非安装了防火墙,否则这些变量不可用(请参阅第 6.4.6.2 节“安装或卸载 MySQL 企业防火墙”)。
Property | Value |
---|---|
Command-Line Format | --mysql-firewall-mode[={OFF|ON}] |
System Variable | mysql_firewall_mode |
Scope | Global |
Dynamic | Yes |
Type | Boolean |
Default Value | ON |
MySQL 企业防火墙是启用(默认)还是禁用。
Property | Value |
---|---|
Command-Line Format | --mysql-firewall-trace[={OFF|ON}] |
System Variable | mysql_firewall_trace |
Scope | Global |
Dynamic | Yes |
Type | Boolean |
Default Value | OFF |
MySQL 企业防火墙跟踪是启用还是禁用(默认)。启用mysql_firewall_trace时,对于PROTECTING
模式,防火墙将拒绝的语句写入错误日志。
MySQL 企业防火墙状态变量
MySQL 企业防火墙支持以下状态变量。使用它们来获取有关防火墙运行状态的信息。除非安装了防火墙,否则这些变量不可用(请参阅第 6.4.6.2 节“安装或卸载 MySQL 企业防火墙”)。每当安装MYSQL_FIREWALL
插件或启动服务器时,防火墙状态变量都设置为 0.其中许多通过mysql_firewall_flush_status() UDF 重置为零(请参见MySQL 企业防火墙的过程和功能)。
MySQL 企业防火墙拒绝的语句数。
MySQL 企业防火墙接受的语句数。
MySQL Enterprise Firewall 记录的处于DETECTING
模式的用户可疑的语句数。
MySQL 企业防火墙记录的语句数,包括重复项。