以下部分提供了对 MySQL Enterprise 防火墙元素的参考
MySQL Enterprise 防火墙维护每个组和每个帐户的配置文件信息。它使用防火墙数据库中的表进行持久存储,并使用 INFORMATION_SCHEMA
或 Performance Schema 表来提供对内存缓存数据的视图。启用后,防火墙会根据缓存数据做出操作决策。防火墙数据库可以是 mysql
系统数据库或自定义架构(参见 安装 MySQL Enterprise 防火墙)。
防火墙组配置文件表
MySQL Enterprise 防火墙使用防火墙数据库 (mysql
或自定义) 中的表维护组配置文件信息,以进行持久存储,并使用 Performance Schema 表来提供对内存缓存数据的视图。
每个系统和 Performance Schema 表都只能被拥有其 SELECT
权限的帐户访问。
表
列出了已注册的防火墙组配置文件的名称和操作模式。该表包含以下列(与相应的 Performance Schema default-database
.firewall_groupsfirewall_groups
表具有类似但并不一定相同的列)
名称
组配置文件名称。
模式
配置文件的当前操作模式。允许的模式值为
OFF
、DETECTING
、PROTECTING
和RECORDING
。有关其含义的详细信息,请参见 防火墙概念。USERHOST
组配置文件的训练帐户,在配置文件处于
RECORDING
模式时使用。该值为NULL
或非NULL
帐户,格式为user_name
@host_name
如果该值为
NULL
,则防火墙会记录来自该组中任何帐户的语句的白名单规则。如果该值为非
NULL
,则防火墙仅记录来自命名帐户(应为该组的成员)的语句的白名单规则。
表
列出了已注册的防火墙组配置文件的白名单规则。该表包含以下列(与相应的 Performance Schema default-database
.firewall_group_allowlistfirewall_group_allowlist
表具有类似但并不一定相同的列)
名称
组配置文件名称。
规则
一个规范化的语句,表示配置文件可接受的语句模式。配置文件白名单是其规则的并集。
ID
一个整数列,是该表的主键。
表
列出了已注册的防火墙组配置文件的成员(帐户)。该表包含以下列(与相应的 Performance Schema default-database
.firewall_membershipfirewall_membership
表具有类似但并不一定相同的列)
GROUP_ID
组配置文件名称。
MEMBER_ID
该配置文件中一个成员的名称。
防火墙帐户配置文件表
MySQL 企业版防火墙使用防火墙数据库中的表来维护帐户配置文件信息以进行持久存储,并使用 INFORMATION_SCHEMA
表来提供对内存中缓存数据的视图。防火墙数据库可以是 mysql
系统数据库或自定义模式(参见 安装 MySQL 企业版防火墙)。
每个默认数据库表只能被拥有其 SELECT
权限的帐户访问。任何人都可以访问 INFORMATION_SCHEMA
表。
这些表已弃用,并可能在将来的 MySQL 版本中删除。参见 将帐户配置文件迁移到组配置文件。
The
表列出了已注册防火墙帐户配置文件的名称和操作模式。该表具有以下列(对应于 default-database
.firewall_usersMYSQL_FIREWALL_USERS
表具有类似但并非完全相同的列):
USERHOST
帐户配置文件名称。每个帐户名称的格式为
。user_name
@host_name
模式
配置文件的当前操作模式。允许的模式值有
OFF
、DETECTING
、PROTECTING
、RECORDING
和RESET
。有关其含义的详细信息,参见 防火墙概念。
The
表列出了已注册防火墙帐户配置文件的白名单规则。该表具有以下列(对应于 firewall-database
.firewall_whitelistMYSQL_FIREWALL_WHITELIST
表具有类似但并非完全相同的列):
USERHOST
帐户配置文件名称。每个帐户名称的格式为
。user_name
@host_name
规则
一个规范化的语句,表示配置文件可接受的语句模式。配置文件白名单是其规则的并集。
ID
一个整数列,是该表的主键。
MySQL 企业版防火墙存储过程执行诸如向防火墙注册配置文件、建立其操作模式以及管理防火墙数据在缓存和持久存储之间传输之类的任务。这些过程调用提供低级任务 API 的管理功能。
防火墙存储过程是在防火墙数据库中创建的。防火墙数据库可以是 mysql
系统数据库或自定义模式(参见 安装 MySQL 企业版防火墙)。
要调用防火墙存储过程,可以在指定防火墙数据库是默认数据库时调用,或用数据库名称限定过程名称。例如,如果 mysql
是防火墙数据库
CALL mysql.sp_set_firewall_group_mode(group, mode);
在 MySQL 9.0 中,防火墙存储过程是事务性的;如果在执行防火墙存储过程期间发生错误,则它到目前为止所做的所有更改都会回滚,并报告错误。
如果您已在自定义模式中安装了 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
)The
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 Enterprise 防火墙支持以下系统变量。使用它们来配置防火墙操作。除非安装了防火墙,否则这些变量不可用(请参阅 第 8.4.7.2 节,“安装或卸载 MySQL Enterprise 防火墙”)。
-
命令行格式 --mysql-firewall-database[=value]
系统变量 mysql_firewall_database
范围 全局 动态 否 SET_VAR
提示适用否 类型 字符串 默认值 mysql
指定 MySQL Enterprise 防火墙从其读取数据的数据库。通常,
MYSQL_FIREWALL
服务器端插件将它的内部数据(表、存储过程和函数)存储在mysql
系统数据库中,但您可以创建和使用自定义架构(请参阅 安装 MySQL Enterprise 防火墙)。此变量允许在启动时指定备用数据库名称。 -
命令行格式 --mysql-firewall-mode[={OFF|ON}]
系统变量 mysql_firewall_mode
范围 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 ON
MySQL Enterprise 防火墙是启用(默认)还是禁用。
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 Enterprise 防火墙跟踪是启用还是禁用(默认)。当
mysql_firewall_trace
启用时,对于PROTECTING
模式,防火墙会将拒绝的语句写入错误日志。
MySQL Enterprise 防火墙支持以下状态变量。使用它们来获取有关防火墙操作状态的信息。除非安装了防火墙,否则这些变量不可用(请参阅 第 8.4.7.2 节,“安装或卸载 MySQL Enterprise 防火墙”)。每当安装 MYSQL_FIREWALL
插件或服务器启动时,防火墙状态变量都会设置为 0。其中许多变量会被 mysql_firewall_flush_status()
函数重置为零(请参阅 MySQL Enterprise 防火墙管理函数)。