当前位置: 首页 > news >正文

mysql数据库审计(1)

1.数据库审计工具介绍及选择

1.1. 数据库审计工具介绍

  • MySQL 分支的审计功能包含在企业版中,社区版可以使用其他分支提供的工具。
  • 目前已知的审计工具,社区版本有 Percona  Percona Server Audit Log MariaDB  MariaDB Audit Plugin  McAfee  mysql-audit
  • 不过 McAfee 的插件兼容性较差,审计不同版本的 MySQL 时需要执行脚本获取并指定偏移量,且发布时间较早、无人维护,不推荐使用。
  • MariaDB 版本的插件 MariaDB Audit Plugin  MySQL 分支兼容性较好,而且输出清爽,可以还能用户记录错误的操作命令。
  • Percona 的插件 Percona Server Audit Log,随 Percona Server 各版本分发,日志可以指定4种格式,过滤规则较多。

1.2. 数据库审计工具选择

  • MariaDB  Percona 版本的插件都随版本发布,都有 5.7 版本的插件,选择哪个插件需要对比一下功能特性及压测性能。

2. Percona Audit Log

2.1. Percona Audit Log 下载

  • Percona Audit Log Percona Server 一起分发,故需下载 Percona Server MySQL

2.2. Percona Audit Log 安装

  • 解压 Percona Server,上传插件

1

2

3

4

5

cp Percona-Server-5.7.28-31-Linux.x86_64.ssl1:111/lib/mysql/plugin/audit_log.so /usr/local/mysql/lib/plugin/

INSTALL PLUGIN audit_log SONAME 'audit_log.so';

ERROR 1126 (HY000): Can't open shared library '/usr/local/mysql/lib/plugin/percona_audit_log.so' (errno: 11 /usr/local/mysql/lib/plugin/percona_audit_log.so: undefined symbol: plugin_thdvar_safe_update)

  • 报错:undefined symbol: plugin_thdvar_safe_update
  • Google 一下,有相关主题:Percona Audit on Oracle MySQL EE: "undefined symbol: plugin_thdvar_safe_update",有回复:
    • Plugin .so files from a specific packages are not supposed to work with other packages or third-party software.
      And in general our plugins are working only with Percona Server, not with Oracle MySQL.
    • Percona 官方技术人员回复不适用于第三方分支。

