1、审计日志

ProxySQL 2.0.5 引入了审计日志。此功能允许跟踪某些连接活动。要启用此功能,需要配置变量 mysql-auditlog_filename,也就是审计日志的文件名。此变量的默认值为空,也就是默认情况下不启用日志记录。

启用后,将记录以下事件:

在 MySQL 模块上:

    成功认证
认证失败
正常断开
封闭连接
更改架构(COMINITDB) 在管理模块上: 成功认证
认证失败
正常断开
封闭连接

变量

  • mysql-auditlog_filename:此变量定义记录审核事件的审计日志的基本名称。日志文件的文件名将是基本名称,后跟一个 8 位数的逐行编号。 默认值为空字符串()。
  • mysql-auditlog_filesize :此变量定义关闭当前文件并创建新文件时审计日志的最大文件大小。 默认值为 104857600(100MB)。

记录格式

当前实现仅支持一种日志记录格式:JSON。

属性:

  • client_addr :连接到 ProxySQL 的客户端的地址(IP:port)
  • proxy_addr :ProxySQL 正在侦听的绑定接口的地址(IP:端口)(仅适用于 MySQL 模块)
  • event:事件类型。当前可能的值:
    • MySQLClientConnect_OK :成功连接到 MySQL 模块
    • MySQLClientConnect_ERR :与 MySQL 模块的连接失败
    • MySQLClientClose :MySQL 会话被关闭
    • MySQLClientQuit:客户端向 COM_QUITMySQL 模块发送显式信息
    • MySQLClientInitDB:客户端向 COMINIT_DBMySQL 模块发送显式信息
    • AdminConnectOK :成功连接到管理模块
    • AdminConnectERR :与管理模块的连接失败
    • Admin_Close :管理员会话已关闭
    • AdminQuit:客户端向 COMQUIT 管理模块发送显式信息
  • time :事件发生时的人类可读时间,以毫秒为单位
  • timestamp :纪元时间(以毫秒为单位)
  • ssl :布尔值,指定是否使用 SSL
  • schemaname:用于成功建立连接的当前模式
  • username:客户的用户名
  • threadid:分配给客户端的 threadid(会话 ID)
  • creation_time :创建会话时,信息仅在会话关闭时可用
  • duration :创建会话以来的时间(以毫秒为单位),此信息仅在会话关闭时可用
  • extra_info:提供其他信息的属性。当前仅用于描述会话在代码的哪一部分关闭。

审计日志示例

以下是一些审计日志示例。

