10bet网址
MySQL的安全
相关的文档10bet官方网站 下载这个摘录
PDF (Ltr)- 2.3 mb
PDF (A4)- 2.3 mb
HTML下载(TGZ)- 469.0 kb
HTML下载(邮政编码)- 476.8 kb


6.5.7审计日志过滤

请注意

为了让审计日志过滤按照这里的描述工作,审计日志插件以及相应的审计表和功能必须安装。如果插件安装时没有附带基于规则过滤所需的审计表和函数,那么插件将以传统过滤模式运行,详见第6.5.9节,“遗留模式审计日志过滤”.遗留模式是在MySQL 5.7.13之前的过滤行为;也就是说,在引入基于规则的过滤之前。

审计日志过滤属性

审计日志插件具有通过过滤审计事件来控制日志记录的能力:

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

    • 用户帐户

    • 审计事件类

    • 审计事件子类

    • 审计事件字段,如表示操作状态或SQL语句执行情况的字段

  • 审计过滤是基于规则的:

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

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

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

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

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

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

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

  • 在给定会话中,只读的值audit_log_filter_id系统变量指示是否为会话分配筛选器。

请注意

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

SELECT audit_log_filter_set_filter('log_all', '{"filter": {"log": true}}');选择audit_log_filter_set_user(“%”、“log_all”);

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

如前所述,用于审计过滤控制的SQL接口是基于功能的。以下列表简要总结了这些功能:

过滤功能的使用实例和详细信息请参见使用审计日志过滤功能,审计日志功能

审计日志过滤功能约束

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

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

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

    在*上授予超级权限。*用户

    或者,您应该避免授予超级同时允许用户访问特定的过滤功能,"包装器可以定义存储程序。的密匙环函数上下文中描述了这种技术使用通用密匙环函数;可适应具有过滤功能的使用。

  • audit_log如果插件已经安装,但没有创建附带的审计表和函数,那么插件将以旧模式运行。插件在服务器启动时将这些消息写入错误日志:

    [警告]Plugin audit_log reported: '无法打开审计日志过滤表。'[警告]Plugin audit_log reported: '审计日志插件支持一个过滤,目前还没有安装。审计日志插件将在遗留模式下运行,在下一个版本中将被禁用。

    在遗留模式中,只能根据事件帐户或状态进行过滤。有关详细信息,请参见第6.5.9节,“遗留模式审计日志过滤”

使用审计日志过滤功能

在使用审计日志功能之前,请按照说明安装它们第6.5.2节,“安装或卸载MySQL企业审计”.的超级使用这些函数都需要特权。

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

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

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

  • 如果为用户分配了一个筛选器,审计日志将使用该筛选器。

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

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

如果在会话期间发生更改用户操作(请参见mysql_change_user ()),会话的筛选器分配使用相同的规则更新,但针对新用户。

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

假设您希望将默认值更改为仅记录与连接相关的活动(例如,查看connect、change-user和disconnect事件,但不查看用户在连接时执行的SQL语句)。要实现这一点,定义一个过滤器(如这里所示,名为log_conn_events中只允许对事件进行日志记录连接类表示的默认帐户,并将该筛选器分配给该帐户帐户名称:

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

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

要明确地将过滤器分配给特定的用户帐户或帐户,定义过滤器,然后将其分配给相关帐户:

SELECT audit_log_filter_set_filter('log_all', '{"filter": {"log": true}}');选择audit_log_filter_set_user(“user1@localhost”、“log_all”);选择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}}');选择audit_log_filter_set_user(“user1@localhost”、“log_nothing”);

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

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

要删除过滤器,可以这样做:

选择audit_log_filter_remove_filter(“log_nothing”);

删除筛选器还会取消对分配给它的任何用户的筛选器的分配,包括这些用户的任何当前会话。

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

选择audit_log_filter_flush ();
警告

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

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

若要确定是否将筛选器分配给当前会话,请检查只读选项的会话值audit_log_filter_id系统变量。如果该值为0,则不分配过滤器。非零值表示分配的过滤器的内部维护ID:

mysql >选择@@audit_log_filter_id;+-----------------------+ | @@ audit_log_filter_id  | +-----------------------+ | 2  | +-----------------------+