文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  MySQL 企业防火墙参考

8.4.7.4 MySQL 企业防火墙参考

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

MySQL 企业防火墙表

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

防火墙组配置文件表

MySQL 企业防火墙使用防火墙数据库(mysql 或自定义)中的表维护组配置文件信息以进行持久存储,并使用性能模式表提供内存缓存数据的视图。

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

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

  • NAME

    组配置文件名称。

  • MODE

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

  • USERHOST

    组配置文件的训练帐户,在配置文件处于 RECORDING 模式时使用。该值为 NULL 或格式为 user_name@host_name 的非 NULL 帐户。

    • 如果该值为 NULL,则防火墙会为从该组的任何成员帐户接收到的语句记录允许列表规则。

    • 如果该值不为 NULL,则防火墙仅为从指定帐户(应为该组的成员)接收到的语句记录允许列表规则。

default-database.firewall_group_allowlist 表列出了已注册防火墙组配置文件的允许列表规则。该表包含以下列(相应的性能模式 firewall_group_allowlist 表具有相似但不一定完全相同的列):

  • NAME

    组配置文件名称。

  • RULE

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

  • ID

    一个整数列,它是该表的主键。

default-database.firewall_membership 表列出了已注册防火墙组配置文件的成员(帐户)。该表包含以下列(相应的性能模式 firewall_membership 表具有相似但不一定完全相同的列):

  • GROUP_ID

    组配置文件名称。

  • MEMBER_ID

    作为配置文件成员的帐户的名称。

防火墙帐户配置文件表

MySQL 企业防火墙使用防火墙数据库中的表来维护帐户配置文件信息,以便进行持久存储,并使用 INFORMATION_SCHEMA 表提供对内存中缓存数据的视图。防火墙数据库可以是 mysql 系统数据库或自定义架构(请参阅安装 MySQL 企业防火墙)。

默认情况下,每个数据库表只能由对其具有 SELECT 权限的帐户访问。INFORMATION_SCHEMA 表可由任何人访问。

这些表已被弃用,并将在未来的 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 企业防火墙存储程序

MySQL 企业防火墙存储程序执行诸如在防火墙中注册配置文件、建立其操作模式以及管理缓存和持久存储之间防火墙数据的传输等任务。这些程序调用提供低级任务 API 的管理函数。

防火墙存储程序在防火墙数据库中创建。防火墙数据库可以是 mysql 系统数据库或自定义架构(请参阅安装 MySQL 企业防火墙)。

要调用防火墙存储程序,请在指定的防火墙数据库为默认数据库时执行此操作,或者使用数据库名称限定程序名称。例如,如果 mysql 是防火墙数据库:

CALL mysql.sp_set_firewall_group_mode(group, mode);

在 MySQL 8.4 中,防火墙存储程序是事务性的;如果在执行防火墙存储程序期间发生错误,则将回滚该程序到那时为止所做的所有更改,并报告错误。

注意

如果已在自定义架构中安装了 MySQL 企业防火墙,请对您的系统进行适当的替换。例如,如果防火墙安装在 fwdb 架构中,则像这样执行存储程序:

CALL fwdb.sp_set_firewall_group_mode(group, mode);

