mysql启用审计功能

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 【前言】其实mysql数据库本身并没有审计功能的,在实际的工作中往往会需要用到这方面的功能,公司最近就出现了这么一个让人很烦人的场景:pos系统有六台应用连接数据库,且数据库本身跟其他系统也有关联,最近业务反馈偶尔会出现系统日结翻倍的情况,开发找到了导致日结出现...

【前言】其实mysql数据库本身并没有审计功能的,在实际的工作中往往会需要用到这方面的功能,公司最近就出现了这么一个让人很烦人的场景:pos系统有六台应用连接数据库,且数据库本身跟其他系统也有关联,最近业务反馈偶尔会出现系统日结翻倍的情况,开发找到了导致日结出现问题的SQL语句,但是不能确认是从哪台应用发起产生的,这时候感觉很无力,所以找到了数据库管理员;

 

【方法】业务需要找到哪台应用发出的SQL语句,通过查找发现可以通过init-connect和binlog的方法进行mysql的审计;

思路如下:

【1】mysql binlog记录了所有对数据库实际执行的sql语句,及其执行时间和connection_id;

【2】init-connect记录connection_id对应的详细用户信息。

【3】找到binlog的语句后,根据connection_id便可找到对应的用户连接信息

 

【操作步骤】

【1】修改参数文件,添加设置:init-connect='insert into accesslog.accesslog values(connection_id(),now(),user(),current_user());'

【2】创建存放信息的数据库

create database logDB;

【3】创建存放信息的表

CREATE TABLE logDB.log (`id` int(11) primary key auto_increment, `time` timestamp, `localname` varchar(30), `matchname` varchar(30))

【4】所有需要审计的用户进行检查,不能具有Super用户权限

【5】重启数据库

 

【结合binlog进行排查的步骤】

【1】查找时间范围内修改过zdyjb_day表的SQL语句:

mysqlbinlog --start-datetime="2015-8-25 09:00:00" --stop-datetime="2015-9-1 09:00:00" mysql-bin.002320| grep 'zdyjb_day' -B 5  > ab.log

 

【2】查找这个时间范围内执行UPDATE的语句

BEGIN
/*!*/;
# at 33871395
#150901  8:37:54 server id 1  end_log_pos 33871572     Query    thread_id=99127    exec_time=0    error_code=0
SET TIMESTAMP=1441067874/*!*/;
UPDATE zdyjb_day SET zbje='6000',xgrq='1441067874'
--

 

【3】根据thread_id查找用户的信息

mysql> select * from logDB.log where id=436 ;
+-----+---------------------+---------------------+-----------+
| id  | time                | localname           | matchname |
+-----+---------------------+---------------------+-----------+
| 436 | 2015-08-31 22:44:14 | ipos@192.168.0.15 | ipos@%    |
+-----+---------------------+---------------------+-----------+
1 row in set (0.00 sec)

通过日志可以看到执行的用户为ipos@%,从192.168.0.15这台登录的,一下子整个问题排查的范围少了很多,很快就能定位到问题的根源了;

 

【问题总结】

【1】启用init-connect会不会降低服务器的性能?

从原理上每个用户的连接成功并往数据库做变更的时候才会记录,所以整个插入其实并不会消耗很大的资源,占用的资源主要为IO和存储空间,而且也只是在出现问题期间启用;

 

【2】启用init-connect的数据记录全面吗

不会记录Super权限的用户,所以该记录是部分的;

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
JSON 安全 关系型数据库
MySQL 7.0 功能特性
MySQL 是一款广泛应用于各种 Web 应用程序和企业级系统的关系型数据库管理系统。MySQL 7.0 是 MySQL 数据库的一个重要版本,引入了许多令人兴奋的功能特性,提升了性能、安全性和可用性。本篇博客将介绍 MySQL 7.0 的一些主要功能特性。
81 0
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL企业版与标准版功能对比:如何选择适合您的版本?
随着数字化时代的到来,企业对于数据处理的需求越来越高,而数据库作为数据处理的核心,其性能和成本成为了企业关注的焦点。阿里云全新推出的PolarDB MySQL企业版和标准版,以全新的架构和优化,为企业提供了高性能、低成本的数据库解决方案。但在功能上,这两个版本有很多差异,我们该如何选择呢?
59 2
|
8月前
|
SQL Cloud Native 关系型数据库
找不到目标用户?云原生数仓AnalyticDB MySQL秒级圈人功能大揭秘
营销域中的洞察分析/智能圈人/经营报表等场景是OLAP分析型数据库的重要应用场景,阿里云瑶池旗下的云原生数据仓库AnalyticDB MySQL在淘宝、饿了么、菜鸟、优酷、盒马等业务的营销场景有比较长时间的积累和沉淀,我们将通过一系列文章来介绍AnalyticDB MySQL在营销域数据产品中的落地与应用,之前文章介绍了“漏斗分析”的实现与应用,本文主要介绍“秒级圈人&画像分析”的实现与应用。
|
3月前
|
JavaScript 关系型数据库 MySQL
基于JavaWeb和mysql实现网上书城前后端管理系统(源码+数据库+开题报告+论文+答辩技巧+项目功能文档说明+项目运行指导)
基于JavaWeb和mysql实现网上书城前后端管理系统(源码+数据库+开题报告+论文+答辩技巧+项目功能文档说明+项目运行指导)
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL版:强大功能,超高性能,满足企业级需求
PolarDB MySQL版:强大功能,超高性能,满足企业级需求 在当今信息化社会,企业对于数据处理的需求日益增长,如何选择一款高性能、高可靠性且成本合理的数据库成为了一大挑战。阿里巴巴的PolarDB MySQL版应运而生,它不仅兼容MySQL,还具备传统数据库所不具备的优势,为企业提供了更高效、更可靠的数据处理方案。
107 3
|
4月前
|
关系型数据库 MySQL Shell
百度搜索:蓝易云【Shell脚本实现Mysql持续kill功能】
将以上代码保存为一个名为 `kill_mysql.sh`的文件,并确保该文件具有执行权限(可以使用 `chmod +x kill_mysql.sh`命令赋予执行权限)。然后在终端中运行该脚本即可实现MySQL的持续kill功能。
49 0
|
4月前
|
SQL Java 关系型数据库
在IDEA中配置MySQL数据库连接以及在使用mybatis时设置sql语句的代码提示功能
在IDEA中配置MySQL数据库连接以及在使用mybatis时设置sql语句的代码提示功能
|
4月前
|
关系型数据库 MySQL 数据库连接
只用了nacos配置功能,多个nacos server连同一个mysql数据库会有啥问题吗?
只用了nacos配置功能,多个nacos server连同一个mysql数据库会有啥问题吗?
109 6
|
6月前
|
SQL 监控 关系型数据库
数据库高效“体检”必备!详解阿里云AnalyticDB MySQL一键诊断功能
AnalyticDB MySQL诊断监控平台则是一套全自研的、从零开始搭建的并紧密贴合分析型系统特征的诊断平台,包含数据的采集(诊断日志和监控数据)、数据缓存(削峰填谷)、清洗转换以及存储等,最终以多种服务形式提供实时的告警、监控、负载洞察、查询分析和诊断等功能。
|
7月前
|
SQL Oracle 关系型数据库
java实现oracle和mysql的group by分组功能|同时具备max()/min()/sum()/case when 函数等功能
java实现oracle和mysql的group by分组功能|同时具备max()/min()/sum()/case when 函数等功能