Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  MySQL Enterprise Firewall Reference

8.4.7.4 MySQL 企业防火墙参考

以下部分提供了 MySQL 企业防火墙元素的参考:

MySQL 企业防火墙表

MySQL 企业防火墙在每个组和每个帐户的基础上维护配置信息。它使用防火墙数据库中的表来存储持久数据,并使用 INFORMATION_SCHEMA 或性能模式表来提供对缓存数据的视图。当启用时,防火墙基于缓存数据进行操作决策。防火墙数据库可以是 mysql 系统数据库或自定义模式(见 安装 MySQL 企业防火墙)。

Firewall Group Profile Tables

MySQL 企业防火墙使用防火墙数据库(mysql 或自定义)中的表来维护组配置信息,并使用性能模式表来提供对缓存数据的视图。

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

The default-database.firewall_groups 表列出了注册的防火墙组配置信息的名称和操作模式。该表具有以下列(对应的性能模式 firewall_groups 表具有类似但不一定相同的列):

  • NAME

    组配置信息的名称。

  • MODE

    当前操作模式的配置信息。允许的模式值为 OFFDETECTINGPROTECTINGRECORDING。有关它们的含义,请参见 防火墙概念

  • USERHOST

    组配置信息的训练帐户,用于在 RECORDING 模式下。该值为 NULL,或非 NULL 帐户,以 user_name@host_name 格式:

    • 如果值为 NULL,防火墙将记录来自任何组成员帐户的 allowlist 规则。

    • 如果值为非 NULL,防火墙将仅记录来自命名帐户(该帐户应是组成员)的 allowlist 规则。

The default-database.firewall_group_allowlist 表列出了注册的防火墙组配置信息的 allowlist 规则。该表具有以下列(对应的性能模式 firewall_group_allowlist 表具有类似但不一定相同的列):

  • NAME

    组配置信息的名称。

  • RULE

    一个 normalized 语句,表示配置信息的可接受语句模式。配置信息的 allowlist 是其规则的并集。

  • ID

    一个整数列,作为表的主键。

默认数据库的 default-database.firewall_membership 表列出了注册的防火墙组配置文件的成员(账户)。该表具有以下列(与性能模式 firewall_membership 表具有相似但不一定相同的列):

  • GROUP_ID

    组配置文件的名称。

  • MEMBER_ID

    该配置文件的成员账户名称。

Firewall Account Profile Tables

MySQL Enterprise 防火墙使用防火墙数据库中的表来维护账户配置文件信息,并使用 INFORMATION_SCHEMA 表来提供内存缓存数据的视图。防火墙数据库可以是 mysql 系统数据库或自定义模式(见 安装 MySQL Enterprise 防火墙)。

每个默认数据库表只能由具有该表 SELECT 权限的账户访问。 INFORMATION_SCHEMA 表可以被任何人访问。

从 MySQL 8.0.26 开始,这些表已弃用,并将在未来 MySQL 版本中删除。见 迁移账户配置文件到组配置文件

默认数据库的 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

    一个规范的语句,指示配置文件的可接受语句模式。配置文件的允许列表是其规则的并集。

  • ID

    一个整数列,作为表的主键。

MySQL Enterprise 防火墙存储过程

MySQL Enterprise 防火墙存储过程执行任务,如注册配置文件到防火墙、设置其操作模式和管理防火墙数据在缓存和持久存储之间的传输。这些过程调用管理函数,提供了低级任务的 API。

防火墙存储过程是在防火墙数据库中创建的。防火墙数据库可以是 mysql 系统数据库或自定义模式(见 安装 MySQL Enterprise 防火墙)。

要调用防火墙存储过程,必须在指定的防火墙数据库是默认数据库时执行,或者使用数据库名称限定过程名称。例如,如果 mysql 是防火墙数据库:

CALL mysql.sp_set_firewall_group_mode(group, mode);
Note

如果您在自定义模式中安装了 MySQL Enterprise 防火墙,请相应地替换系统。例如,如果防火墙安装在 fwdb 模式中,则执行存储过程如下:

CALL fwdb.sp_set_firewall_group_mode(group, mode);

