Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  MySQL Enterprise Firewall Reference

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特权的账户访问。

default-database.firewall_groups 列出了注册的防火墙组profile名称和操作模式。该表具有以下列(与性能_schema firewall_groups 表相似,但不一定完全相同):

  • NAME

    组profile名称。

  • MODE

    当前操作模式。允许的模式值是 OFFDETECTINGPROTECTINGRECORDING。关于它们的含义,请参阅防火墙概念

  • USERHOST

    组-profile的训练账户,用于在RECORDING模式下使用。该值是NULL,或者非NULL账户,以格式user_name@host_name形式:

    • 如果该值是NULL,防火墙记录允许列表规则来自组中的任何账户的语句。

    • 如果该值非NULL,防火墙只记录来自指定账户(该账户应该是组成员)的语句。

代码default-database.firewall_group_allowlist 表中列出了注册的防火墙组-profile的允许列表规则。该表具有以下列(与firewall_group_allowlist性能chema表相似,但不一定完全相同):

  • NAME

    组-profile名称。

  • RULE

    normalized 语句,表示profile允许的语句模式。一个profile允许列表是其规则的并集。

  • ID

    整数列,是该表的主键。

默认数据库default-database.firewall_membership 表中列出了注册的防火墙组 profile 的成员(账户)。该表具有以下列(与firewall_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_users 表中列举了注册的防火墙账户配置文件的名称和操作模式。该表具有以下列(与MYSQL_FIREWALL_USERS 表相似,但不一定完全相同):

  • USERHOST

    账户配置文件名称。每个账户名称的格式为 user_name@host_name

  • MODE

    配置文件当前的操作模式。允许的模式值是 OFFDETECTINGPROTECTINGRECORDINGRESET。关于它们的含义,请参阅防火墙概念

默认数据库中的 firewall-database.firewall_whitelist 表中列举了注册的防火墙账户配置文件的允许规则。该表具有以下列(与MYSQL_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 中,防火墙存储过程是事务性的;如果防火墙存储过程执行期间出现错误,直到该点所有更改都将回滚,并报告错误。

Note

如果您在自定义架构中安装了 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 的操作模式,作为字符串。允许的模式值是 OFFDETECTINGPROTECTINGRECORDING。关于它们的含义,见防火墙概念

    示例:

    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 的操作模式,作为字符串。允许的模式值是 OFFDETECTINGPROTECTINGRECORDING。关于它们的含义,见防火墙概念

    • 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>: 配置文件的操作模式,字符串。允许的模式值是OFFDETECTINGPROTECTINGRECORDINGRESET。关于它们的含义,请参阅防火墙概念

    将账户配置文件切换到任何模式,但不是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 的帐户名称,字符串格式为 user_name@host_name。该帐户 profile 必须存在,并且不能当前处于 RECORDING 模式。

    • group:新建组 profile 的名称,不能已经存在。新建组 profile 只有一个成员,即该帐户,该成员设置为组训练帐户,组 profile 操作模式来自帐户 profile 操作模式。

    示例:

    CALL sp_migrate_firewall_user_to_group('fwuser@localhost', 'mygroup);
MySQL 企业防火墙管理函数

MySQL 企业防火墙管理函数提供了一个 API,用于同步防火墙缓存与系统表。

在正常操作中,这些函数由防火墙存储程序调用,而不是直接由用户调用。因此,这些函数描述不包括关于参数和返回类型的信息。

Firewall Group Profile Functions

这些函数对防火墙组 profile 进行管理操作:

  • firewall_group_delist(, 用户)

    这个函数从组 profile 中删除一个账户。它需要FIREWALL_ADMIN特权。

    示例:

    SELECT firewall_group_delist('g', 'fwuser@localhost');
  • firewall_group_enlist(, 用户)

    这个函数将账户添加到组 profile 中。它也需要FIREWALL_ADMIN特权。

    不需要在添加账户到组之前注册账户本身到防火墙中。

    示例:

    SELECT firewall_group_enlist('g', 'fwuser@localhost');
  • read_firewall_group_allowlist(, 规则)

    通过SELECT语句在firewall-database.firewall_group_allowlist表中更新记錄的语句组 profile,需要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)

    通过SELECT语句在firewall-database.firewall_groups表中更新防火墙组 profile,需要FIREWALL_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 进行管理操作:

Firewall Miscellaneous Functions

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

MySQL 企业防火墙系统变量

MySQL 企业防火墙支持以下系统变量。使用它们来配置防火墙操作。这些变量只有在安装了防火墙时才可用(见第8.4.7.2节,“Installing or Uninstalling MySQL Enterprise Firewall”)。

  • mysql_firewall_database

    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 企业防火墙)。这个变量允许在启动时指定备用数据库名称。

  • mysql_firewall_mode

    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的值为零(默认)时,不会在运行时周期性地重新加载数据。介于060(1到59)之间的值不被插件认可,而是自动调整为60

    这个变量需要scheduler组件启用(ON)。更多信息,请见调度防火墙缓存重新加载

  • mysql_firewall_trace

    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 企业防火墙管理函数)重置为零。