另一篇文章给出了判断当前数据库是否可用的方法(Trying to install Audit_log Plugin on MySQL

  • nm /usr/local/mysql/bin/mysqld | grep plugin_thdvar_safe_update
  • 输出为空,则编译时缺少该参数,不可用。如果想用,需要在编译时加入选项编译 plugin_thdvar_safe_update 参数。
  • MySQL输出如下

  • Percona Server 输出如下

2.3. Percona Audit 插件在 Oracle MySQL 分支不可用,所以选择 MariaDB 分支审计插件。

3. MariaDB Audit Plugin

3.1. MariaDB Audit Plugin 的简介

  • server_audit插件记录服务器的活动。对于每个客户端会话,它记录谁连接到服务器(即用户名和主机),执行了哪些查询,访问了哪些表以及更改了服务器变量。此信息存储在循环日志文件中,或者可以发送到本地syslogd

3.2. MariaDB Audit Plugin 的安装

3.2.1. 插件下载

  • 插件 server_audit.so 包含在 MariaDB 分支程序中,下载 5.x 版本的 MariaDB server,解压后即可找到。

3.2.2. 插件安装

  • 执行命令,获取插件目录路径

SHOW GLOBAL VARIABLES LIKE 'plugin_dir';

+---------------+--------------------------+

| Variable_name | Value                    |

+---------------+--------------------------+

| plugin_dir    | /usr/lib64/mysql/plugin/ |

+---------------+--------------------------+

  • 将插件拷贝到插件目录

cp server_audit.so /usr/lib64/mysql/plugin/

  • 安装插件

INSTALL PLUGIN server_audit SONAME 'server_audit.so';

show plugins;

+----------------------------+----------+--------------------+-----------------+---------+

| Name                       | Status   | Type               | Library         | License |

+----------------------------+----------+--------------------+-----------------+---------+

|...                         |          |                    |                 |         |

| SERVER_AUDIT               | ACTIVE   | AUDIT              | server_audit.so | GPL     |

+----------------------------+----------+--------------------+-----------------+---------+

3.2.3. 插件配置

  • 在安装并加载了审计插件之后,MariaDB中将有一些新的全局变量。
  • 这些可用于配置许多与审核服务器有关的组件,限制和方法。您可以设置与日志相关的这些变量,例如它们的位置,大小限制,旋转参数和日志信息的方法。
  • 还可以设置要记录的信息,例如连接,断开连接和失败的连接尝试。
  • 还可以使用审核插件日志查询,对表的读写访问权限。为了不使您的日志超载,可以根据用户列表配置审核插件。
  • 可以在日志中包括或排除特定用户的活动。

SHOW GLOBAL VARIABLES LIKE 'server_audit%';

+-------------------------------+-----------------------+

| Variable_name                 | Value                 |

+-------------------------------+-----------------------+

| server_audit_events           | CONNECT,QUERY,TABLE   |

| server_audit_excl_users       |                       |

| server_audit_file_path        | server_audit.log      |

| server_audit_file_rotate_now  | OFF                   |

| server_audit_file_rotate_size | 1000000               |

| server_audit_file_rotations   | 9                     |

| server_audit_incl_users       |                       |

| server_audit_logging          | ON                    |

| server_audit_mode             | 0                     |

| server_audit_output_type      | file                  |

| server_audit_query_log_limit  | 1024                  |

| server_audit_syslog_facility  | LOG_USER              |

| server_audit_syslog_ident     | mysql-server_auditing |

| server_audit_syslog_info      |                       |

| server_audit_syslog_priority  | LOG_INFO              |

+-------------------------------+-----------------------+

  •  开启插件,需要用户具有 SUPER 权限。

SET GLOBAL server_audit_logging=ON;

  • 创建审计日志文件存放路径

# 在 mysql datadir 中创建 auditlog 目录

mkdir -p auditlog

chown -R mysql:mysql auditlog

chmod 750 auditlog

  • 设置审计日志文件存放路径

set global server_audit_file_path='/home/mysql/mysql57_3306/auditlog/server_audit.log';

  • 设置审计日志的相关参数

1

2

3

4

5

6

7

8

set global server_audit_events='CONNECT,QUERY,TABLE,QUERY_DDL,QUERY_DML,QUERY_DCL';

set global server_audit_output_type= file;

set global server_audit_logging = 1;

set global server_audit_file_rotate_size = 500000000;

set global server_audit_file_rotations = 3;

set global server_audit_incl_users = '';

set global server_audit_excl_users = '';

set global server_audit_query_log_limit = 4096;

3.2.4. 卸载

UNINSTALL PLUGIN server_audit;

  • 防止被卸载,如果设置如下选项,需要注释配置文件后重启 MySQL 才可以卸载审计插件。

[mysqld]

server_audit=FORCE_PLUS_PERMANENT

3.2.4. 配置文件参数

1

2

3

4

5

6

7

8

9

loose-server_audit_file_path='/data/mysql/mysql57_3306/auditlog/server_audit.log'

loose-server_audit_events='CONNECT,QUERY,TABLE,QUERY_DDL,QUERY_DML,QUERY_DCL'

loose-server_audit_output_type= file

loose-server_audit_logging = 1

loose-server_audit_file_rotate_size = 500000000

loose-server_audit_file_rotations = 3

loose-server_audit_incl_users = ''

loose-server_audit_excl_users = ''

loose-server_audit_query_log_limit = 4096

3.3. MariaDB Audit Plugin 的日志格式

  • 审计插件记录用户对MariaDB及其对象的访问。审核跟踪(即审核日志)是一组记录,以纯文本格式写为文件的字段列表。
  • 日志中的字段用逗号分隔。插件自己的日志文件使用的格式与它记录到系统日志时使用的格式略有不同,因为它具有自己的标准格式。日志记录到插件自己文件的一般格式如下:

[timestamp],[serverhost],[username],[host],[connectionid],[queryid],[operation],[database],[object],[retcode]

  • 如果将 server_audit_output_type 变量设置为 syslog 而不是默认值 file,则审核日志文件格式将如下所示:

日志项

描述

[timestamp][syslog_host][syslog_ident]:[syslog_info][serverhost],[username],[host],[connectionid],[queryid],[operation],[database],[object],[retcode]

timestamp

事件发生的时间。如果使用syslog,则格式由 syslogd 定义

syslog_host

接收系统日志条目的主机

syslog_ident

用于标识系统日志条目,包括MariaDB服务器

syslog_info

用于提供标识系统日志条目的信息

serverhost

MariaDB服务器主机名

username

连接的用户

host

用户连接的主机

connectionid

相关操作的连接标识号

queryid

查询ID号,可用于查找关系表事件和相关查询。对于TABLE事件,将添加多行

operation

记录的动作类型:CONNECT,QUERY,READ,WRITE,CREATE,ALTER,RENAME,DROP

database

活动数据库(由 USE 设置)

object

对QUERY事件或TABLE事件的表名执行查询

retcode

返回已记录操作的代码

  • 各种事件将导致不同的审核记录。某些事件将不会为某些字段返回值(例如,当连接到服务器时未设置活动数据库时)。
  • 以下是连接事件输出的通用示例,其中占位符代表数据。这些是用户连接,断开连接或尝试连接服务器失败的事件。

相关文章:

mysql数据库审计(1)

1.数据库审计工具介绍及选择 1.1. 数据库审计工具介绍 MySQL 分支的审计功能包含在企业版中,社区版可以使用其他分支提供的工具。目前已知的审计工具,社区版本有 Percona 的 Percona Server Audit Log 、MariaDB 的 MariaDB Audit Plugin 和 McAfee 的…...

Kafka---kafka概述和kafka基础架构

kafka概述和kafka基础架构 文章目录kafka概述和kafka基础架构Kafka定义消息队列传统消息队列应用场景缓存/消峰解耦异步通信消息队列的两种模式点对点模式发布/订阅模式kafka基础架构producerConsumerConsumer Group(CG)BrokerTopicPartitionReplicaLead…...

《JavaEE初阶》多线程基础

《JavaEE初阶》多线程基础 文章目录《JavaEE初阶》多线程基础前言:多线程的概念简单创建线程并运行:简述Thread中run方法与start方法的区别创建线程的几种方法:探讨串行执行与并行执行的执行时间多线程的使用场景:Thread类简单介绍:构造方法:获取线程的常见属性:线程的常用方法…...

技术分享 | OMS 初识

作者:高鹏 DBA,负责项目日常问题排查,广告位长期出租 。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 本文主要贡献者:进行OMS源码分析的…...

【Elastic (ELK) Stack 实战教程】10、ELK 架构升级-引入消息队列 Redis、Kafka

目录 一、ELK 架构面临的问题 1.1 耦合度过高 1.2 性能瓶颈 二、ELK 对接 Redis 实践 2.1 配置 Redis 2.1.1 安装 Redis 2.1.2 配置 Redis 2.1.3 启动 Redis 2.2 配置 Filebeat 2.3 配置 Logstash 2.4 数据消费 2.5 配置 kibana 三、消息队列基本概述 3.1 什么是…...

优先、双端队列-我的基础算法刷题之路(八)

本篇博客旨在整理记录自已对优先队列、双端队列的一些总结,以及刷题的解题思路,同时希望可给小伙伴一些帮助。本人也是算法小白,水平有限,如果文章中有什么错误之处,希望小伙伴们可以在评论区指出来,共勉 &…...

Python3 os.symlink() 方法、Python 质数判断

Python3 os.symlink() 方法 概述 os.symlink() 方法用于创建一个软链接。 语法 symlink()方法语法格式如下: os.symlink(src, dst)参数 src -- 源地址。 dst -- 目标地址。 返回值 该方法没有返回值。 实例 以下实例演示了 symlink() 方法的使用&#xff1…...

P1972 [SDOI2009] HH的项链

[SDOI2009] HH的项链 题目描述 HH 有一串由各种漂亮的贝壳组成的项链。HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此,他的项链变得越来…...

​力扣解法汇总1026. 节点与其祖先之间的最大差值

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描述: 给定二叉树的根节点 root,找出存在于 不同 节点 A 和 B 之间的最大值…...

010:Mapbox GL移动鼠标mousemove,显示坐标信息

第010个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中移动鼠标mousemove,显示坐标信息。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共81行)相关API参考:专栏目标示例效果 配置方式 1)查看基础…...