Firewall Group Profile Stored Procedures

这些存储过程在防火墙组配置文件上执行管理操作:

  • sp_firewall_group_delist(, 用户)

    该存储过程从防火墙组配置文件中删除一个账户。

    如果调用成功,组成员资格的更改将同时应用于内存缓存和持久存储。

    参数:

    • :受影响的组配置文件的名称。

    • 用户:要删除的账户,以 用户名@主机名 格式。

    示例:

    CALL mysql.sp_firewall_group_delist('g', 'fwuser@localhost');
  • sp_firewall_group_enlist(, 用户)

    该存储过程将账户添加到防火墙组配置文件中。在添加账户到组之前,不需要注册账户本身与防火墙。

    如果调用成功,组成员资格的更改将同时应用于内存缓存和持久存储。

    参数:

    • :受影响的组配置文件的名称。

    • 用户:要添加的账户,以 用户名@主机名 格式。

    示例:

    CALL mysql.sp_firewall_group_enlist('g', 'fwuser@localhost');
  • sp_reload_firewall_group_rules()

    该存储过程提供了对防火墙操作的控制,用于单个组配置文件。该过程使用防火墙管理函数从 firewall-database.firewall_group_allowlist 表中重新加载组配置文件的规则。

    参数:

    • :受影响的组配置文件的名称。

    示例:

    CALL mysql.sp_reload_firewall_group_rules('myapp');
    Warning

    该过程清除组配置文件的内存 allowlist 规则,然后从持久存储中重新加载它们,并将配置文件模式设置为 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(, 模式)

    该存储过程为防火墙组配置文件设置操作模式,在注册配置文件与防火墙之前,如果它还没有注册。该过程还会调用防火墙管理函数,以便在缓存和持久存储之间传输防火墙数据。即使 mysql_firewall_mode 系统变量为 OFF,也可以调用该过程,尽管设置配置文件模式对防火墙操作没有实际效果,直到防火墙启用。

    如果配置文件之前已经存在,任何记录限制都将保持不变。要设置或清除限制,需要调用 sp_set_firewall_group_mode_and_user()

    参数:

    • :受影响的组配置文件的名称。

    • 模式:配置文件的操作模式,以字符串形式。允许的模式值为 OFFDETECTINGPROTECTINGRECORDING。有关这些值的含义,请参阅 防火墙概念

    示例:

    CALL mysql.sp_set_firewall_group_mode('myapp', 'PROTECTING');
  • sp_set_firewall_group_mode_and_user(, 模式, 用户)

    该存储过程注册组与防火墙,并设置其操作模式,类似于 sp_set_firewall_group_mode(),但也指定了在记录模式下使用的训练账户。

    参数:

    • :受影响的组配置文件的名称。

    • 模式: 配置文件的操作模式,作为字符串。允许的模式值是 OFFDETECTINGPROTECTINGRECORDING。有关它们的含义,请参阅 防火墙概念

    • 用户: 训练组配置文件的账户,用于记录模式。该值为 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 8.0.26 开始,该过程已弃用,并将在未来 MySQL 版本中删除。请参阅 迁移到组配置文件

  • sp_set_firewall_mode(user, mode)

    该存储过程为防火墙账户配置文件设置操作模式,注册配置文件(如果尚未注册),并在必要时调用防火墙管理函数来传输防火墙数据 zwischen 缓存和持久存储。即使 mysql_firewall_mode 系统变量为 OFF,也可以调用该过程,尽管设置配置文件模式对操作没有影响,直到防火墙启用。

    参数:

    • user: 受影响的账户配置文件的名称,作为字符串,格式为 user_name@host_name

    • mode: 配置文件的操作模式,作为字符串。允许的模式值是 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 8.0.26 开始,该过程已弃用,并将在未来 MySQL 版本中删除。请参阅 迁移到组配置文件

Firewall Miscellaneous Stored Procedures