{\"client_addr\":\"10.0.200.179:51543\",\"event\":\"MySQL_Client_Connect_OK\",\"proxy_addr\":\"0.0.0.0:6033\",\"schemaname\":\"information_schema\",\"ssl\":false,\"thread_id\":8,\"time\":\"2020-08-13 16:08:24.960\",\"timestamp\":1597306104960,\"username\":\"dbmgr\"}

2、通用操作日志

ProxySQL 能够记录通过它的 SQL 语句。并将其记录在日志中

管理员账户登录 ProxySQL:

mysql> SET mysql-eventslog_filename='all_queries.log';
mysql> LOAD MYSQL VARIABLES TO RUNTIME;
mysql> SAVE MYSQL VARIABLES TO DISK;

日志存储路径是:/var/lib/proxysql

接下来,创建查询规则以匹配需要记录的日志记录。如果需要记录所有,则一个简单的规则就可以:

mysql\> INSERT INTO mysql_query_rules (rule_id, active, match_digest, log,apply) VALUES (1,1,\'.\',1,0);

请注意,并不是所有查询都由查询处理器处理。一些特殊,比如:commit、rollback 和 set autocommit 都是在查询处理器之前被处理的。如果要记录此类查询操作,则需要启用全局记录。

mysql> SET mysql-eventslog_default_log=1;
mysql> LOAD MYSQL VARIABLES TO RUNTIME;
mysql> SAVE MYSQL VARIABLES TO DISK;

精确记录

记录 web_opr 这个账户的所有操作记录

  mysql\> INSERT INTO mysql_query_rules (rule_id, active, username, log, apply) VALUES (1, 1, \'web_opr\', 1, 0);

记录对 T2 表的所有 INSERT 语句:

  INSERT INTO mysql_query_rules (rule_id, active, match_digest, log, apply) VALUES (1, 1, \'INSERT.\*t2, 1, 0);

记得要让规则生效,需要载入 RUNTIME,要保存就要 SAVE 到磁盘

 LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

记录格式

在 2.0.6 版中,新变量 mysql-eventslog_format 控制查询日志的记录格式:

变量值:

1:默认值:查询记录在二进制格式文件 请注意,在 2.0.6 版本更好的支持下,引入了一种预处理语句,记录 rowsaffected 和 rowssent。因此,需要使用更新的版本 eventslogreadersample 来读取这些文件。 2 :查询以 JSON 格式记录。

JSON 格式记录

要启用 JSON 格式的日志记录,需要设置 mysql-eventslog_format=2。

SET mysql-eventslog_format=2;
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

示例:

{"client":"127.0.0.1:6966","digest":"0x0CA2979885DD8D2A","duration_us":26126,"endtime":"2020-08-13 15:34:05.674394","endtime_timestamp_us":1597304045674394,"event":"COM_QUERY","hostgroup_id":10,"query":"insert into hrttest.t2 values (123123)","rows_affected":1,"rows_sent":0,"schemaname":"information_schema","server":"10.0.53.210:3307","starttime":"2020-08-13 15:34:05.648268","starttime_timestamp_us":1597304045648268,"thread_id":6,"username":"web_opr"}

{"client":"127.0.0.1:6966","digest":"0x0CA2979885DD8D2A","duration_us":2235,"endtime":"2020-08-13 15:34:15.999281","endtime_timestamp_us":1597304055999281,"event":"COM_QUERY","hostgroup_id":10,"query":"insert into hrttest.t2 values (456456)","rows_affected":1,"rows_sent":0,"schemaname":"information_schema","server":"10.0.53.210:3307","starttime":"2020-08-13 15:34:15.997046","starttime_timestamp_us":1597304055997046,"thread_id":6,"username":"web_opr"}

在目前的版本,这些日志还无法实现保存在数据库表中,但是官方已经计划在后期的版本中实现,期待功能更多更强大的 ProxySQL!

操作总结

mysql> SET mysql-eventslog_filename='all_queries.log';  # 可以指定日志存储绝对路径: set mysql-eventslog_filename='/data/ProxySQL/log/sql.log';
mysql> SET mysql-eventslog_default_log=1;
mysql> SET mysql-eventslog_format=2; mysql> LOAD MYSQL VARIABLES TO RUNTIME;
mysql> SAVE MYSQL VARIABLES TO DISK;



ProxySQL 审计的更多相关文章

  1. ProxySQL 读写分离实践

    前言 ProxySQL是一个高性能的MySQL中间件,拥有强大的规则引擎.具有以下特性: 连接池,而且是 multiplexing 主机和用户的最大连接数限制 自动下线后端DB 延迟超过阀值 ping ...

  2. MHA+ProxySQL实现读写分离高可用

    最近在研究ProxySQL,觉得还挺不错的,所以就简单的折腾了一下,ProxySQL目前也是Percona在推荐的一个读写分离的中间件.关于详细的介绍可以参考官方文档.https://github.c ...

  3. proxysql 系列~审核功能

    一 简介:今天我们来探讨下具体的审核功能 二 平台审计功能 一 proxysql 设置  set mysql-eventslog_filename = '/data/ProxySQL/log/sql. ...

  4. mysql中间件proxysql实现mysql读写分离

    目录 1. mysql实现读写分离的方式 2. ProxySQL简介 3. ProxySQL安装 4. ProxySQL的Admin管理接口 5. 和admin管理接口相关的变量 5.1 admin- ...

  5. MySQL使用ProxySQL实现读写分离

    1 ProxySQL简介: ProxySQL是一个高性能的MySQL中间件,拥有强大的规则引擎.官方文档:https://github.com/sysown/proxysql/wiki/下载地址:ht ...

  6. ProxySQL简介原理及读写分离应用

    MySQL-ProxySQL中间件简介 同类型产品 MySQL Route:是现在MySQL官方Oracle公司发布出来的一个中间件. Atlas:是由奇虎360公发的基于MySQL协议的数据库中间件 ...

  7. MySQL审计audit

    导读: MySQL社区版是不带审计功能的,如果要使用MySQL审计,可以考虑使用中间件(例如proxysql)或者是MariaDB的审计插件.这里以MariaDB的审计插件为例,实现MySQL 5.7 ...

  8. ABP(现代ASP.NET样板开发框架)系列之19、ABP应用层——审计日志

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之19.ABP应用层——审计日志 ABP是“ASP.NET Boilerplate Project (ASP.NET ...

  9. ABP文档 - 审计日志

    文档目录 本节内容: 简介 关于 IAuditingStore 配置 通过特性启用/禁用 注意 简介 维基百科:“一个审计追踪(也叫审计日志)是一个安全相关的时序记录.记录组.和/或记录源和目标,作为 ...

随机推荐

  1. JDBCToolsV3 :DAO

    编写文件和步骤 ①,bean模块:数据类Course,包含数据的class,封装数据类型; ②,DAO:1)定义对数据的操作接口,及规定标准(包含怎样的操作).例如:CourseDAO数据库操作的接口 ...

  2. Mark IntelliJ IDEA 2018.2.3破解

    来源:https://blog.csdn.net/qq_38060935/article/details/90377761

  3. 06 MySQL_数据冗余

    数据冗余--拆分表 如果表设计不合理,可能会出现大量的重复数据,这种现象被称为数据冗余,通过拆分表的形式可以解决此问题 保存集团总部下财务部里面的财务A部的张三工资8000 年龄18 保存集团总部下研 ...

  4. 多校B层冲刺NOIP20211110 字符配对游戏

    原题 问题描述 操场边,运动会没有项目的同学也没闲着,经过几天的研究,他们发明了一个很有意思的字符串配对游戏,两位同学准备两张白纸,第一个同学在纸上写一个整数N和一个由小写字母组成的字符串S,将S重复 ...

  5. openstack 虚拟机网卡被重名为cirename0

    虚拟机网卡被重名为cirename0    在虚拟机挂载多网卡情况下,你在虚拟机上卸载网卡后,再创建新的port挂给虚拟机使用,如果虚拟机不经过重启的话,是不会有任何问题的.但是,如果虚拟机重启了,你 ...

  6. Go语言基础六:结构体和方法

    结构体 结构体是一个由用户定义的复合类型,它由一系列属性组成,每个属性都有自己的类型和值.Go语言中数组可以存储同一类型的数据,但在结构体中用户可以为不同项定义不同(或相同)的数据类型.结构体是值类型 ...

  7. Go语言基础三:基本数据类型和运算符

    Go语言数据类型 与其他编程语言一样,Go语言提供了各种数据类型,可分为基本的数据类型和复杂的数据类型.基本的数据类型就是基本的构造块,例如字符串.数字和布尔值.复杂的数据类型是用户自己定义的结构,由 ...

  8. python闭包函数及装饰器简介

    目录: 闭包函数简介 闭包函数的实际应用 装饰器简介 装饰器初期-完整版 装饰器语法糖 闭包函数简介 1.定义在函数内部的函数(函数的嵌套) 2.内部函数运用外部函数局部名称空间中的变量名 注:函数名 ...

  9. Nginx api接口调用配置

    1 # Nginx api接口调用配置 2 3 # 什么是跨域同源? 4 # 同源策略:协议(http.https.wss--)+域名+端口=一个完整的网站 5 # 跨域:当前所在的网站post(ge ...

  10. Linux、Ubuntu常用命令

    # 文件解压缩 # zip压缩目录(附带目录权限) zip -q -r html.zip /home/html 压缩目录 tar -zcvf pack.tar.gz pack/ #打包压缩为一个.gz ...