10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 41.1 mb
PDF (A4)- 41.2 mb
PDF (RPM)- 39.8 mb
HTML下载(TGZ)- 9.5 mb
HTML下载(Zip)- 9.6 mb
HTML下载(RPM)- 8.1 mb
手册页(TGZ)- 260.6 kb
手册页(Zip)- 371.7 kb
信息(Gzip)- 3.9 mb
信息(邮政编码)- 3.9 mb
本手册节选

6.4.5.7审计日志过滤

请注意

要像这里描述的那样进行审计日志过滤,请使用审计日志插件以及附带的审计表和udf必须安装。如果安装了插件,但没有安装附带的审计表和udf,则插件将在遗留过滤模式下操作,如章节6.4.5.9,“遗留模式审计日志过滤”.遗留模式是过滤行为,因为它是在MySQL 5.7.13之前;也就是说,在引入基于规则的过滤之前。

审计日志过滤属性

审计日志插件可以通过过滤来控制审计事件的日志记录:

  • 审计事件可以使用以下特征进行过滤:

    • 用户帐户

    • 审计事件类

    • 审计事件子类

    • 事件字段的值,例如指示操作状态或已执行SQL语句的字段

  • 审计过滤基于规则:

    • 筛选器定义创建一组审计规则。可以根据刚才描述的特征配置定义,以包括或排除用于日志记录的事件。

    • 除了现有的事件记录功能外,筛选规则还具有阻止(中止)合格事件执行的功能。

    • 可以定义多个过滤器,并且可以将任何给定的过滤器分配给任意数量的用户帐户。

    • 可以定义一个默认筛选器,用于没有显式分配筛选器的任何用户帐户。

    有关编写过滤规则的信息,请参见6.4.5.8节“编写审计日志过滤器定义”

  • 可以使用基于用户定义函数(udf)的SQL接口定义、显示和修改审计过滤器。

  • 中的表中存储审计筛选器定义mysql系统数据库。

  • 在给定会话中,read-only的值audit_log_filter_id系统变量指示是否已将筛选器分配给会话。

请注意

缺省情况下,基于规则的审计日志过滤不记录任何用户的可审计事件。要记录所有用户的所有可审计事件,请使用以下语句,这些语句将创建一个简单的过滤器来启用日志记录并将其分配给默认帐户:

SELECT audit_log_filter_set_filter('log_all', '{"filter": {"log": true}}');SELECT audit_log_filter_set_user('%', 'log_all');

分配给的筛选器用于来自没有显式分配筛选器的任何帐户的连接(最初对所有帐户为真)。

如前所述,审计过滤控制的SQL接口是由udf实现的。以下列表简要总结了这些udf:

有关过滤功能的使用示例和完整详细信息,请参见使用审计日志过滤功能,审计日志功能

审计日志过滤约束

审计日志过滤功能受以下约束:

  • 要使用任何过滤函数,请使用audit_log必须启用插件,否则将发生错误。此外,审计表必须存在,否则会发生错误。安装audit_log插件及其附带的udf和表,参见章节6.4.5.2“安装或卸载MySQL企业审计”

  • 要使用任何过滤功能,用户必须拥有超级特权或发生错误。授予超级对用户帐户的特权,使用以下语句:

    格兰特超级*。*用户

    或者,您是否愿意避免授予超级特权,同时仍然允许用户访问特定的过滤功能,包装器存储程序可以被定义。中的密匙环udf上下文中描述了该技术使用通用密匙环功能;它可以用于过滤udf。

  • audit_log如果安装了插件,但是没有创建相应的审计表和函数,则插件以遗留模式运行。插件在服务器启动时将这些消息写到错误日志中:

    [警告]Plugin audit_log报告:'未能打开审计日志过滤表。'[警告]插件audit_log报告:'审计日志插件支持过滤,尚未安装。审计日志插件将以传统模式运行,在下一个版本中将禁用。”

    在遗留模式中,只能基于事件帐户或状态进行过滤。详细信息请参见章节6.4.5.9,“遗留模式审计日志过滤”

使用审计日志过滤功能

在使用审计日志用户定义函数之前,请参考章节6.4.5.2“安装或卸载MySQL企业审计”.的超级使用这些函数都需要特权。

审计日志过滤功能通过提供一个接口来创建、修改和删除过滤器定义,并为用户帐户分配过滤器,从而支持过滤控制。

