6.4.6.4 MySQL 企业防火墙参考

以下讨论可作为对 MySQL 企业防火墙组件的参考:

MySQL 企业防火墙 table

MySQL 企业防火墙维护帐户和白名单信息。它使用mysql系统数据库中的 table 以持久形式存储此数据,并使用INFORMATION_SCHEMAtable 提供对缓存数据的视图。启用后,防火墙会将其操作决策基于缓存的数据。

只有具有该数据库特权的用户才能访问mysqltable。任何人都可以访问INFORMATION_SCHEMAtable。

mysql.firewall_userstable 列出了已注册的防火墙帐户及其操作模式。该 table 具有以下列(相应的INFORMATION_SCHEMA.MYSQL_FIREWALL_USERStable 具有相似但不一定相同的列):

在防火墙上注册的帐户。每个帐户的格式均为user_name@host_name,代 table 服务器验证的实际用户名和主机名。注册用户时,不应使用模式和网络掩码。

该帐户当前的防火墙操作模式。允许的模式值为OFFDETECTINGPROTECTINGRECORDINGRESET。有关其含义的详细信息,请参见MySQL 企业防火墙的过程和功能中对sp_set_firewall_mode()的描述。

mysql.firewall_whitelisttable 列出了已注册的防火墙帐户及其白名单。该 table 具有以下列(相应的INFORMATION_SCHEMA.MYSQL_FIREWALL_WHITELISTtable 具有相似但不一定相同的列):

在防火墙上注册的帐户。格式与用户帐户 table 的格式相同。

table 示帐户可接受的对帐单模式的规范化对帐单。帐户白名单是其规则的并集。

一个整数列,它是 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:

此存储过程使用防火墙 UDF 重置注册帐户,并从mysql.firewall_whitelisttable 中存储的规则中为其重新加载内存中规则。此过程可控制单个帐户的防火墙操作。

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

该存储过程将一个 MySQL 帐户注册到防火墙并构建其操作模式。该过程还根据需要调用防火墙 UDF,以在高速缓存和基础系统 table 之间传输防火墙数据。即使mysql_firewall_mode系统变量是OFF,也可以调用此过程,尽管在禁用防火墙时为帐户设置模式没有任何作用。

将帐户的模式切换为RECORDING以外的任何模式,会将防火墙缓存数据同步到基础mysql系统数据库 table 以进行持久存储。将模式从OFF切换到RECORDING会将白名单从mysql.firewall_whitelisttable 重新加载到缓存中。

如果帐户的白名单为空,则将其模式设置为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_userstable 上的SELECT语句更新防火墙用户缓存。

Example:

SELECT read_firewall_users('fwuser@localhost', 'RECORDING')
FROM mysql.firewall_users;

此聚合 UDF 通过mysql.firewall_whitelisttable 上的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 企业防火墙记录的语句数,包括重复项。

首页