以下部分提供了 MySQL 企业防火墙元素的参考:
MySQL 企业防火墙在每个组和每个帐户的基础上维护配置信息。它使用防火墙数据库中的表来存储持久数据,并使用 INFORMATION_SCHEMA 或性能模式表来提供对缓存数据的视图。当启用时,防火墙基于缓存数据进行操作决策。防火墙数据库可以是 mysql 系统数据库或自定义模式(见 安装 MySQL 企业防火墙)。
Firewall Group Profile Tables
MySQL 企业防火墙使用防火墙数据库(mysql 或自定义)中的表来维护组配置信息,并使用性能模式表来提供对缓存数据的视图。
每个系统和性能模式表只能由具有 SELECT 权限的帐户访问。
The 表列出了注册的防火墙组配置信息的名称和操作模式。该表具有以下列(对应的性能模式 default-database.firewall_groupsfirewall_groups 表具有类似但不一定相同的列):
-
NAME组配置信息的名称。
-
MODE当前操作模式的配置信息。允许的模式值为
OFF、DETECTING、PROTECTING和RECORDING。有关它们的含义,请参见 防火墙概念。 -
USERHOST组配置信息的训练帐户,用于在
RECORDING模式下。该值为NULL,或非NULL帐户,以格式:user_name@host_name-
如果值为
NULL,防火墙将记录来自任何组成员帐户的 allowlist 规则。 -
如果值为非
NULL,防火墙将仅记录来自命名帐户(该帐户应是组成员)的 allowlist 规则。
-
The 表列出了注册的防火墙组配置信息的 allowlist 规则。该表具有以下列(对应的性能模式 default-database.firewall_group_allowlistfirewall_group_allowlist 表具有类似但不一定相同的列):
-
NAME组配置信息的名称。
-
RULE一个 normalized 语句,表示配置信息的可接受语句模式。配置信息的 allowlist 是其规则的并集。
-
ID一个整数列,作为表的主键。
默认数据库的 表列出了注册的防火墙组配置文件的成员(账户)。该表具有以下列(与性能模式 default-database.firewall_membershipfirewall_membership 表具有相似但不一定相同的列):
-
GROUP_ID组配置文件的名称。
-
MEMBER_ID该配置文件的成员账户名称。
Firewall Account Profile Tables
MySQL Enterprise 防火墙使用防火墙数据库中的表来维护账户配置文件信息,并使用 INFORMATION_SCHEMA 表来提供内存缓存数据的视图。防火墙数据库可以是 mysql 系统数据库或自定义模式(见 安装 MySQL Enterprise 防火墙)。
每个默认数据库表只能由具有该表 SELECT 权限的账户访问。 INFORMATION_SCHEMA 表可以被任何人访问。
从 MySQL 8.0.26 开始,这些表已弃用,并将在未来 MySQL 版本中删除。见 迁移账户配置文件到组配置文件。
默认数据库的 表列出了注册的防火墙账户配置文件的名称和操作模式。该表具有以下列(与 default-database.firewall_usersMYSQL_FIREWALL_USERS 表具有相似但不一定相同的列):
-
USERHOST账户配置文件名称。每个账户名称都有格式
。user_name@host_name -
MODE配置文件的当前操作模式。允许的模式值为
OFF、DETECTING、PROTECTING、RECORDING和RESET。有关它们的含义,请见 防火墙概念。
防火墙数据库的 表列出了注册的防火墙账户配置文件的允许规则。该表具有以下列(与 firewall-database.firewall_whitelistMYSQL_FIREWALL_WHITELIST 表具有相似但不一定相同的列):
-
USERHOST账户配置文件名称。每个账户名称都有格式
。user_name@host_name -
RULE一个规范的语句,指示配置文件的可接受语句模式。配置文件的允许列表是其规则的并集。
-
ID一个整数列,作为表的主键。
MySQL Enterprise 防火墙存储过程执行任务,如注册配置文件到防火墙、设置其操作模式和管理防火墙数据在缓存和持久存储之间的传输。这些过程调用管理函数,提供了低级任务的 API。
防火墙存储过程是在防火墙数据库中创建的。防火墙数据库可以是 mysql 系统数据库或自定义模式(见 安装 MySQL Enterprise 防火墙)。
要调用防火墙存储过程,必须在指定的防火墙数据库是默认数据库时执行,或者使用数据库名称限定过程名称。例如,如果 mysql 是防火墙数据库:
CALL mysql.sp_set_firewall_group_mode(group, mode);
如果您在自定义模式中安装了 MySQL Enterprise 防火墙,请相应地替换系统。例如,如果防火墙安装在 fwdb 模式中,则执行存储过程如下:
CALL fwdb.sp_set_firewall_group_mode(group, mode);
Firewall Group Profile Stored Procedures
这些存储过程在防火墙组配置文件上执行管理操作:
-
sp_firewall_group_delist(组,用户)该存储过程从防火墙组配置文件中删除一个账户。
如果调用成功,组成员资格的更改将同时应用于内存缓存和持久存储。
参数:
-
组:受影响的组配置文件的名称。 -
用户:要删除的账户,以格式。用户名@主机名
示例:
CALL mysql.sp_firewall_group_delist('g', 'fwuser@localhost'); -
-
sp_firewall_group_enlist(组,用户)该存储过程将账户添加到防火墙组配置文件中。在添加账户到组之前,不需要注册账户本身与防火墙。
如果调用成功,组成员资格的更改将同时应用于内存缓存和持久存储。
参数:
-
组:受影响的组配置文件的名称。 -
用户:要添加的账户,以格式。用户名@主机名
示例:
CALL mysql.sp_firewall_group_enlist('g', 'fwuser@localhost'); -
-
sp_reload_firewall_group_rules(组)该存储过程提供了对防火墙操作的控制,用于单个组配置文件。该过程使用防火墙管理函数从
表中重新加载组配置文件的规则。firewall-database.firewall_group_allowlist参数:
-
组:受影响的组配置文件的名称。
示例:
CALL mysql.sp_reload_firewall_group_rules('myapp');Warning该过程清除组配置文件的内存 allowlist 规则,然后从持久存储中重新加载它们,并将配置文件模式设置为
OFF。如果配置文件模式在调用sp_reload_firewall_group_rules()之前不是OFF,则需要使用sp_set_firewall_group_mode()恢复其之前的模式。例如,如果配置文件是在PROTECTING模式下,那么在调用sp_reload_firewall_group_rules()后,它将不再是PROTECTING模式,需要明确地将其设置回PROTECTING。 -
-
sp_set_firewall_group_mode(组,模式)该存储过程为防火墙组配置文件设置操作模式,在注册配置文件与防火墙之前,如果它还没有注册。该过程还会调用防火墙管理函数,以便在缓存和持久存储之间传输防火墙数据。即使
mysql_firewall_mode系统变量为OFF,也可以调用该过程,尽管设置配置文件模式对防火墙操作没有实际效果,直到防火墙启用。如果配置文件之前已经存在,任何记录限制都将保持不变。要设置或清除限制,需要调用
sp_set_firewall_group_mode_and_user()。参数:
-
组:受影响的组配置文件的名称。 -
模式:配置文件的操作模式,以字符串形式。允许的模式值为OFF、DETECTING、PROTECTING和RECORDING。有关这些值的含义,请参阅 防火墙概念。
示例:
CALL mysql.sp_set_firewall_group_mode('myapp', 'PROTECTING'); -
-
sp_set_firewall_group_mode_and_user(组,模式,用户)该存储过程注册组与防火墙,并设置其操作模式,类似于
sp_set_firewall_group_mode(),但也指定了在记录模式下使用的训练账户。参数:
-
组:受影响的组配置文件的名称。 -
模式: 配置文件的操作模式,作为字符串。允许的模式值是OFF、DETECTING、PROTECTING和RECORDING。有关它们的含义,请参阅 防火墙概念。 -
用户: 训练组配置文件的账户,用于记录模式。该值为NULL,或非NULL账户,格式为:user_name@host_name-
如果值为
NULL,防火墙将记录来自任何组成员账户的允许列表规则。 -
如果值为非
NULL,防火墙仅记录来自命名账户(应为组成员)的允许列表规则。
-
示例:
CALL mysql.sp_set_firewall_group_mode_and_user('myapp', 'RECORDING', 'myapp_user1@localhost'); -
Firewall Account Profile Stored Procedures
这些存储过程在防火墙账户配置文件上执行管理操作:
-
sp_reload_firewall_rules(user)该存储过程提供了防火墙操作的个体账户配置文件控制。该过程使用防火墙管理函数从
表中重新加载账户配置文件的规则。firewall-database.firewall_whitelist参数:
-
user: 受影响的账户配置文件的名称,作为字符串,格式为。user_name@host_name
示例:
CALL sp_reload_firewall_rules('fwuser@localhost');Warning该过程清除账户配置文件的内存允许列表规则,然后从持久存储中重新加载规则,并将配置文件模式设置为
OFF。如果配置文件模式在调用sp_reload_firewall_rules()之前不是OFF,则需要使用sp_set_firewall_mode()恢复其之前的模式。例如,如果配置文件模式是PROTECTING,那么在调用sp_reload_firewall_rules()后,它将不再是PROTECTING模式,需要明确地将其设置回PROTECTING。从 MySQL 8.0.26 开始,该过程已弃用,并将在未来 MySQL 版本中删除。请参阅 迁移到组配置文件。
-
-
sp_set_firewall_mode(user,mode)该存储过程为防火墙账户配置文件设置操作模式,注册配置文件(如果尚未注册),并在必要时调用防火墙管理函数来传输防火墙数据 zwischen 缓存和持久存储。即使
mysql_firewall_mode系统变量为OFF,也可以调用该过程,尽管设置配置文件模式对操作没有影响,直到防火墙启用。参数:
-
user: 受影响的账户配置文件的名称,作为字符串,格式为。user_name@host_name -
mode: 配置文件的操作模式,作为字符串。允许的模式值是OFF、DETECTING、PROTECTING、RECORDING和RESET。有关它们的含义,请参阅 防火墙概念。
将账户配置文件切换到任何模式,但
RECORDING都会将防火墙缓存数据同步到防火墙数据库表中(mysql或自定义)。从OFF切换到RECORDING模式时,会从表中重新加载允许列表到缓存中。firewall-database.firewall_whitelist如果账户配置文件的允许列表为空,无法将其模式设置为
PROTECTING,因为该配置文件将拒绝每个语句,实际上禁止账户执行语句。在尝试设置模式时,防火墙将生成诊断消息,而不是 SQL 错误:mysql> CALL sp_set_firewall_mode('a@b','PROTECTING'); +----------------------------------------------------------------------+ | set_firewall_mode(arg_userhost, arg_mode) | +----------------------------------------------------------------------+ | ERROR: PROTECTING mode requested for a@b but the allowlist is empty. | +----------------------------------------------------------------------+从 MySQL 8.0.26 开始,该过程已弃用,并将在未来 MySQL 版本中删除。请参阅 迁移到组配置文件。
-
Firewall Miscellaneous Stored Procedures
这些存储过程执行防火墙管理操作。
-
sp_migrate_firewall_user_to_group(用户,组)从 MySQL 8.0.26 开始,账户配置文件已弃用,因为组配置文件可以执行账户配置文件的所有操作。
sp_migrate_firewall_user_to_group()存储过程将防火墙账户配置文件转换为组配置文件,其中账户作为唯一的入选成员。运行firewall_profile_migration.sql脚本以安装它。转换过程在 将账户配置文件迁移到组配置文件 中讨论。该例程需要
FIREWALL_ADMIN权限。参数:
-
用户:要转换为组配置文件的账户配置文件的名称,以格式。账户配置文件必须存在,并且不能当前处于user_name@host_nameRECORDING模式。 -
组:新组配置文件的名称,该组配置文件不能已经存在。新组配置文件将命名的账户作为其唯一的入选成员,并将该成员设置为组训练账户。组配置文件的操作模式来自账户配置文件的操作模式。
示例:
CALL sp_migrate_firewall_user_to_group('fwuser@localhost', 'mygroup); -
MySQL Enterprise 防火墙管理函数提供了 API,以便执行较低级别的任务,例如将防火墙缓存与基础系统表同步。
在正常操作下,这些函数由防火墙存储过程调用,而不是直接由用户调用。 因此,这些函数描述不包括详细信息,例如参数和返回类型。
Firewall Group Profile Functions
这些函数执行防火墙组配置文件管理操作:
-
该函数从组配置文件中删除账户。它需要
FIREWALL_ADMIN权限。示例:
SELECT firewall_group_delist('g', 'fwuser@localhost'); -
该函数将账户添加到组配置文件中。它需要
FIREWALL_ADMIN权限。不需要在将账户添加到组之前注册账户本身与防火墙。
示例:
SELECT firewall_group_enlist('g', 'fwuser@localhost'); -
read_firewall_group_allowlist(组,规则)该聚合函数通过在
表上的firewall-database.firewall_group_allowlistSELECT语句更新命名组配置文件的记录语句缓存。它需要FIREWALL_ADMIN权限。示例:
SELECT read_firewall_group_allowlist('my_fw_group', fgw.rule) FROM mysql.firewall_group_allowlist AS fgw WHERE NAME = 'my_fw_group'; -
read_firewall_groups(组,模式,用户)该聚合函数通过在
SELECT语句中更新防火墙组配置缓存表。它需要firewall-database.firewall_groupsFIREWALL_ADMIN权限。示例:
SELECT read_firewall_groups('g', 'RECORDING', 'fwuser@localhost') FROM mysql.firewall_groups; -
set_firewall_group_mode(group,mode[,user])该函数管理组配置缓存,建立配置操作模式,并可选地指定配置训练账户。它需要
FIREWALL_ADMIN权限。如果不提供可选的
user参数,则之前的user设置保持不变。要更改设置,请使用第三个参数调用函数。如果提供了可选的
user参数,它指定了组配置的训练账户,以便在配置处于RECORDING模式时使用。该值为NULL,或非NULL账户,格式为:user_name@host_name-
如果值为
NULL,防火墙记录允许列表规则来自任何组成员账户的语句。 -
如果值为非
NULL,防火墙记录允许列表规则仅来自命名账户(该账户应为组成员)的语句。
示例:
SELECT set_firewall_group_mode('g', 'DETECTING'); -
Firewall Account Profile Functions
这些函数执行防火墙账户配置管理操作:
-
read_firewall_users(user,mode)该聚合函数通过
SELECT语句更新防火墙账户配置缓存表。它需要firewall-database.firewall_usersFIREWALL_ADMIN权限或已弃用的SUPER权限。示例:
SELECT read_firewall_users('fwuser@localhost', 'RECORDING') FROM mysql.firewall_users;从 MySQL 8.0.26 开始,该函数已弃用,并将在未来 MySQL 版本中删除。请参阅 迁移到组配置。
-
read_firewall_whitelist(user,rule)该聚合函数通过
SELECT语句更新记录语句缓存表。它需要firewall-database.firewall_whitelistFIREWALL_ADMIN权限或已弃用的SUPER权限。示例:
SELECT read_firewall_whitelist('fwuser@localhost', fw.rule) FROM mysql.firewall_whitelist AS fw WHERE USERHOST = 'fwuser@localhost';从 MySQL 8.0.26 开始,该函数已弃用,并将在未来 MySQL 版本中删除。请参阅 迁移到组配置。
-
该函数管理账户配置缓存,建立配置操作模式。它需要
FIREWALL_ADMIN权限或已弃用的SUPER权限。示例:
SELECT set_firewall_mode('fwuser@localhost', 'RECORDING');从 MySQL 8.0.26 开始,该函数已弃用,并将在未来 MySQL 版本中删除。请参阅 迁移到组配置。
Firewall Miscellaneous Functions
这些函数执行防火墙杂项操作:
-
该函数将多个防火墙状态变量重置为 0:
该函数需要
FIREWALL_ADMIN权限或已弃用的SUPER权限。示例:
SELECT mysql_firewall_flush_status(); -
该函数将 SQL 语句规范化为用于 allowlist 规则的摘要形式。它需要
FIREWALL_ADMIN权限或已弃用的SUPER权限。示例:
SELECT normalize_statement('SELECT * FROM t1 WHERE c1 > 2');Note同样的摘要功能也可以在防火墙上下文外部使用
STATEMENT_DIGEST_TEXT()SQL 函数。
MySQL 企业防火墙支持以下系统变量。使用它们来配置防火墙操作。这些变量只有在防火墙安装时才可用(见 第 8.4.7.2 节,“安装或卸载 MySQL 企业防火墙”)。
-
Command-Line Format --mysql-firewall-database[=value]System Variable mysql_firewall_databaseScope Global Dynamic No SET_VARHint AppliesNo Type String Default Value mysql指定 MySQL 企业防火墙从中读取数据的数据库。通常,
MYSQL_FIREWALL服务器端插件将其内部数据(表、存储过程和函数)存储在mysql系统数据库中,但您可以创建和使用自定义模式(见 安装 MySQL 企业防火墙)。该变量允许在启动时指定备用数据库名称。 -
Command-Line Format --mysql-firewall-mode[={OFF|ON}]System Variable mysql_firewall_modeScope Global Dynamic Yes SET_VARHint AppliesNo Type Boolean Default Value ON是否启用 MySQL 企业防火墙(默认)或禁用。
-
mysql_firewall_reload_interval_secondsCommand-Line Format --mysql-firewall-reload-interval-seconds[=value]System Variable mysql_firewall_reload_interval_secondsScope Global Dynamic No SET_VARHint AppliesNo Type Integer Default Value 0Minimum Value 60 (unless 0: OFF)Maximum Value INT_MAXUnit 秒 指定服务器端插件从防火墙表中重新加载其内部缓存的间隔(以秒为单位)。当
mysql_firewall_reload_interval_seconds的值为零(默认)时,不会在运行时从表中重新加载数据。值介于0和60之间(1 到 59)将被调整为60。该变量需要启用
scheduler组件(ON)。有关更多信息,请参阅 计划防火墙缓存重新加载。 -
Command-Line Format --mysql-firewall-trace[={OFF|ON}]System Variable mysql_firewall_traceScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value OFF是否启用 MySQL Enterprise 防火墙跟踪(默认情况下禁用)。当
mysql_firewall_trace启用时,对于PROTECTING模式,防火墙将 rejected 语句写入错误日志。
MySQL Enterprise 防火墙支持以下状态变量。使用它们来获取防火墙操作状态的信息。这些变量在防火墙未安装时不可用(请参阅 第 8.4.7.2 节,“安装或卸载 MySQL Enterprise 防火墙”)。防火墙状态变量在 MYSQL_FIREWALL 插件安装或服务器启动时设置为 0。许多变量在 mysql_firewall_flush_status() 函数中被重置为零(请参阅 MySQL Enterprise 防火墙管理函数)。