以下部分提供了 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_name
RECORDING
模式。 -
组
:新组配置文件的名称,该组配置文件不能已经存在。新组配置文件将命名的账户作为其唯一的入选成员,并将该成员设置为组训练账户。组配置文件的操作模式来自账户配置文件的操作模式。
示例:
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_database
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type String Default Value mysql
指定 MySQL 企业防火墙从中读取数据的数据库。通常,
MYSQL_FIREWALL
服务器端插件将其内部数据(表、存储过程和函数)存储在mysql
系统数据库中,但您可以创建和使用自定义模式(见 安装 MySQL 企业防火墙)。该变量允许在启动时指定备用数据库名称。 -
Command-Line Format --mysql-firewall-mode[={OFF|ON}]
System Variable mysql_firewall_mode
Scope Global Dynamic Yes SET_VAR
Hint AppliesNo Type Boolean Default Value ON
是否启用 MySQL 企业防火墙(默认)或禁用。
-
mysql_firewall_reload_interval_seconds
Command-Line Format --mysql-firewall-reload-interval-seconds[=value]
System Variable mysql_firewall_reload_interval_seconds
Scope Global Dynamic No SET_VAR
Hint AppliesNo Type Integer Default Value 0
Minimum Value 60 (unless 0: OFF)
Maximum Value INT_MAX
Unit 秒 指定服务器端插件从防火墙表中重新加载其内部缓存的间隔(以秒为单位)。当
mysql_firewall_reload_interval_seconds
的值为零(默认)时,不会在运行时从表中重新加载数据。值介于0
和60
之间(1 到 59)将被调整为60
。该变量需要启用
scheduler
组件(ON
)。有关更多信息,请参阅 计划防火墙缓存重新加载。 -
Command-Line Format --mysql-firewall-trace[={OFF|ON}]
System Variable mysql_firewall_trace
Scope 全局 Dynamic 是 SET_VAR
Hint 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 防火墙管理函数)。