以下部分提供了对 MySQL Enterprise Firewall 元素的参考:
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 开始)、PROTECTING
、RECORDING
和RESET
。有关它们的详细信息,请参阅防火墙概念。
该mysql.firewall_whitelist
表列出了已注册防火墙帐户配置文件的白名单规则。该表具有以下列(相应的
INFORMATION_SCHEMA.MYSQL_FIREWALL_WHITELIST
表具有相似但不一定相同的列):
USERHOST
帐户配置文件名称。每个帐户名的格式都是 .
user_name
@host_name
RULE
规范化语句,指示配置文件可接受的语句模式。配置文件白名单是其规则的集合。
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()
PROTECTING
sp_reload_firewall_rules()
PROTECTING
sp_set_firewall_mode(
user
,mode
)如果配置文件尚未注册,则在向防火墙注册配置文件后,此存储过程会为防火墙帐户配置文件建立操作模式。该过程还根据需要调用防火墙管理功能,以在缓存和持久存储之间传输防火墙数据。即使
mysql_firewall_mode
系统变量是,也可以调用此过程OFF
,尽管在启用防火墙之前设置配置文件的模式没有操作效果。参数:
user
:受影响的帐户配置文件的名称, 格式为字符串。user_name
@host_name
mode
:配置文件的操作模式,作为字符串。允许的模式值为OFF
、DETECTING
、PROTECTING
、RECORDING
和RESET
。有关它们的详细信息,请参阅防火墙概念。
将帐户配置文件切换到任何模式,但
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 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';
此函数管理帐户配置文件缓存并建立配置文件操作模式。它需要
SUPER
特权。例子:
SELECT set_firewall_mode('fwuser@localhost', 'RECORDING');
防火墙杂项功能
这些函数执行各种防火墙操作:
MySQL Enterprise Firewall 支持以下系统变量。使用它们来配置防火墙操作。除非安装了防火墙,否则这些变量不可用(请参阅 第 6.4.5.2 节,“安装或卸载 MySQL 企业防火墙”)。
-
命令行格式 --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[={OFF|ON}]
介绍 5.6.24 系统变量 mysql_firewall_mode
范围 全球的 动态的 是的 类型 布尔值 默认值 ON
MySQL Enterprise Firewall 是启用(默认)还是禁用。
-
命令行格式 --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 Enterprise Firewall 支持以下状态变量。使用它们来获取有关防火墙运行状态的信息。除非安装了防火墙,否则这些变量不可用(请参阅第 6.4.5.2 节,“安装或卸载 MySQL 企业防火墙”)。MYSQL_FIREWALL
每当安装插件或启动服务器时,防火墙状态变量都会设置为 0
。其中许多被
mysql_firewall_flush_status()
函数重置为零(请参阅MySQL Enterprise Firewall Administrative Functions)。