防火墙组配置文件存储程序

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

  • sp_firewall_group_delist(group, user)

    此存储程序从防火墙组配置文件中删除一个帐户。

    如果调用成功,则会将组成员身份的更改应用于内存缓存和持久存储。

    参数

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

    • user:要删除的帐户,格式为 user_name@host_name 的字符串。

    示例

    CALL mysql.sp_firewall_group_delist('g', 'fwuser@localhost');
  • sp_firewall_group_enlist(group, user)

    此存储程序将一个帐户添加到防火墙组配置文件中。在将帐户添加到组之前,无需在防火墙中注册该帐户本身。

    如果调用成功,则会将组成员身份的更改应用于内存缓存和持久存储。

    参数

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

    • user:要添加的帐户,格式为 user_name@host_name 的字符串。

    示例

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

    此存储程序为各个组配置文件提供对防火墙操作的控制。该程序使用防火墙管理函数从存储在 firewall-database.firewall_group_allowlist 表中的规则重新加载组配置文件的内存规则。

    参数

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

    示例

    CALL mysql.sp_reload_firewall_group_rules('myapp');
    警告

    此程序在从持久存储重新加载组配置文件内存白名单规则之前,会清除这些规则,并将配置文件模式设置为 OFF。如果在调用 sp_reload_firewall_group_rules() 之前配置文件模式不是 OFF,请在重新加载规则后使用 sp_set_firewall_group_mode() 恢复其先前的模式。例如,如果配置文件处于 PROTECTING 模式,则在调用 sp_reload_firewall_group_rules() 后,该模式将不再有效,您必须再次将其显式设置为 PROTECTING

  • sp_set_firewall_group_mode(group, mode)

    此存储程序为防火墙组配置文件建立操作模式,如果该配置文件尚未注册,则先在防火墙中注册该配置文件。该程序还会根据需要调用防火墙管理函数,以便在缓存和持久存储之间传输防火墙数据。即使 mysql_firewall_mode 系统变量为 OFF,也可以调用此程序,但在启用防火墙之前,设置配置文件的模式不会产生任何操作效果。

    如果配置文件先前已存在,则其任何记录限制都保持不变。要设置或清除限制,请改用 sp_set_firewall_group_mode_and_user()

    参数

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

    • mode:配置文件的操作模式,以字符串形式表示。允许的模式值为 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:受影响的组配置文件的名称。

    • mode:配置文件的操作模式,以字符串形式表示。允许的模式值为 OFFDETECTINGPROTECTINGRECORDING。有关其含义的详细信息,请参阅防火墙概念

    • user:组配置文件的训练帐户,将在配置文件处于 RECORDING 模式时使用。该值为 NULL 或格式为 user_name@host_name 的非 NULL 帐户。

      • 如果该值为 NULL,则防火墙会为从该组的任何成员帐户接收到的语句记录允许列表规则。

      • 如果该值不为 NULL,则防火墙仅为从指定帐户(应为该组的成员)接收到的语句记录允许列表规则。

    示例

    CALL mysql.sp_set_firewall_group_mode_and_user('myapp', 'RECORDING', 'myapp_user1@localhost');
防火墙帐户配置文件存储程序

这些存储程序对防火墙帐户配置文件执行管理操作:

  • sp_reload_firewall_rules(user)

    此存储程序为各个帐户配置文件提供对防火墙操作的控制。该程序使用防火墙管理函数从存储在 firewall-database.firewall_whitelist 表中的规则重新加载帐户配置文件的内存规则。

    参数

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

    示例

    CALL sp_reload_firewall_rules('fwuser@localhost');
    警告

    此程序在从持久存储重新加载帐户配置文件内存白名单规则之前,会清除这些规则,并将配置文件模式设置为 OFF。如果在调用 sp_reload_firewall_rules() 之前配置文件模式不是 OFF,请在重新加载规则后使用 sp_set_firewall_mode() 恢复其先前的模式。例如,如果配置文件处于 PROTECTING 模式,则在调用 sp_reload_firewall_rules() 后,该模式将不再有效,您必须再次将其显式设置为 PROTECTING

    此程序已被弃用,并将在未来的 MySQL 版本中被删除。请参阅将帐户配置文件迁移到组配置文件

  • sp_set_firewall_mode(user, mode)

    此存储程序为防火墙帐户配置文件建立操作模式,如果该配置文件尚未注册,则先在防火墙中注册该配置文件。该程序还会根据需要调用防火墙管理函数,以便在缓存和持久存储之间传输防火墙数据。即使 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 版本中被删除。请参阅将帐户配置文件迁移到组配置文件

