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 具有相似但不一定相同的列):

  • USERHOST

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

  • MODE

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

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

  • 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_whitelisttable 中存储的规则中为其重新加载内存中规则。此过程可控制单个帐户的防火墙操作。

  • 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_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 企业防火墙”)。

PropertyValue
Command-Line Format--mysql-firewall-mode[={OFF|ON}]
System Variablemysql_firewall_mode
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueON

MySQL 企业防火墙是启用(默认)还是禁用。

PropertyValue
Command-Line Format--mysql-firewall-trace[={OFF|ON}]
System Variablemysql_firewall_trace
ScopeGlobal
DynamicYes
TypeBoolean
Default ValueOFF

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 企业防火墙记录的语句数,包括重复项。