【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

百度暑期实习 C++ 一面

1.数组 链表 数组是一种线性数据结构,其中相同类型的元素连续存储在一段内存中,并且可以通过索引来访问每个元素。数组的优点是随机访问元素非常快速,但缺点是插入或删除元素可能需要移动其他元素。 链表也是一种线性数据结构,但…...

计算机网络第一章(概述)【湖科大教书匠】

1. 各种网络 网络(Network)由若干**结点(Node)和连接这些结点的链路(Link)**组成多个网络还可以通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,即互联网(互连网)。因此,互联网是"网络的网络(Network of Networks)"**因特…...

【JS】vis.js使用之vis-timeline使用攻略,vis-timeline在vue3中实现时间轴、甘特图

vis.js使用之vis-timeline使用攻略,vis-timeline实现时间轴、甘特图1、vis-timeline简介2、安装插件及依赖3、简单示例4、疑难问题集合1. 中文zh-cn本地化2. 关于自定义class样式无法被渲染3. 关于双向数据绑定vis.js是一个基于浏览器的可视化库,它提供了…...

机器学习——数据处理

机器学习简介 机器学习是人工智能的一个实现途径深度学习是机器学习的一个方法发展而来 机器学习:从数据中自动分析获得模型,并利用模型对未知数据进行预测。 数据集的格式: 特征值目标值 比如上图中房子的各种属性是特征值,然…...

