以下部分提供了 MySQL 企业防火墙元素的参考
MySQL 企业防火墙在每个组和每个帐户的基础上维护配置文件信息。它使用防火墙数据库中的表进行持久存储,并使用 INFORMATION_SCHEMA
或性能模式表提供内存缓存数据的视图。启用后,防火墙根据缓存数据做出操作决策。防火墙数据库可以是 mysql
系统数据库或自定义模式(请参阅 安装 MySQL 企业防火墙)。
防火墙组配置文件表
MySQL 企业防火墙使用防火墙数据库(mysql
或自定义)中的表维护组配置文件信息以进行持久存储,并使用性能模式表提供内存缓存数据的视图。
每个系统和性能模式表只能由对其具有 SELECT
权限的帐户访问。
表列出了已注册防火墙组配置文件的名称和操作模式。该表包含以下列(相应的性能模式 default-database
.firewall_groupsfirewall_groups
表具有相似但不一定完全相同的列):
NAME
组配置文件名称。
MODE
配置文件的当前操作模式。允许的模式值为
OFF
、DETECTING
、PROTECTING
和RECORDING
。有关其含义的详细信息,请参阅 防火墙概念。USERHOST
组配置文件的训练帐户,在配置文件处于
RECORDING
模式时使用。该值为NULL
或格式为
的非user_name
@host_name
NULL
帐户。如果该值为
NULL
,则防火墙会为从该组的任何成员帐户接收到的语句记录允许列表规则。如果该值不为
NULL
,则防火墙仅为从指定帐户(应为该组的成员)接收到的语句记录允许列表规则。
表列出了已注册防火墙组配置文件的允许列表规则。该表包含以下列(相应的性能模式 default-database
.firewall_group_allowlistfirewall_group_allowlist
表具有相似但不一定完全相同的列):
NAME
组配置文件名称。
RULE
一个规范化的语句,指示配置文件可接受的语句模式。配置文件允许列表是其规则的并集。
ID
一个整数列,它是该表的主键。
表列出了已注册防火墙组配置文件的成员(帐户)。该表包含以下列(相应的性能模式 default-database
.firewall_membershipfirewall_membership
表具有相似但不一定完全相同的列):
GROUP_ID
组配置文件名称。
MEMBER_ID
作为配置文件成员的帐户的名称。
防火墙帐户配置文件表
MySQL 企业防火墙使用防火墙数据库中的表来维护帐户配置文件信息,以便进行持久存储,并使用 INFORMATION_SCHEMA
表提供对内存中缓存数据的视图。防火墙数据库可以是 mysql
系统数据库或自定义架构(请参阅安装 MySQL 企业防火墙)。
默认情况下,每个数据库表只能由对其具有 SELECT
权限的帐户访问。INFORMATION_SCHEMA
表可由任何人访问。
这些表已被弃用,并将在未来的 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 企业防火墙存储程序执行诸如在防火墙中注册配置文件、建立其操作模式以及管理缓存和持久存储之间防火墙数据的传输等任务。这些程序调用提供低级任务 API 的管理函数。
防火墙存储程序在防火墙数据库中创建。防火墙数据库可以是 mysql
系统数据库或自定义架构(请参阅安装 MySQL 企业防火墙)。
要调用防火墙存储程序,请在指定的防火墙数据库为默认数据库时执行此操作,或者使用数据库名称限定程序名称。例如,如果 mysql
是防火墙数据库:
CALL mysql.sp_set_firewall_group_mode(group, mode);
在 MySQL 8.4 中,防火墙存储程序是事务性的;如果在执行防火墙存储程序期间发生错误,则将回滚该程序到那时为止所做的所有更改,并报告错误。
如果已在自定义架构中安装了 MySQL 企业防火墙,请对您的系统进行适当的替换。例如,如果防火墙安装在 fwdb
架构中,则像这样执行存储程序:
CALL fwdb.sp_set_firewall_group_mode(group, mode);
防火墙组配置文件存储程序
这些存储程序对防火墙组配置文件执行管理操作:
sp_firewall_group_delist(
group
,user
)此存储程序从防火墙组配置文件中删除一个帐户。
如果调用成功,则会将组成员身份的更改应用于内存缓存和持久存储。
参数
group
:受影响的组配置文件的名称。user
:要删除的帐户,格式为
的字符串。user_name
@host_name
示例
CALL mysql.sp_firewall_group_delist('g', 'fwuser@localhost');
sp_firewall_group_enlist(
group
,user
)此存储程序将一个帐户添加到防火墙组配置文件中。在将帐户添加到组之前,无需在防火墙中注册该帐户本身。
如果调用成功,则会将组成员身份的更改应用于内存缓存和持久存储。
参数
group
:受影响的组配置文件的名称。user
:要添加的帐户,格式为
的字符串。user_name
@host_name
示例
CALL mysql.sp_firewall_group_enlist('g', 'fwuser@localhost');
sp_reload_firewall_group_rules(
group
)此存储程序为各个组配置文件提供对防火墙操作的控制。该程序使用防火墙管理函数从存储在
表中的规则重新加载组配置文件的内存规则。firewall-database
.firewall_group_allowlist参数
group
:受影响的组配置文件的名称。
示例
CALL mysql.sp_reload_firewall_group_rules('myapp');
警告此程序在从持久存储重新加载组配置文件内存白名单规则之前,会清除这些规则,并将配置文件模式设置为
OFF
。如果在调用sp_reload_firewall_group_rules()
之前配置文件模式不是OFF
,请在重新加载规则后使用sp_set_firewall_group_mode()
恢复其先前的模式。例如,如果配置文件处于PROTECTING
模式,则在调用sp_reload_firewall_group_rules()
后,该模式将不再有效,您必须再次将其显式设置为PROTECTING
。sp_set_firewall_group_mode(
group
,mode
)此存储程序为防火墙组配置文件建立操作模式,如果该配置文件尚未注册,则先在防火墙中注册该配置文件。该程序还会根据需要调用防火墙管理函数,以便在缓存和持久存储之间传输防火墙数据。即使
mysql_firewall_mode
系统变量为OFF
,也可以调用此程序,但在启用防火墙之前,设置配置文件的模式不会产生任何操作效果。如果配置文件先前已存在,则其任何记录限制都保持不变。要设置或清除限制,请改用
sp_set_firewall_group_mode_and_user()
。参数
group
:受影响的组配置文件的名称。mode
:配置文件的操作模式,以字符串形式表示。允许的模式值为OFF
、DETECTING
、PROTECTING
和RECORDING
。有关其含义的详细信息,请参阅防火墙概念。
示例
CALL mysql.sp_set_firewall_group_mode('myapp', 'PROTECTING');
sp_set_firewall_group_mode_and_user(
group
,mode
,user
)此存储程序在防火墙中注册一个组并建立其操作模式,类似于
sp_set_firewall_group_mode()
,但还会指定当组处于RECORDING
模式时要使用的训练帐户。参数
group
:受影响的组配置文件的名称。mode
:配置文件的操作模式,以字符串形式表示。允许的模式值为OFF
、DETECTING
、PROTECTING
和RECORDING
。有关其含义的详细信息,请参阅防火墙概念。user
:组配置文件的训练帐户,将在配置文件处于RECORDING
模式时使用。该值为NULL
或格式为
的非user_name
@host_name
NULL
帐户。如果该值为
NULL
,则防火墙会为从该组的任何成员帐户接收到的语句记录允许列表规则。如果该值不为
NULL
,则防火墙仅为从指定帐户(应为该组的成员)接收到的语句记录允许列表规则。
示例
CALL mysql.sp_set_firewall_group_mode_and_user('myapp', 'RECORDING', 'myapp_user1@localhost');
防火墙帐户配置文件存储程序
这些存储程序对防火墙帐户配置文件执行管理操作:
sp_reload_firewall_rules(
user
)此存储程序为各个帐户配置文件提供对防火墙操作的控制。该程序使用防火墙管理函数从存储在
表中的规则重新加载帐户配置文件的内存规则。firewall-database
.firewall_whitelist参数
user
:受影响的帐户配置文件的名称,格式为
的字符串。user_name
@host_name
示例
CALL sp_reload_firewall_rules('fwuser@localhost');
警告此程序在从持久存储重新加载帐户配置文件内存白名单规则之前,会清除这些规则,并将配置文件模式设置为
OFF
。如果在调用sp_reload_firewall_rules()
之前配置文件模式不是OFF
,请在重新加载规则后使用sp_set_firewall_mode()
恢复其先前的模式。例如,如果配置文件处于PROTECTING
模式,则在调用sp_reload_firewall_rules()
后,该模式将不再有效,您必须再次将其显式设置为PROTECTING
。此程序已被弃用,并将在未来的 MySQL 版本中被删除。请参阅将帐户配置文件迁移到组配置文件。
sp_set_firewall_mode(
user
,mode
)此存储程序为防火墙帐户配置文件建立操作模式,如果该配置文件尚未注册,则先在防火墙中注册该配置文件。该程序还会根据需要调用防火墙管理函数,以便在缓存和持久存储之间传输防火墙数据。即使
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 版本中被删除。请参阅将帐户配置文件迁移到组配置文件。
防火墙杂项存储程序
这些存储程序执行各种防火墙管理操作。
sp_migrate_firewall_user_to_group(
user
,group
)sp_migrate_firewall_user_to_group()
存储程序将防火墙帐户配置文件转换为组配置文件,并将该帐户作为其唯一注册成员。运行firewall_profile_migration.sql
脚本来安装它。转换过程在将帐户配置文件迁移到组配置文件中讨论。此例程需要
FIREWALL_ADMIN
权限。参数
user
:要转换为组配置文件的帐户配置文件的名称,格式为
的字符串。该帐户配置文件必须存在,并且当前不得处于user_name
@host_name
RECORDING
模式。group
:新组配置文件的名称,该名称必须尚不存在。新组配置文件将指定的帐户作为其唯一注册成员,并且该成员被设置为组训练帐户。组配置文件操作模式取自帐户配置文件操作模式。
示例
CALL sp_migrate_firewall_user_to_group('fwuser@localhost', 'mygroup);
MySQL 企业防火墙管理函数提供了一个 API,用于执行诸如将防火墙缓存与底层系统表同步等低级任务。
在正常操作下,这些函数由防火墙存储程序调用,而不是由用户直接调用。因此,这些函数说明不包括其参数和返回类型等详细信息。
防火墙组配置文件函数
这些函数对防火墙组配置文件执行管理操作。
firewall_group_delist(
group
,user
)此函数从组配置文件中删除一个帐户。它需要
FIREWALL_ADMIN
权限。示例
SELECT firewall_group_delist('g', 'fwuser@localhost');
firewall_group_enlist(
group
,user
)此函数将一个帐户添加到组配置文件中。它需要
FIREWALL_ADMIN
权限。在将帐户添加到组之前,无需在防火墙中注册该帐户本身。
示例
SELECT firewall_group_enlist('g', 'fwuser@localhost');
read_firewall_group_allowlist(
group
,rule
)此聚合函数通过在
表上执行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(
group
,mode
,user
)此聚合函数通过在
表上执行firewall-database
.firewall_groupsSELECT
语句来更新防火墙组配置文件缓存。它需要FIREWALL_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
,或者是一个格式为
的非user_name
@host_name
NULL
帐户。如果该值为
NULL
,则防火墙会为从该组的任何成员帐户接收到的语句记录允许列表规则。如果该值不为
NULL
,则防火墙仅为从指定帐户(应为该组的成员)接收到的语句记录允许列表规则。
示例
SELECT set_firewall_group_mode('g', 'DETECTING');
防火墙帐户配置文件函数
这些函数对防火墙帐户配置文件执行管理操作。
read_firewall_users(
user
,mode
)此聚合函数通过在
表上执行firewall-database
.firewall_usersSELECT
语句来更新防火墙帐户配置文件缓存。它需要FIREWALL_ADMIN
权限或已弃用的SUPER
权限。示例
SELECT read_firewall_users('fwuser@localhost', 'RECORDING') FROM mysql.firewall_users;
此函数已弃用,并将在未来的 MySQL 版本中删除。请参阅 将帐户配置文件迁移到组配置文件。
read_firewall_whitelist(
user
,rule
)此聚合函数通过在
表上执行firewall-database
.firewall_whitelistSELECT
语句来更新命名帐户配置文件的已记录语句缓存。它需要FIREWALL_ADMIN
权限或已弃用的SUPER
权限。示例
SELECT read_firewall_whitelist('fwuser@localhost', fw.rule) FROM mysql.firewall_whitelist AS fw WHERE USERHOST = 'fwuser@localhost';
此函数已弃用,并将在未来的 MySQL 版本中删除。请参阅 将帐户配置文件迁移到组配置文件。
此函数管理帐户配置文件缓存并建立配置文件操作模式。它需要
FIREWALL_ADMIN
权限或已弃用的SUPER
权限。示例
SELECT set_firewall_mode('fwuser@localhost', 'RECORDING');
此函数已弃用,并将在未来的 MySQL 版本中删除。请参阅 将帐户配置文件迁移到组配置文件。
防火墙杂项函数
这些函数执行各种防火墙操作。
此函数将多个防火墙状态变量重置为 0。
此函数需要
FIREWALL_ADMIN
权限或已弃用的SUPER
权限。示例
SELECT mysql_firewall_flush_status();
此函数将 SQL 语句规范化为用于白名单规则的摘要形式。它需要
FIREWALL_ADMIN
权限或已弃用的SUPER
权限。示例
SELECT normalize_statement('SELECT * FROM t1 WHERE c1 > 2');
注意可以使用
STATEMENT_DIGEST_TEXT()
SQL 函数在防火墙上下文之外使用相同的摘要功能。
MySQL 企业版防火墙支持以下系统变量。使用它们来配置防火墙操作。除非安装了防火墙(请参阅 第 8.4.7.2 节“安装或卸载 MySQL 企业版防火墙”),否则这些变量不可用。
-
命令行格式 --mysql-firewall-database[=value]
系统变量 mysql_firewall_database
作用域 全局 动态 否 SET_VAR
提示适用否 类型 字符串 默认值 mysql
指定 MySQL 企业版防火墙从中读取数据的数据库。通常,
MYSQL_FIREWALL
服务器端插件将其内部数据(表、存储过程和函数)存储在mysql
系统数据库中,但您可以创建和使用自定义架构来代替(请参阅 安装 MySQL 企业版防火墙)。此变量允许在启动时指定备用数据库名称。 -
命令行格式 --mysql-firewall-mode[={OFF|ON}]
系统变量 mysql_firewall_mode
作用域 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 ON
MySQL 企业版防火墙是启用(默认)还是禁用。
mysql_firewall_reload_interval_seconds
命令行格式 --mysql-firewall-reload-interval-seconds[=value]
系统变量 mysql_firewall_reload_interval_seconds
作用域 全局 动态 否 SET_VAR
提示适用否 类型 整数 默认值 0
最小值 60(除非为 0:OFF)
最大值 INT_MAX
单位 秒 指定服务器端插件用于从防火墙表重新加载其内部缓存的时间间隔(以秒为单位)。当
mysql_firewall_reload_interval_seconds
的值为零(默认值)时,在运行时不会定期从表中重新加载数据。插件不识别介于0
和60
(1 到 59)之间的值。相反,这些值会自动调整为60
。此变量要求启用
scheduler
组件(ON
)。有关更多信息,请参阅 安排防火墙缓存重新加载。-
命令行格式 --mysql-firewall-trace[={OFF|ON}]
系统变量 mysql_firewall_trace
作用域 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
MySQL 企业版防火墙跟踪是启用还是禁用(默认)。当启用
mysql_firewall_trace
时,对于PROTECTING
模式,防火墙会将被拒绝的语句写入错误日志。
MySQL 企业版防火墙支持以下状态变量。使用它们可以获取有关防火墙运行状态的信息。除非安装了防火墙(请参阅 第 8.4.7.2 节“安装或卸载 MySQL 企业版防火墙”),否则这些变量不可用。每当安装 MYSQL_FIREWALL
插件或启动服务器时,防火墙状态变量都将设置为 0。其中许多变量将由 mysql_firewall_flush_status()
函数重置为零(请参阅 MySQL 企业版防火墙管理函数)。