MySQL监视——审计日志

2023年 10月 23日 18.8k 0

本文转载自徐老师,正文如下:

MySQL的企业版中提供了审计日志功能。通过审计日志可以记录用户的登录、连接、执行的查询等行为,输出XML格式或者JSON格式的日志文件。

审计日志功能使用“audit_log”服务器插件和其他的组件实现,提供基于规则的过滤功能,并且能够将规则分别适用于不同的用户。日志的内容包括如下:

  • 系统发生的错误

  • 客户端的连接与断开

  • 连接时执行的查询与操作

  • 用户访问了哪些数据库和表

安装

安装审计日志时,需要使用MySQL共享路径"share"下的安装脚本“audit_log_filter_win_install.sql”或“audit_log_filter_linux_install.sql”。脚本将安装服务器插件“audit_log”,该插件用于审计事件,并决定是否将事件记入日志。用户自定义函数用于定义过滤规则、控制日志的行为、加密密码、日志文件的读取。mysql库中的系统表“audit_log_filter”用于保存过滤规则,“audit_log_user”用于保存用户的数据,如果这两个表不存在,审计插件将使用传统的基于策略的方式记录日志。用户可以通过系统变量对审计日志进行配置,还可以利用状态变量查看操作信息。用户需要注意,审计日志一旦安装,将一直驻留在服务器上,如果希望卸载,需要执行一系列的语句,详细请访问官网手册。

配置审计日志

用户可以在服务器启动时,通过“audit_log”选项启用或禁用审计日志插件,并可以设置“FORCE_PLUS_PERMANENT”防止插件在服务器运行时被删除。日志名称默认为“audit.log”,保存在服务器的数据路径下,用户可以通过“audit_log_file”系统变量在服务器启动时,对其名称和路径进行更改。“audit_log_rotate_on_size”选项用于配置日志轮换,如果该选项值大于0,日志文件达到所设定的值大小时,将进行轮换。开启审计日志会对服务器的性能产生一定的影响,用户可以通过配置“audit_log_strategy”选项值,调整其对性能的影响,以达到合规和性能的平衡。

开启过滤

开启过滤时,首先,需要定义一个过滤器“audit_log_filter_set_filter(名称,定义)”,定义需要使用JSON格式,过滤器将保存在mysql.audit_log_filter表中。其次,将过滤器赋予一个用户,使用“audit_log_filter_set_user(用户名,过滤器名)”。注意,用户名使用“user_name@host_name”格式或者使用“%”用于其他任何没有赋予过滤器的用户,该信息将保存在“mysql.audit_log_user”表中。

日志格式

日志包含新旧两种XML格式和JSON格式

XML格式




    2019-10-03T14:06:33 UTC
    1_2019-10-03T14:06:33
    Audit
    1
    1
    /usr/local/mysql/bin/mysqld
    --socket=/usr/local/mysql/mysql.sock
    --port=3306
    i686-Linux
    5.7.21-log


    2019-10-03T14:09:38 UTC
    2_2019-10-03T14:06:33
    Connect
    5
    0
    0
    root

    localhost
    127.0.0.1
    connect
    SSL/TLS


    _pid
    42794

    ...

    program_name
    mysqladmin


    root

    test



    ...



    2019-10-03T14:09:38 UTC
    6_2019-10-03T14:06:33
    Query
    5
    0
    0
    root[root] @ localhost [127.0.0.1]

    localhost
    127.0.0.1
    drop_table
    DROP TABLE IF EXISTS t




    2019-10-03T14:09:45 UTC
    12_2019-10-03T14:06:33
    NoAudit
    1

    JSON格式

      [
      {
      "timestamp": "2019-10-03 13:50:01",
      "id": 0,
      "class": "audit",
      "event": "startup",
      ...
      },
      {
      "timestamp": "2019-10-03 15:02:32",
      "id": 0,
      "class": "connection",
      "event": "connect",
      ...
      },
      ...
      {
      "timestamp": "2019-10-03 17:37:26",
      "id": 0,
      "class": "table_access",
      "event": "insert",
      ...
      }
      ...
      ]

      日志中记录的值

      审计日志中的时间戳“TIMESTAMP”使用UTC。

      “NAME”表示事件的类型,包括:

      • “Connect”:登录事件

      • “Quit”:客户端连接断开

      • “Query”:执行的SQL语句

      • “Audit”/“NoAudit”审计的起始点

      “STATUS”提供执行命令的状态,代码值与“SHOW ERRORS”相同。

      以上内容是关于MySQL审计日志功能的简介。

      文章至此。

      相关文章

      Oracle如何使用授予和撤销权限的语法和示例
      Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
      下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
      社区版oceanbase安装
      Oracle 导出CSV工具-sqluldr2
      ETL数据集成丨快速将MySQL数据迁移至Doris数据库

      发布评论