防火墙杂项存储程序

这些存储程序执行各种防火墙管理操作。

  • sp_migrate_firewall_user_to_group(user, group)

    sp_migrate_firewall_user_to_group() 存储程序将防火墙帐户配置文件转换为组配置文件,并将该帐户作为其唯一注册成员。运行 firewall_profile_migration.sql 脚本来安装它。转换过程在将帐户配置文件迁移到组配置文件中讨论。

    此例程需要 FIREWALL_ADMIN 权限。

    参数

    • user:要转换为组配置文件的帐户配置文件的名称,格式为 user_name@host_name 的字符串。该帐户配置文件必须存在,并且当前不得处于 RECORDING 模式。

    • group:新组配置文件的名称,该名称必须尚不存在。新组配置文件将指定的帐户作为其唯一注册成员,并且该成员被设置为组训练帐户。组配置文件操作模式取自帐户配置文件操作模式。

    示例

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

MySQL 企业防火墙管理函数提供了一个 API,用于执行诸如将防火墙缓存与底层系统表同步等低级任务。

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

防火墙组配置文件函数

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

  • firewall_group_delist(group, user)

    此函数从组配置文件中删除一个帐户。它需要 FIREWALL_ADMIN 权限。

    示例

    SELECT firewall_group_delist('g', 'fwuser@localhost');
  • firewall_group_enlist(group, user)

    此函数将一个帐户添加到组配置文件中。它需要 FIREWALL_ADMIN 权限。

    在将帐户添加到组之前,无需在防火墙中注册该帐户本身。

    示例

    SELECT firewall_group_enlist('g', 'fwuser@localhost');
  • read_firewall_group_allowlist(group, rule)

    此聚合函数通过在 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(group, mode, user)

    此聚合函数通过在 firewall-database.firewall_groups 表上执行 SELECT 语句来更新防火墙组配置文件缓存。它需要 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,或者是一个格式为 user_name@host_name 的非 NULL 帐户。

    • 如果该值为 NULL,则防火墙会为从该组的任何成员帐户接收到的语句记录允许列表规则。

    • 如果该值不为 NULL,则防火墙仅为从指定帐户(应为该组的成员)接收到的语句记录允许列表规则。

    示例

    SELECT set_firewall_group_mode('g', 'DETECTING');
防火墙帐户配置文件函数

这些函数对防火墙帐户配置文件执行管理操作。

防火墙杂项函数

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

MySQL 企业版防火墙系统变量

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

  • mysql_firewall_database

    命令行格式 --mysql-firewall-database[=value]
    系统变量 mysql_firewall_database
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 mysql

    指定 MySQL 企业版防火墙从中读取数据的数据库。通常,MYSQL_FIREWALL 服务器端插件将其内部数据(表、存储过程和函数)存储在 mysql 系统数据库中,但您可以创建和使用自定义架构来代替(请参阅 安装 MySQL 企业版防火墙)。此变量允许在启动时指定备用数据库名称。

  • mysql_firewall_mode

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

    MySQL 企业版防火墙是启用(默认)还是禁用。

  • mysql_firewall_reload_interval_seconds

    命令行格式 --mysql-firewall-reload-interval-seconds[=value]
    系统变量 mysql_firewall_reload_interval_seconds
    作用域 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 60(除非为 0:OFF)
    最大值 INT_MAX
    单位

    指定服务器端插件用于从防火墙表重新加载其内部缓存的时间间隔(以秒为单位)。当 mysql_firewall_reload_interval_seconds 的值为零(默认值)时,在运行时不会定期从表中重新加载数据。插件不识别介于 060(1 到 59)之间的值。相反,这些值会自动调整为 60

    此变量要求启用 scheduler 组件(ON)。有关更多信息,请参阅 安排防火墙缓存重新加载

  • mysql_firewall_trace

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

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

MySQL 企业版防火墙状态变量

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