文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  MySQL Enterprise 防火墙参考

8.4.7.4 MySQL Enterprise 防火墙参考

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

MySQL Enterprise 防火墙表

MySQL Enterprise 防火墙维护每个组和每个帐户的配置文件信息。它使用防火墙数据库中的表进行持久存储,并使用 INFORMATION_SCHEMA 或 Performance Schema 表来提供对内存缓存数据的视图。启用后,防火墙会根据缓存数据做出操作决策。防火墙数据库可以是 mysql 系统数据库或自定义架构(参见 安装 MySQL Enterprise 防火墙)。

防火墙组配置文件表

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

每个系统和 Performance Schema 表都只能被拥有其 SELECT 权限的帐户访问。

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

  • 名称

    组配置文件名称。

  • 模式

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

  • USERHOST

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

    • 如果该值为 NULL,则防火墙会记录来自该组中任何帐户的语句的白名单规则。

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

default-database.firewall_group_allowlist 列出了已注册的防火墙组配置文件的白名单规则。该表包含以下列(与相应的 Performance Schema firewall_group_allowlist 表具有类似但并不一定相同的列)

  • 名称

    组配置文件名称。

  • 规则

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

  • ID

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

default-database.firewall_membership 列出了已注册的防火墙组配置文件的成员(帐户)。该表包含以下列(与相应的 Performance Schema firewall_membership 表具有类似但并不一定相同的列)

  • GROUP_ID

    组配置文件名称。

  • MEMBER_ID

    该配置文件中一个成员的名称。

防火墙帐户配置文件表

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

每个默认数据库表只能被拥有其 SELECT 权限的帐户访问。任何人都可以访问 INFORMATION_SCHEMA 表。

这些表已弃用,并可能在将来的 MySQL 版本中删除。参见 将帐户配置文件迁移到组配置文件

The default-database.firewall_users 表列出了已注册防火墙帐户配置文件的名称和操作模式。该表具有以下列(对应于 MYSQL_FIREWALL_USERS 表具有类似但并非完全相同的列):

  • USERHOST

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

  • 模式

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

The firewall-database.firewall_whitelist 表列出了已注册防火墙帐户配置文件的白名单规则。该表具有以下列(对应于 MYSQL_FIREWALL_WHITELIST 表具有类似但并非完全相同的列):

  • USERHOST

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

  • 规则

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

  • ID

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

MySQL 企业版防火墙存储过程

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

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

要调用防火墙存储过程,可以在指定防火墙数据库是默认数据库时调用,或用数据库名称限定过程名称。例如,如果 mysql 是防火墙数据库

CALL mysql.sp_set_firewall_group_mode(group, mode);

在 MySQL 9.0 中,防火墙存储过程是事务性的;如果在执行防火墙存储过程期间发生错误,则它到目前为止所做的所有更改都会回滚,并报告错误。

注意

如果您已在自定义模式中安装了 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)

    The 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 Enterprise 防火墙系统变量

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

  • mysql_firewall_database

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

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

  • mysql_firewall_mode

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

    MySQL Enterprise 防火墙是启用(默认)还是禁用。

  • 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 Enterprise 防火墙跟踪是启用还是禁用(默认)。当 mysql_firewall_trace 启用时,对于 PROTECTING 模式,防火墙会将拒绝的语句写入错误日志。

MySQL Enterprise 防火墙状态变量

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