以下部分提供了对 MySQL Enterprise Firewall 元素的参考:
MySQL Enterprise Firewall 在每个组和每个帐户的基础上维护配置文件信息。它使用
mysql
系统数据库中的表进行持久存储和INFORMATION_SCHEMA
/或性能模式表来提供对内存中缓存数据的视图。启用后,防火墙会根据缓存数据做出操作决策。
防火墙组配置文件表
从 MySQL 8.0.23 开始,MySQL Enterprise Firewall 使用mysql
系统数据库中的表进行持久存储和性能架构表来维护组配置文件信息,以提供对内存缓存数据的视图。
每个系统和 Performance Schema 表只能由具有SELECT
权限的帐户访问。
该mysql.firewall_groups
表列出了已注册防火墙组配置文件的名称和操作模式。该表具有以下列(相应的性能模式
firewall_groups
表具有相似但不一定相同的列):
NAME
组配置文件名称。
MODE
配置文件的当前操作模式。允许的模式值为
OFF
、DETECTING
、PROTECTING
和RECORDING
。有关它们的详细信息,请参阅防火墙概念。USERHOST
组配置文件的培训帐户,在配置文件处于
RECORDING
模式时使用。值为NULL
,或具有以下格式的非NULL
帐户 :user_name
@host_name
如果值为
NULL
,则防火墙会记录从作为组成员的任何帐户收到的语句的白名单规则。如果值为 non-
NULL
,则防火墙仅记录从指定帐户(应该是组的成员)收到的语句的白名单规则。
该mysql.firewall_group_allowlist
表列出了已注册防火墙组配置文件的白名单规则。该表具有以下列(相应的性能模式
firewall_group_allowlist
表具有相似但不一定相同的列):
NAME
组配置文件名称。
RULE
规范化语句,指示配置文件可接受的语句模式。配置文件白名单是其规则的集合。
ID
作为表主键的整数列。
该mysql.firewall_membership
表列出了已注册防火墙组配置文件的成员(帐户)。该表具有以下列(相应的性能模式
firewall_membership
表具有相似但不一定相同的列):
GROUP_ID
组配置文件名称。
MEMBER_ID
作为配置文件成员的帐户的名称。
防火墙帐户配置文件表
MySQL Enterprise Firewall 使用系统数据库中的表来维护帐户配置文件信息以mysql
进行持久存储,并使用INFORMATION_SCHEMA
表来提供内存中缓存数据的视图。
每个mysql
系统数据库表只能由对其具有
SELECT
权限的帐户访问。任何人都可以访问这些
INFORMATION_SCHEMA
表。
从 MySQL 8.0.26 开始,这些表已弃用,并可能在未来的 MySQL 版本中删除。请参阅 将帐户配置文件迁移到组配置文件。
该mysql.firewall_users
表列出了已注册防火墙帐户配置文件的名称和操作模式。该表具有以下列(相应的
INFORMATION_SCHEMA.MYSQL_FIREWALL_USERS
表具有相似但不一定相同的列):
USERHOST
帐户配置文件名称。每个帐户名的格式都是 .
user_name
@host_name
MODE
配置文件的当前操作模式。允许的模式值为
OFF
、DETECTING
、PROTECTING
、RECORDING
和RESET
。有关它们的详细信息,请参阅防火墙概念。
该mysql.firewall_whitelist
表列出了已注册防火墙帐户配置文件的白名单规则。该表具有以下列(相应的
INFORMATION_SCHEMA.MYSQL_FIREWALL_WHITELIST
表具有相似但不一定相同的列):
USERHOST
帐户配置文件名称。每个帐户名的格式都是 .
user_name
@host_name
RULE
规范化语句,指示配置文件可接受的语句模式。配置文件白名单是其规则的集合。
ID
作为表主键的整数列。此列是在 MySQL 8.0.12 中添加的。
MySQL Enterprise Firewall 存储过程执行诸如向防火墙注册配置文件、建立其操作模式以及管理缓存和持久存储之间的防火墙数据传输等任务。这些过程调用为低级任务提供 API 的管理功能。
防火墙存储过程是在
mysql
系统数据库中创建的。要调用防火墙存储过程,请mysql
在默认数据库时执行此操作,或者使用数据库名称限定过程名称。例如:
CALL mysql.sp_set_firewall_group_mode(group, mode);
防火墙组配置文件存储过程
这些存储过程对防火墙组配置文件执行管理操作:
sp_firewall_group_delist(
group
,user
)此存储过程从防火墙组配置文件中删除一个帐户。
如果调用成功,组成员身份的更改将同时应用于内存缓存和持久存储。
参数:
group
:受影响的组配置文件的名称。user
:要删除的帐户, 格式为字符串。user_name
@host_name
例子:
CALL sp_firewall_group_delist('g', 'fwuser@localhost');
这个过程是在 MySQL 8.0.23 中添加的。
sp_firewall_group_enlist(
group
,user
)此存储过程将帐户添加到防火墙组配置文件。在将帐户添加到组之前,无需向防火墙注册帐户本身。
如果调用成功,组成员身份的更改将同时应用于内存缓存和持久存储。
参数:
group
:受影响的组配置文件的名称。user
:要添加的帐户, 格式为字符串。user_name
@host_name
例子:
CALL sp_firewall_group_enlist('g', 'fwuser@localhost');
这个过程是在 MySQL 8.0.23 中添加的。
sp_reload_firewall_group_rules(
group
)此存储过程为各个组配置文件提供对防火墙操作的控制。
mysql.firewall_group_allowlist
该过程使用防火墙管理功能从存储在表 中的规则中重新加载组配置文件的内存中规则。参数:
group
:受影响的组配置文件的名称。
例子:
CALL sp_reload_firewall_group_rules('myapp');
警告此过程在从持久存储中重新加载组配置文件内存允许列表规则之前清除它们,并将配置文件模式设置为
OFF
。如果配置文件模式不是 调用OFF
之前的 模式,请在重新加载规则后使用它来恢复其先前的模式。例如,如果配置文件处于 模式,则在调用后不再为真 ,您必须再次明确地将其设置为。sp_reload_firewall_group_rules()
sp_set_firewall_group_mode()
PROTECTING
sp_reload_firewall_group_rules()
PROTECTING
这个过程是在 MySQL 8.0.23 中添加的。
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 sp_set_firewall_group_mode('myapp', 'PROTECTING');
这个过程是在 MySQL 8.0.23 中添加的。
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
,或具有以下格式的非NULL
帐户 :user_name
@host_name
如果值为
NULL
,则防火墙会记录从作为组成员的任何帐户收到的语句的白名单规则。如果值为 non-
NULL
,则防火墙仅记录从指定帐户(应该是组的成员)收到的语句的白名单规则。
例子:
CALL sp_set_firewall_group_mode_and_user('myapp', 'RECORDING', 'myapp_user1@localhost');
这个过程是在 MySQL 8.0.23 中添加的。
防火墙帐户配置文件存储过程
这些存储过程对防火墙帐户配置文件执行管理操作:
sp_reload_firewall_rules(
user
)此存储过程为个人帐户配置文件提供对防火墙操作的控制。该过程使用防火墙管理功能从表中存储的规则中重新加载帐户配置文件的内存规则
mysql.firewall_whitelist
。参数:
user
:受影响的帐户配置文件的名称, 格式为字符串。user_name
@host_name
例子:
CALL mysql.sp_reload_firewall_rules('fwuser@localhost');
警告此过程在从持久存储中重新加载之前清除帐户配置文件内存中的允许列表规则,并将配置文件模式设置为
OFF
。如果配置文件模式不是 调用OFF
之前的 模式,请在重新加载规则后使用它来恢复其先前的模式。例如,如果配置文件处于模式,则在调用后不再为真 ,您必须再次明确地将其设置为。sp_reload_firewall_rules()
sp_set_firewall_mode()
PROTECTING
sp_reload_firewall_rules()
PROTECTING
从 MySQL 8.0.26 开始,此过程已弃用,并可能在未来的 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
加载mysql.firewall_whitelist
到缓存中。如果帐户配置文件的白名单为空,则无法将其模式设置为,
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 allowlist is empty. | +----------------------------------------------------------------------+
从 MySQL 8.0.26 开始,此过程已弃用,并可能在未来的 MySQL 版本中删除。请参阅 将帐户配置文件迁移到组配置文件。
防火墙杂项存储过程
这些存储过程执行各种防火墙管理操作。
sp_migrate_firewall_user_to_group(
user
,group
)从 MySQL 8.0.26 开始,帐户配置文件已被弃用,因为组配置文件可以执行帐户配置文件可以执行的任何操作。存储过程将
sp_migrate_firewall_user_to_group()
防火墙帐户配置文件转换为组配置文件,并将该帐户作为其单个登记成员。转换过程在将 帐户配置文件迁移到组配置文件中进行了讨论。此例程需要
FIREWALL_ADMIN
特权。参数:
user
:要转换为组配置文件的帐户配置文件的名称, 格式为字符串。帐户配置文件必须存在,并且当前不得处于模式中。user_name
@host_name
RECORDING
group
:新组配置文件的名称,该名称不得已存在。新的组配置文件将指定帐户作为其单一登记成员,并且该成员被设置为组培训帐户。组配置文件操作模式取自帐户配置文件操作模式。
例子:
CALL sp_migrate_firewall_user_to_group('fwuser@localhost', 'mygroup);
这个过程是在 MySQL 8.0.26 中添加的。
MySQL Enterprise Firewall 管理功能为较低级别的任务提供 API,例如将防火墙缓存与底层系统表同步。
在正常操作下,这些函数由防火墙存储过程调用,而不是由用户直接调用。因此,这些函数描述不包括有关其参数和返回类型的信息等详细信息。
防火墙组配置文件功能
这些功能对防火墙组配置文件执行管理操作:
firewall_group_delist(
group
,user
)此函数从组配置文件中删除一个帐户。它需要
FIREWALL_ADMIN
特权。例子:
SELECT firewall_group_delist('g', 'fwuser@localhost');
MySQL 8.0.23 新增此功能。
firewall_group_enlist(
group
,user
)此函数将帐户添加到组配置文件。它需要
FIREWALL_ADMIN
特权。在将帐户添加到组之前,无需向防火墙注册帐户本身。
例子:
SELECT firewall_group_enlist('g', 'fwuser@localhost');
MySQL 8.0.23 新增此功能。
read_firewall_group_allowlist(
group
,rule
)此聚合函数通过
SELECT
表上的 语句更新指定组配置文件的记录语句缓存mysql.firewall_group_allowlist
。它需要FIREWALL_ADMIN
特权。例子:
SELECT read_firewall_group_allowlist('my_fw_group', fgw.rule) FROM mysql.firewall_group_allowlist AS fgw WHERE NAME = 'my_fw_group';
MySQL 8.0.23 新增此功能。
read_firewall_groups(
group
,mode
,user
)此聚合函数通过
SELECT
表上的语句更新防火墙组配置文件缓存mysql.firewall_groups
。它需要FIREWALL_ADMIN
特权。例子:
SELECT read_firewall_groups('g', 'RECORDING', 'fwuser@localhost') FROM mysql.firewall_groups;
MySQL 8.0.23 新增此功能。
set_firewall_group_mode(
group
,mode
[,user
])此功能管理组配置文件缓存,建立配置文件操作模式,并可选择指定配置文件培训帐户。它需要
FIREWALL_ADMIN
特权。user
如果未给出 可选参数user
,则配置文件的任何先前设置都保持不变。要更改设置,请使用第三个参数调用该函数。如果给出可选
user
参数,它指定组配置文件的培训帐户,在配置文件处于RECORDING
模式时使用。值为NULL
,或具有以下格式的非NULL
帐户 :user_name
@host_name
如果值为
NULL
,则防火墙会记录从作为组成员的任何帐户收到的语句的白名单规则。如果值为 non-
NULL
,则防火墙仅记录从指定帐户(应该是组的成员)收到的语句的白名单规则。
例子:
SELECT set_firewall_group_mode('g', 'DETECTING');
MySQL 8.0.23 新增此功能。
防火墙帐户配置文件功能
这些功能对防火墙帐户配置文件执行管理操作:
read_firewall_users(
user
,mode
)此聚合函数通过
SELECT
表上的语句更新防火墙帐户配置文件缓存mysql.firewall_users
。它需要FIREWALL_ADMIN
特权或已弃用的SUPER
特权。例子:
SELECT read_firewall_users('fwuser@localhost', 'RECORDING') FROM mysql.firewall_users;
从 MySQL 8.0.26 开始,此功能已弃用,并可能在未来的 MySQL 版本中删除。请参阅 将帐户配置文件迁移到组配置文件。
read_firewall_whitelist(
user
,rule
)此聚合函数通过
SELECT
表上的 语句更新指定帐户配置文件的记录语句缓存mysql.firewall_whitelist
。它需要FIREWALL_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 版本中删除。请参阅 将帐户配置文件迁移到组配置文件。
防火墙杂项功能
这些函数执行各种防火墙操作:
此函数将几个防火墙状态变量重置为 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 Firewall 支持以下系统变量。使用它们来配置防火墙操作。除非安装了防火墙,否则这些变量不可用(请参阅 第 6.4.7.2 节,“安装或卸载 MySQL 企业防火墙”)。
-
命令行格式 --mysql-firewall-mode[={OFF|ON}]
系统变量 mysql_firewall_mode
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值 ON
MySQL Enterprise Firewall 是启用(默认)还是禁用。
-
命令行格式 --mysql-firewall-trace[={OFF|ON}]
系统变量 mysql_firewall_trace
范围 全球的 动态的 是的 SET_VAR
提示适用不 类型 布尔值 默认值 OFF
MySQL Enterprise Firewall 跟踪是启用还是禁用(默认)。启用时
mysql_firewall_trace
,对于PROTECTING
模式,防火墙将拒绝的语句写入错误日志。
MySQL Enterprise Firewall 支持以下状态变量。使用它们来获取有关防火墙运行状态的信息。除非安装了防火墙,否则这些变量不可用(请参阅第 6.4.7.2 节,“安装或卸载 MySQL 企业防火墙”)。MYSQL_FIREWALL
每当安装插件或启动服务器时,防火墙状态变量都会设置为 0
。其中许多被
mysql_firewall_flush_status()
函数重置为零(请参阅MySQL Enterprise Firewall Administrative Functions)。