Documentation Home
MySQL 8.0 参考手册  / 第 6 章 安全  / 6.4 安全组件和插件  / 6.4.7 MySQL 企业防火墙  /  6.4.7.4 MySQL 企业防火墙参考

6.4.7.4 MySQL 企业防火墙参考

以下部分提供了对 MySQL Enterprise Firewall 元素的参考:

MySQL 企业防火墙表

MySQL Enterprise Firewall 在每个组和每个帐户的基础上维护配置文件信息。它使用 mysql系统数据库中的表进行持久存储和INFORMATION_SCHEMA/或性能模式表来提供对内存中缓存数据的视图。启用后,防火墙会根据缓存数据做出操作决策。

防火墙组配置文件表

从 MySQL 8.0.23 开始,MySQL Enterprise Firewall 使用mysql系统数据库中的表进行持久存储和性能架构表来维护组配置文件信息,以提供对内存缓存数据的视图。

每个系统和 Performance Schema 表只能由具有SELECT 权限的帐户访问。

mysql.firewall_groups表列出了已注册防火墙组配置文件的名称和操作模式。该表具有以下列(相应的性能模式 firewall_groups表具有相似但不一定相同的列):

  • NAME

    组配置文件名称。

  • MODE

    配置文件的当前操作模式。允许的模式值为OFFDETECTINGPROTECTINGRECORDING。有关它们的详细信息,请参阅防火墙概念

  • 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

    配置文件的当前操作模式。允许的模式值为OFFDETECTINGPROTECTINGRECORDINGRESET。有关它们的详细信息,请参阅防火墙概念

mysql.firewall_whitelist表列出了已注册防火墙帐户配置文件的白名单规则。该表具有以下列(相应的 INFORMATION_SCHEMA.MYSQL_FIREWALL_WHITELIST 表具有相似但不一定相同的列):

  • USERHOST

    帐户配置文件名称。每个帐户名的格式都是 . user_name@host_name

  • RULE

    规范化语句,指示配置文件可接受的语句模式。配置文件白名单是其规则的集合。

  • ID

    作为表主键的整数列。此列是在 MySQL 8.0.12 中添加的。

MySQL 企业防火墙存储过程

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()PROTECTINGsp_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:配置文件的操作模式,作为字符串。允许的模式值为OFFDETECTINGPROTECTINGRECORDING。有关它们的详细信息,请参阅防火墙概念

    例子:

    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:配置文件的操作模式,作为字符串。允许的模式值为OFFDETECTINGPROTECTINGRECORDING。有关它们的详细信息,请参阅防火墙概念

    • 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()PROTECTINGsp_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:配置文件的操作模式,作为字符串。允许的模式值为OFFDETECTINGPROTECTINGRECORDINGRESET。有关它们的详细信息,请参阅防火墙概念

    将帐户配置文件切换到任何模式,但 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_nameRECORDING

    • group:新组配置文件的名称,该名称不得已存在。新的组配置文件将指定帐户作为其单一登记成员,并且该成员被设置为组培训帐户。组配置文件操作模式取自帐户配置文件操作模式。

    例子:

    CALL sp_migrate_firewall_user_to_group('fwuser@localhost', 'mygroup);

    这个过程是在 MySQL 8.0.26 中添加的。

MySQL 企业防火墙管理功能

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 新增此功能。

防火墙帐户配置文件功能

这些功能对防火墙帐户配置文件执行管理操作:

防火墙杂项功能

这些函数执行各种防火墙操作:

MySQL 企业防火墙系统变量

MySQL Enterprise Firewall 支持以下系统变量。使用它们来配置防火墙操作。除非安装了防火墙,否则这些变量不可用(请参阅 第 6.4.7.2 节,“安装或卸载 MySQL 企业防火墙”)。

  • mysql_firewall_mode

    命令行格式 --mysql-firewall-mode[={OFF|ON}]
    系统变量 mysql_firewall_mode
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 ON

    MySQL Enterprise Firewall 是启用(默认)还是禁用。

  • mysql_firewall_trace

    命令行格式 --mysql-firewall-trace[={OFF|ON}]
    系统变量 mysql_firewall_trace
    范围 全球的
    动态的 是的
    SET_VAR提示适用
    类型 布尔值
    默认值 OFF

    MySQL Enterprise Firewall 跟踪是启用还是禁用(默认)。启用时 mysql_firewall_trace,对于PROTECTING模式,防火墙将拒绝的语句写入错误日志。

MySQL 企业防火墙状态变量

MySQL Enterprise Firewall 支持以下状态变量。使用它们来获取有关防火墙运行状态的信息。除非安装了防火墙,否则这些变量不可用(请参阅第 6.4.7.2 节,“安装或卸载 MySQL 企业防火墙”)。MYSQL_FIREWALL每当安装插件或启动服务器时,防火墙状态变量都会设置为 0 。其中许多被 mysql_firewall_flush_status() 函数重置为零(请参阅MySQL Enterprise Firewall Administrative Functions)。