8.4.7.4 MySQL 企业防火墙参考
以下部分提供了MySQL Enterprise Firewall元素的参考:
MySQL 企业防火墙表
MySQL 企业防火墙在每个组和每个账户基础上维护配置信息。它使用防火墙数据库中的表进行持久存储,并使用INFORMATION_SCHEMA
或性能_schema 表来提供内存缓存数据的视图。当启用时,防火墙基于缓存数据做出操作决策。防火墙数据库可以是mysql
系统数据库或自定义架构(见安装 MySQL 企业防火墙)。
Firewall Group Profile Tables
MySQL Enterprise 防火墙使用防火墙数据库(mysql
或自定义)中的表来维护组profile信息,并使用性能_schema 表提供内存缓存数据的视图。
每个系统和性能_schema 表都只能被拥有相应SELECT
特权的账户访问。
表
列出了注册的防火墙组profile名称和操作模式。该表具有以下列(与性能_schema default-database
.firewall_groupsfirewall_groups
表相似,但不一定完全相同):
-
NAME
组profile名称。
-
MODE
当前操作模式。允许的模式值是
OFF
、DETECTING
、PROTECTING
和RECORDING
。关于它们的含义,请参阅防火墙概念。 -
USERHOST
组-profile的训练账户,用于在
RECORDING
模式下使用。该值是NULL
,或者非NULL
账户,以格式
形式:user_name
@host_name
-
如果该值是
NULL
,防火墙记录允许列表规则来自组中的任何账户的语句。 -
如果该值非
NULL
,防火墙只记录来自指定账户(该账户应该是组成员)的语句。
-
代码
表中列出了注册的防火墙组-profile的允许列表规则。该表具有以下列(与default-database
.firewall_group_allowlistfirewall_group_allowlist
性能chema表相似,但不一定完全相同):
-
NAME
组-profile名称。
-
RULE
normalized 语句,表示profile允许的语句模式。一个profile允许列表是其规则的并集。
-
ID
整数列,是该表的主键。
默认数据库
表中列出了注册的防火墙组 profile 的成员(账户)。该表具有以下列(与default-database
.firewall_membershipfirewall_membership
表类似,但不一定完全相同):
-
GROUP_ID
组 profile 名称。
-
MEMBER_ID
该 profile 的账户名称。
Firewall Account Profile Tables
MySQL Enterprise Firewall 使用防火墙数据库中的表来维护账户 profile 信息,并使用 INFORMATION_SCHEMA
表提供内存缓存数据的视图。防火墙数据库可以是 mysql
系统数据库或自定义架构(见安装 MySQL Enterprise Firewall)。
每个默认数据库表只能被拥有该表的 SELECT
权限的账户访问。 INFORMATION_SCHEMA
表可以被任何人访问。
这些表已经弃用,可能在未来 MySQL 版本中删除。见迁移账户 profile 到组 profile。
默认数据库中的
表中列举了注册的防火墙账户配置文件的名称和操作模式。该表具有以下列(与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
一个 normalize 语句,表示配置文件的可接受语句模式。配置文件白名单是其规则的并集。
-
ID
一个整数列,是该表的主键。
MySQL 企业防火墙存储过程
MySQL 企业防火墙存储过程执行任务,如注册配置文件、设置操作模式和管理防火墙数据的传输。这些过程调用管理员函数,提供低级别任务的 API。
防火墙存储过程在防火墙数据库中创建。防火墙数据库可以是 mysql
系统数据库或自定义架构(见安装 MySQL 企业防火墙)。
要调用防火墙存储过程,可以在指定防火墙数据库是默认数据库时执行,或者使用数据库名称限定该过程名。例如,如果 mysql
是防火墙数据库:
CALL mysql.sp_set_firewall_group_mode(group, mode);
在 MySQL 8.4 中,防火墙存储过程是事务性的;如果防火墙存储过程执行期间出现错误,直到该点所有更改都将回滚,并报告错误。
如果您在自定义架构中安装了 MySQL Enterprise Firewall,那么请对您的系统进行相应的替换。例如,如果防火墙安装在fwdb
架构中,那么执行存储过程时,需要像这样:
CALL fwdb.sp_set_firewall_group_mode(group, mode);
Firewall Group Profile Stored Procedures
这些存储过程对防火墙组 profile 进行管理操作:
-
sp_firewall_group_delist(
group
,user
)这个存储过程从防火墙组 profile 中删除一个账户。
如果调用成功,组成员身份的更改将被应用于内存缓存和持久存储中。
参数:
-
group
: 影响的组 profile 名称。 -
user
: 要删除的账户,作为一个字符串,在
格式中。user_name
@host_name
示例:
CALL mysql.sp_firewall_group_delist('g', 'fwuser@localhost');
-
-
sp_firewall_group_enlist(
group
,user
)该存储过程将账户添加到防火墙组-profile中,不需要在添加前注册账户本身。
如果调用成功,组成员身份的更改将应用于内存缓存和持久存储。
参数:
-
group
:影响的组-profile名称。 -
user
:要添加的账户,字符串格式为
。user_name
@host_name
示例:
CALL mysql.sp_firewall_group_enlist('g', 'fwuser@localhost');
-
-
sp_reload_firewall_group_rules(
group
)该存储过程提供了对防火墙操作的控制,用于重新加载组-profile中的内存规则,从
表中获取规则。firewall-database
.firewall_group_allowlist参数:
-
group
:影响的组-profile名称。
示例:
CALL mysql.sp_reload_firewall_group_rules('myapp');
Warning该过程在重新加载规则之前清除组件内存允许列表规则,然后将配置模式设置为
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(
group
,mode
)该存储过程在注册组件防火墙配置文件后,确定防火墙组件的操作模式。该过程还会根据需要调用防火墙管理函数,以将防火墙数据从缓存中转移到持久存储中。这过程可以在
mysql_firewall_mode
系统变量为OFF
时调用,虽然设置配置模式对防火墙没有实际操作效果,直到防火墙启用。如果配置文件之前已经存在,那么对其的记录限制保持不变。要设置或清除限制,请调用
sp_set_firewall_group_mode_and_user()
。参数:
-
group
:影响的组件配置文件名称。 -
mode
: profile 的操作模式,作为字符串。允许的模式值是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
: 影响的组 profile 名称。 -
mode
: profile 的操作模式,作为字符串。允许的模式值是OFF
、DETECTING
、PROTECTING
和RECORDING
。关于它们的含义,见防火墙概念。 -
user
: 组 profile 在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 版本中删除。请参阅将帐户配置文件迁移到组配置文件。
-
-
sp_set_firewall_mode(<em class="replaceable"><code>user</code>, <em class="replaceable"><code>mode</code>)
该存储过程在注册帐户配置文件到防火墙后,设置防火墙帐户配置文件的操作模式。该过程也会根据需要调用防火墙管理函数,以将防火墙数据从缓存传输到持久存储中。即使
mysql_firewall_mode
系统变量为OFF
,也可以调用该过程,但设置配置文件的模式直到防火墙启用时才生效。参数:
-
<code>user</code>: 影响的帐户配置文件名称,字符串格式为
<em class="replaceable"><code>user_name</code>@<em class="replaceable"><code>host_name</code>
。 -
<code>mode</code>: 配置文件的操作模式,字符串。允许的模式值是
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版本中删除。请参阅将账户配置文件迁移到组配置文件。
-
Firewall Miscellaneous Stored Procedures
这些存储过程执行防火墙管理操作。
-
sp_migrate_firewall_user_to_group(
user
,group
)sp_migrate_firewall_user_to_group()
存储过程将防火墙账户配置文件转换为组配置文件,账户作为其唯一的成员。运行firewall_profile_migration.sql
脚本来安装它。转换过程在将账户配置文件迁移到组配置文件中讨论。该存储程序需要
FIREWALL_ADMIN
特权。参数:
-
user
:要转换为组 profile 的帐户名称,字符串格式为
。该帐户 profile 必须存在,并且不能当前处于user_name
@host_name
RECORDING
模式。 -
group
:新建组 profile 的名称,不能已经存在。新建组 profile 只有一个成员,即该帐户,该成员设置为组训练帐户,组 profile 操作模式来自帐户 profile 操作模式。
示例:
CALL sp_migrate_firewall_user_to_group('fwuser@localhost', 'mygroup);
-
MySQL 企业防火墙管理函数
MySQL 企业防火墙管理函数提供了一个 API,用于同步防火墙缓存与系统表。
在正常操作中,这些函数由防火墙存储程序调用,而不是直接由用户调用。因此,这些函数描述不包括关于参数和返回类型的信息。
Firewall Group Profile Functions
这些函数对防火墙组 profile 进行管理操作:
-
这个函数从组 profile 中删除一个账户。它需要
FIREWALL_ADMIN
特权。示例:
SELECT firewall_group_delist('g', 'fwuser@localhost');
-
这个函数将账户添加到组 profile 中。它也需要
FIREWALL_ADMIN
特权。不需要在添加账户到组之前注册账户本身到防火墙中。
示例:
SELECT firewall_group_enlist('g', 'fwuser@localhost');
-
read_firewall_group_allowlist(
组
,规则
)通过
SELECT
语句在
表中更新记錄的语句组 profile,需要firewall-database
.firewall_group_allowlistFIREWALL_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
)通过
SELECT
语句在
表中更新防火墙组 profile,需要firewall-database
.firewall_groupsFIREWALL_ADMIN
权限。示例:
SELECT read_firewall_groups('g', 'RECORDING', 'fwuser@localhost') FROM mysql.firewall_groups;
-
set_firewall_group_mode(
group
,mode
[,user
])该函数管理组 profile 缓存,确定 profile 运行模式,并可选地指定 profile 训练账户,需要
FIREWALL_ADMIN
权限。如果不提供可选的
user
参数,任何之前的user
设置将保持不变。要更改设置,请使用第三个参数调用函数。如果提供可选的
user
参数,它指定了组 profile 的训练账户,在profile处于RECORDING
模式时使用。该值是NULL
,或格式为
的非user_name
@host_name
NULL
账户:-
如果该值是
NULL
,防火墙记录允许列表规则适用于来自组中的任何账户。 -
如果该值非
NULL
,防火墙记录只允许来自指定账户的语句(该账户应该是组成员)。
示例:
SELECT set_firewall_group_mode('g', 'DETECTING');
-
Firewall Account Profile Functions
这些函数对防火墙账户 profile 进行管理操作:
-
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 版本中删除。请参阅将账户配置迁移到组配置。
Firewall Miscellaneous Functions
这些函数执行多种防火墙操作:
-
该函数将多个防火墙状态变量重置为 0:
该函数需要
FIREWALL_ADMIN
特权或已弃用的SUPER
特权。示例:
SELECT mysql_firewall_flush_status();
-
该函数将 SQL 语句 normalize 到用于 allowlist 规则的摘要形式。它需要
FIREWALL_ADMIN
特权或已弃用的SUPER
特权。示例:
SELECT normalize_statement('SELECT * FROM t1 WHERE c1 > 2');
Note在防火墙上下文外部可以使用
STATEMENT_DIGEST_TEXT()
SQL 函数来获取同样的摘要功能。
MySQL 企业防火墙系统变量
MySQL 企业防火墙支持以下系统变量。使用它们来配置防火墙操作。这些变量只有在安装了防火墙时才可用(见第8.4.7.2节,“Installing or Uninstalling MySQL Enterprise Firewall”)。
-
Command-Line Format --mysql-firewall-database[=value]
System Variable mysql_firewall_database
Scope 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 字符串 Default Value mysql
指定 MySQL 企业防火墙从哪个数据库读取数据。通常,
MYSQL_FIREWALL
服务器端插件将其内部数据(表、存储过程和函数)存储在mysql
系统数据库中,但是您可以创建并使用自定义架构(见安装 MySQL 企业防火墙)。这个变量允许在启动时指定备用数据库名称。 -
Command-Line Format --mysql-firewall-mode[={OFF|ON}]
System Variable mysql_firewall_mode
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔值 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 全局 Dynamic 否 SET_VAR
Hint Applies否 Type 整数 Default Value 0
Minimum Value 60(除非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 企业防火墙追踪(默认情况下)。当
mysql_firewall_trace
启用时,在保护模式下,防火墙将被拒绝的语句写入错误日志。
MySQL 企业防火墙状态变量
MySQL 企业防火墙支持以下状态变量。使用它们来获取防火墙操作状态信息。这些变量只有在防火墙安装时可用(见第8.4.7.2节,“安装或卸载 MySQL 企业防火墙”)。防火墙状态变量在 MYSQL_FIREWALL
插件安装或服务器启动时设置为0。许多变量由mysql_firewall_flush_status()
函数(见MySQL 企业防火墙管理函数)重置为零。