筛选器定义如下JSON值。有关使用JSON数据在MySQL,见第11.5节“JSON数据类型”.本节将展示一些简单的筛选器定义。有关筛选器定义的详细信息,请参见6.4.5.8节“编写审计日志过滤器定义”

当连接到达时,审计日志插件通过在当前过滤器分配中搜索用户帐户名来确定为新会话使用哪个过滤器:

  • 如果给用户分配了一个过滤器,审计日志就使用这个过滤器。

  • 否则,如果不存在特定于用户的筛选器分配,但有分配给默认帐户的筛选器(),审计日志使用默认过滤器。

  • 否则,审计日志不会从会话中选择审计事件进行处理。

如果在会话期间发生更改用户操作(请参阅mysql_change_user ()),会话的过滤器分配使用相同的规则更新,只是针对新用户。

默认情况下,没有帐户分配过滤器,因此任何帐户都不会发生可审计事件的处理。

假设您希望将默认值改为只记录与连接相关的活动(例如,查看连接、更改用户和断开连接事件,而不是用户在连接时执行的SQL语句)。要实现这一点,定义一个名为log_conn_events中事件的日志记录连接类,并将该筛选器分配给默认帐户,该帐户由帐户名称:

设置@f = '{“过滤器”:{“类”:{“名称”:“连接”}}}';SELECT audit_log_filter_set_filter('log_conn_events', @f);SELECT audit_log_filter_set_user('%', 'log_conn_events');

现在,审计日志对来自任何没有明确定义过滤器的帐户的连接使用这个默认帐户过滤器。

若要显式地将筛选器分配给特定的用户帐户,请定义筛选器,然后将其分配给相关帐户:

SELECT audit_log_filter_set_filter('log_all', '{"filter": {"log": true}}');SELECT audit_log_filter_set_user('user1@localhost', 'log_all');SELECT audit_log_filter_set_user('user2@localhost', 'log_all');

现在启用了完整的日志记录user1@localhost而且user2@localhost.继续使用默认帐户筛选器筛选来自其他帐户的连接。

要解除用户帐户与其当前筛选器的关联,要么取消分配筛选器,要么分配不同的筛选器:

  • 从用户帐户中取消分配过滤器:

    选择audit_log_filter_remove_user(“user1@localhost”);

    帐户的当前会话过滤不受影响。来自该帐户的后续连接将使用默认帐户筛选器(如果有的话)进行筛选,否则不会记录日志。

  • 为用户帐户分配不同的过滤器:

    SELECT audit_log_filter_set_filter('log_nothing', '{"filter": {"log": false}}');SELECT audit_log_filter_set_user('user1@localhost', 'log_nothing');

    帐户的当前会话过滤不受影响。来自该帐户的后续连接将使用新的筛选器进行筛选。对于这里显示的筛选器,这意味着不记录来自的新连接user1@localhost

对于审计日志过滤,用户名和主机名比较区分大小写。这与特权检查的比较不同,后者的主机名比较不区分大小写。

要移除过滤器,请执行以下操作:

选择audit_log_filter_remove_filter(“log_nothing”);

删除筛选器还会将其从已分配给其的任何用户中取消分配,包括这些用户的任何当前会话。

中所描述的过滤udf会立即影响审计过滤并更新审计日志表mysql存储过滤器和用户帐户的系统数据库(请参阅审计日志表).也可以直接使用语句修改审计日志表插入更新,删除,但这些变化不会立即影响过滤。若要刷新更改并使其可操作,请调用audit_log_filter_flush ()

选择audit_log_filter_flush ();
警告

audit_log_filter_flush ()应该仅在直接修改审计表后使用,以强制重新加载所有过滤器。否则,应该避免使用此函数。实际上,它是卸载和重新加载的简化版本audit_log插件与卸载插件+安装插件

audit_log_filter_flush ()影响所有当前会话,并将它们从以前的筛选器中分离出来。当前会话不再被记录,除非它们断开连接并重新连接,或执行更改用户操作。

要确定是否为当前会话分配了过滤器,请检查read-only的会话值audit_log_filter_id系统变量。如果值为0,表示没有分配过滤器。非零值表示分配过滤器的内部维护ID:

SELECT audit_log_filter_id;+-----------------------+ | @@ audit_log_filter_id  | +-----------------------+ | 2  | +-----------------------+