这些存储过程执行防火墙管理操作。

  • sp_migrate_firewall_user_to_group(用户, )

    从 MySQL 8.0.26 开始,账户配置文件已弃用,因为组配置文件可以执行账户配置文件的所有操作。sp_migrate_firewall_user_to_group() 存储过程将防火墙账户配置文件转换为组配置文件,其中账户作为唯一的入选成员。运行 firewall_profile_migration.sql 脚本以安装它。转换过程在 将账户配置文件迁移到组配置文件 中讨论。

    该例程需要 FIREWALL_ADMIN 权限。

    参数:

    • 用户:要转换为组配置文件的账户配置文件的名称,以 user_name@host_name 格式。账户配置文件必须存在,并且不能当前处于 RECORDING 模式。

    • :新组配置文件的名称,该组配置文件不能已经存在。新组配置文件将命名的账户作为其唯一的入选成员,并将该成员设置为组训练账户。组配置文件的操作模式来自账户配置文件的操作模式。

    示例:

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

MySQL Enterprise 防火墙管理函数提供了 API,以便执行较低级别的任务,例如将防火墙缓存与基础系统表同步。

在正常操作下,这些函数由防火墙存储过程调用,而不是直接由用户调用。 因此,这些函数描述不包括详细信息,例如参数和返回类型。

Firewall Group Profile Functions

这些函数执行防火墙组配置文件管理操作:

  • firewall_group_delist(, 用户)

    该函数从组配置文件中删除账户。它需要 FIREWALL_ADMIN 权限。

    示例:

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

    该函数将账户添加到组配置文件中。它需要 FIREWALL_ADMIN 权限。

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

    示例:

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

    该聚合函数通过在 firewall-database.firewall_group_allowlist 表上的 SELECT 语句更新命名组配置文件的记录语句缓存。它需要 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(, 模式, 用户)

    该聚合函数通过在 SELECT 语句中更新防火墙组配置缓存 firewall-database.firewall_groups 表。它需要 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,或非 NULL 账户,格式为 user_name@host_name

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

    • 如果值为非 NULL,防火墙记录允许列表规则仅来自命名账户(该账户应为组成员)的语句。

    示例:

    SELECT set_firewall_group_mode('g', 'DETECTING');
Firewall Account Profile Functions

这些函数执行防火墙账户配置管理操作:

  • read_firewall_users(user, mode)

    该聚合函数通过 SELECT 语句更新防火墙账户配置缓存 firewall-database.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 语句更新记录语句缓存 firewall-database.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 版本中删除。请参阅 迁移到组配置

  • set_firewall_mode(user, mode)

    该函数管理账户配置缓存,建立配置操作模式。它需要 FIREWALL_ADMIN 权限或已弃用的 SUPER 权限。

    示例:

    SELECT set_firewall_mode('fwuser@localhost', 'RECORDING');

    从 MySQL 8.0.26 开始,该函数已弃用,并将在未来 MySQL 版本中删除。请参阅 迁移到组配置

Firewall Miscellaneous Functions

这些函数执行防火墙杂项操作:

MySQL 企业防火墙系统变量

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

  • mysql_firewall_database

    Command-Line Format --mysql-firewall-database[=value]
    System Variable mysql_firewall_database
    Scope Global
    Dynamic No
    SET_VAR Hint Applies No
    Type String
    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 Global
    Dynamic Yes
    SET_VAR Hint Applies No
    Type Boolean
    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 Global
    Dynamic No
    SET_VAR Hint Applies No
    Type Integer
    Default Value 0
    Minimum Value 60 (unless 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 Enterprise 防火墙跟踪(默认情况下禁用)。当 mysql_firewall_trace 启用时,对于 PROTECTING 模式,防火墙将 rejected 语句写入错误日志。

MySQL Enterprise 防火墙状态变量

MySQL Enterprise 防火墙支持以下状态变量。使用它们来获取防火墙操作状态的信息。这些变量在防火墙未安装时不可用(请参阅 第 8.4.7.2 节,“安装或卸载 MySQL Enterprise 防火墙”)。防火墙状态变量在 MYSQL_FIREWALL 插件安装或服务器启动时设置为 0。许多变量在 mysql_firewall_flush_status() 函数中被重置为零(请参阅 MySQL Enterprise 防火墙管理函数)。