多种文字翻译软件-翻译常用软件

整篇文档翻译软件 整篇文档翻译软件是一种实现全文翻译的自动翻译工具,它能够快速、准确地将整篇文档的内容翻译成目标语言。与单词、句子翻译不同,整篇文档翻译软件不仅需要具备准确的语言识别和翻译技术,还需要考虑上下文语境和文档格式等多…...

Baumer工业相机堡盟工业相机如何通过BGAPI SDK将相机图像数据用二进制的方式保存到本地(C++)

Baumer工业相机堡盟工业相机如何通过BGAPI SDK将相机图像数据用二进制的方式保存到本地(C)Baumer工业相机Baumer工业相机将图像保存为二进制图像的技术背景代码分析第一步:先转换Byte*图像为二进制图像第二步:在回调函数里进行Buf…...

JavaScript模块的导出和导入之export和module.exports的区别

export和module.exports (需要前面的export没有“s”,后面的module.exports 有“s”) 使用两者根本区别是 **exports **返回的是模块函数 **module.exports **返回的是模块对象本身,返回的是一个类 使用上的区别是exports的方法可以直接调用module.exports需要new…...

基于朴素贝叶斯分类器的钞票真伪识别模型

基于朴素贝叶斯分类器的钞票真伪识别模型 内容 本实验通过实现钞票真伪判别案例来展开学习朴素贝叶斯分类器的原理及应用。 本实验的主要技能点: 1、 朴素贝叶斯分类器模型的构建 2、 模型的评估与预测 3、 分类概率的输出 源码下载 环境 操作系统&#xf…...

【Python】【进阶篇】二十二、Python爬虫的BS4解析库

目录二十二、Python爬虫的BS4解析库22.1 BS4下载安装22.2 BS4解析对象22.3 BS4常用语法1) Tag节点22.4 遍历节点22.5 find_all()与find()1) find_all()2) find()22.6 CSS选择器二十二、Python爬虫的BS4解析库 Beautiful Soup 简称 BS4(其中 4 表示版本号&#xff0…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)&#xff0…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

Java编程之桥接模式

定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...