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

6.4.5.4 MySQL 企业防火墙参考

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

MySQL 企业防火墙表

MySQL Enterprise Firewall 使用系统数据库中的表来维护配置文件信息以 mysql进行持久存储,并使用INFORMATION_SCHEMA表来提供内存中缓存数据的视图。启用后,防火墙会根据缓存数据做出操作决策。

每个mysql系统数据库表只能由对其具有 SELECT权限的帐户访问。任何人都可以访问这些 INFORMATION_SCHEMA表。

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

  • USERHOST

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

  • MODE

    配置文件的当前操作模式。允许的模式值为OFF, DETECTING(从 MySQL 5.6.26 开始)、 PROTECTINGRECORDINGRESET。有关它们的详细信息,请参阅防火墙概念

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

  • USERHOST

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

  • RULE

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

MySQL 企业防火墙存储过程

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

防火墙存储过程是在 mysql系统数据库中创建的。要调用防火墙存储过程,请mysql 在默认数据库时执行此操作,或者使用数据库名称限定过程名称。例如:

CALL mysql.sp_set_firewall_mode(user, mode);

以下列表描述了每个防火墙存储过程:

  • 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

  • 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 whitelist is empty. |
    +----------------------------------------------------------------------+
    1 row in set (0.02 sec)
    
    Query OK, 0 rows affected (0.02 sec)
MySQL 企业防火墙管理功能

MySQL Enterprise Firewall 管理功能为较低级别的任务提供 API,例如将防火墙缓存与底层系统表同步。

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

防火墙帐户配置文件功能

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

  • read_firewall_users(user, mode)

    此聚合函数通过SELECT 表上的语句更新防火墙帐户配置文件缓存mysql.firewall_users 。它需要 SUPER特权。

    例子:

    SELECT read_firewall_users('fwuser@localhost', 'RECORDING')
    FROM mysql.firewall_users;
  • read_firewall_whitelist(user, rule)

    此聚合函数通过 SELECT表上的 语句更新指定帐户配置文件的记录语句缓存mysql.firewall_whitelist。它需要SUPER 特权。

    例子:

    SELECT read_firewall_whitelist('fwuser@localhost', fw.rule)
    FROM mysql.firewall_whitelist AS fw
    WHERE USERHOST = 'fwuser@localhost';
  • set_firewall_mode(user, mode)

    此函数管理帐户配置文件缓存并建立配置文件操作模式。它需要 SUPER特权。

    例子:

    SELECT set_firewall_mode('fwuser@localhost', 'RECORDING');
防火墙杂项功能

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

MySQL 企业防火墙系统变量

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

  • mysql_firewall_max_query_size

    命令行格式 --mysql-firewall-max-query-size=#
    介绍 5.6.24
    删除 5.6.26
    系统变量 mysql_firewall_max_query_size
    范围 全球的
    动态的
    类型 整数
    默认值 4096
    最小值 0
    最大值 4294967295
    单元 字节

    可以插入 MySQL Enterprise Firewall 缓存中的规范化语句的最大大小。长度超过此大小的规范化语句将被截断。如果当前用户的防火墙模式为 ,截断的语句将被丢弃,如果模式为 则被 RECORDING拒绝 PROTECTING

    mysql_firewall_max_query_size 在 MySQL 5.6.26 中被删除。 max_digest_length应该设置得足够大以避免语句截断。

  • mysql_firewall_mode

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

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

  • mysql_firewall_trace

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

    MySQL Enterprise Firewall 跟踪是启用还是禁用(默认)。启用时, mysql_firewall_trace具有以下效果:

    • firewall_trace.txt在 MySQL 5.6.24 中,防火墙在数据目录中 写入一个名为的文件 。

    • 在 MySQL 5.6.25 及更高版本中,对于 PROTECTING模式,防火墙将拒绝的语句写入错误日志。

MySQL 企业防火墙状态变量

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