MySQL审计插件介绍

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 数据库审计功能主要将用户对数据库的各类操作行为记录审计日志,以便日后进行跟踪、查询、分析,以实现对用户操作的监控和审计。审计是一项非常重要的工作,也是企业数据安全体系的重要组成部分,等保评测中也要求有审计日志。对于 DBA 而言,数据库审计也极其重要,特别是发生人为事故后,审计日志便于我们进行责任追溯,问题查找。

前言: 


数据库审计功能主要将用户对数据库的各类操作行为记录审计日志,以便日后进行跟踪、查询、分析,以实现对用户操作的监控和审计。审计是一项非常重要的工作,也是企业数据安全体系的重要组成部分,等保评测中也要求有审计日志。对于 DBA 而言,数据库审计也极其重要,特别是发生人为事故后,审计日志便于我们进行责任追溯,问题查找。


1. MySQL 社区版审计日志现状


如果你用的是 MySQL 社区版的话,你会发现 MySQL 官方并没有提供严格意义上的审计日志。虽然 MySQL 提供有 binlog 及 general log ,这二者虽然具备部分审计功能,但一般不当做审计日志来看待。


binlog 即二进制日志文件,它记录了数据库所有执行的 DDL 和 DML 语句(除了数据查询语句select、show等),以事件形式记录并保存在二进制文件中。虽然能查到具体 SQL 的执行记录,但其作用主要是主从复制,并不能当做是审计日志。


general log 是全量日志,开启后将会记录所有到达 MySQL Server 的SQL语句。一般不会开启此日志,因为 log 的量会非常庞大,对数据库性能有影响,并且 general log 会记录大量无用信息,当做审计日志的话,后期筛选有难度。


那么 MySQL 社区版应该怎样进行审计呢?查阅资料我们发现通过安装审计插件可实现 MySQL 的审计功能,常见的审计插件有 MariaDB Audit Plugin、Percona Audit Log Plugin、McAfee MySQL Audit Plugin 三种,MariaDB 自带的审计插件比较适合用于 MySQL 社区版,下面我们来学习下如何使用审计插件来实现审计功能。


2. 审计插件使用教程


首先我们要做的是从 MariaDB 安装包中拷贝出来审计插件,需要注意的是操作系统要选择一致,比如说你的 MySQL 安装在 CentOS 系统中,那就要下载 CentOS 系统的 MariaDB 安装包并从中拷贝,Windows 系统则需要下载对应系统的审计插件。


MariaDB 审计插件的名称是 server_audit.so(Windows系统下是 server_audit.dll ),要注意的是,审计插件一直在更新,不同版本的审计插件功能也不同,推荐使用 >= 1.4.4 版本的插件,新版本的插件可以排除掉 select 语句。不同版本的审计插件支持的审计事件如下图:


image.png



审计插件版本与 MariaDB 版本对应图如下:


image.png



MySQL 5.7 一般可对应 MariaDB 10.2 版本,我们以 CentOS 系统 MySQL 5.7 版本为例来安装下审计插件。我这里选择下载的是 MariaDB 10.2.38 版本的安装包(审计插件版本 1.4.13),下载地址:https://downloads.mariadb.com/MariaDB/mariadb-10.2.38/bintar-linux-x86_64/mariadb-10.2.38-linux-x86_64.tar.gz


下载完成之后,解压安装包,然后到 mariadb-10.2.38-linux-x86_64/lib/plugin/ 路径下复制出来 server_audit.so 文件,将其拷贝到 MySQL 服务器上,具体步骤如下:


# 查看 MySQL 插件存放路径
mysql> show variables like'plugin_dir';+---------------+------------------------------+| Variable_name | Value                        |+---------------+------------------------------+| plugin_dir    |/usr/local/mysql/lib/plugin/|+---------------+------------------------------+# 将审计插件 server_audit.so 存放到该路径下
[root@localhost plugin]# ls -lh server_audit.so-rw-r--r--. 1 root root 191K May  4  2021 server_audit.so# 更改插件属主及权限
[root@localhost plugin]# chown mysql:mysql server_audit.so[root@localhost plugin]# chmod 755 server_audit.so[root@localhost plugin]# ls -lh server_audit.so-rwxr-xr-x. 1 mysql mysql 191K May  42021 server_audit.so

以上均为准备内容,为方便各位小伙伴,点击下面链接即可单独下载 Linux 64 位系统的 1.4.13 版本的审计插件:

云盘链接: https://pan.baidu.com/s/1HO5sjKb5zpj3CiyRulV5bw?pwd=r85k  提取码: r85k 。下面我们来开始正式安装。


# 进入数据库安装审计插件
mysql> INSTALL PLUGIN server_audit SONAME 'server_audit.so';Query OK,0 rows affected (0.07 sec)mysql> show plugins;+----------------------------+--------+--------------------+-----------------+---------+| Name                       | Status | Type               | Library         | License |+----------------------------+--------+--------------------+-----------------+---------+...
| SERVER_AUDIT               | ACTIVE | AUDIT              | server_audit.so| GPL     |+----------------------------+--------+--------------------+-----------------+---------+# 查看 audit 初始参数配置
mysql> show variables like'%audit%';+-------------------------------+-----------------------+| Variable_name                 | Value                 |+-------------------------------+-----------------------+| server_audit_events           ||| 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_loc_info         ||| server_audit_logging          | OFF                   || server_audit_mode             |1|| 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              |+-------------------------------+-----------------------+# 在线开启审计
mysql>set global server_audit_logging=on;Query OK,0 rows affected (0.00 sec)mysql>set global server_audit_events='connect,table,query_ddl,query_dcl,query_dml_no_select';Query OK,0 rows affected (0.00 sec)mysql>set global server_audit_file_path ='/data/mysql/logs/server_audit.log';Query OK,0 rows affected (0.00 sec)mysql>set global server_audit_file_rotate_size=104857600;Query OK,0 rows affected (0.01 sec)# [mysqld]下添加以下配置 使得永久生效
server_audit=FORCE_PLUS_PERMANENT
server_audit_logging=ONserver_audit_file_path=/data/mysql/logs/server_audit.logserver_audit_events=connect,table,query_ddl,query_dcl,query_dml_no_select
server_audit_file_rotate_size=104857600



通过以上步骤,我们已经完成审计插件的安装与配置,参照官方文档,我们来了解下主要配置参数的作用:


image.png



以上参数还是很容易理解的,下面我们进行增删改查测试,看下审计日志具体记录的内容:


# 进行操作后 查看审计日志内容
2022051215:17:17,mysqlhost2,test_user,10.30.21.95,118,0,FAILED_CONNECT,,,10452022051215:17:30,mysqlhost2,test_user,10.30.21.95,119,0,FAILED_CONNECT,,,10452022051215:20:26,mysqlhost2,test_user,10.30.21.95,124,0,CONNECT,,,02022051215:20:49,mysqlhost2,test_user,10.30.21.95,124,395,QUERY,,'create database testdb',02022051215:22:06,mysqlhost2,test_user,10.30.21.95,129,419,QUERY,testdb,'CREATE TABLE if not exists `test_tb0` (\r\n  `increment_id` int(11) NOT NULL AUTO_INCREMENT COMMENT \'自增主键\',\r\n  `test_id` int(11) NOT NULL ,\r\n  `test_name` varchar(20) DEFAULT NULL,\r\n  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT \'创建时间\',\r\n  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT \'修改时间\',\r\n  PRIMARY KEY (`increment_id`)\r\n) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT=\'测试table\'',02022051215:23:09,mysqlhost2,test_user,10.30.21.95,129,426,QUERY,testdb,'insert into test_tb0 (test_id,test_name) values (1001,\'4343df\'),(1002,\'dfd\')',02022051215:23:22,mysqlhost2,test_user,10.30.21.95,129,433,QUERY,testdb,'delete from test_tb0',02022051215:24:14,mysqlhost2,test_user,10.30.21.95,129,448,QUERY,testdb,'create table test_tb0 (id int)',10502022051215:24:25,mysqlhost2,test_user,10.30.21.95,129,452,QUERY,testdb,'drop table test_tb0',02022051215:25:13,mysqlhost2,test_user,10.30.21.95,126,0,DISCONNECT,testdb,,0# 连接审计主要审计连接数据库、断开连接、连接失败等操作,其日志格式如下:
[timestamp],[serverhost],[username],[host],[connectionid],0,CONNECT,[database],,0[timestamp],[serverhost],[username],[host],[connectionid],0,DISCONNECT,,,0[timestamp],[serverhost],[username],[host],[connectionid],0,FAILED_CONNECT,,,[retcode]# QUERY审计各种数据库变更事件,执行失败也会记录,其日志记录格式如下:
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],QUERY,[database],[object],[retcode]



至此,我们基本上完成审计插件的初步使用,从审计日志内容中我们可以看出,记录的格式还是很清晰详细的,每列内容都是需要的,根据日志很容易查到对应的操作。使用下来,笔者觉得 server_audit 审计插件基本能满足审计需求,不过审计插件也是有优缺点的,优劣势整理如下:


server_audit 审计插件优势:


  • 丰富的审计内容:包括用户连接,关闭,DML操作,存储过程,触发器,事件等。
  • 灵活的审计策略:可以自定义审计事件,例如过滤掉select查询,或者排除审计某个用户等。
  • 灵活方便:免费使用且安装方便,可以在线开启和停用审计功能。


server_audit 审计插件劣势:


  • 开启审计会增加数据库的性能开销,并占用磁盘空间。
  • 日志格式不够丰富,不能自定义输出格式。


参考: 


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
41 2
zabbix agent集成percona监控MySQL的插件实战案例
|
25天前
|
自然语言处理 关系型数据库 MySQL
MySQL数据库使用Match语法需要安装什么插件吗?
【10月更文挑战第1天】MySQL数据库使用Match语法需要安装什么插件吗?
46 0
|
6月前
|
安全 关系型数据库 MySQL
mysql 安装插件 validate_password
mysql 安装插件 validate_password
254 0
|
4月前
|
存储 关系型数据库 MySQL
利用 MySQL 克隆插件搭建主从
MySQL 的 Clone 插件是一个强大的功能,首次引入于 MySQL 8.0.17 版本。简单来说,Clone Plugin 是一款物理克隆数据工具,它能够帮助我们快速、高效地克隆或复制数据库,极大地简化了数据库迁移、备份和恢复的过程,让我们在处理大量数据时更加得心应手。本篇文章我们一起来学习下如何使用克隆插件。
79 2
|
SQL 存储 自然语言处理
玩转阿里云RDS PostgreSQL数据库通过pg_jieba插件进行分词
在当今社交媒体的时代,人们通过各种平台分享自己的生活、观点和情感。然而,对于平台管理员和品牌经营者来说,了解用户的情感和意见变得至关重要。为了帮助他们更好地了解用户的情感倾向,我们可以使用PostgreSQL中的pg_jieba插件对这些发帖进行分词和情感分析,来构建一个社交媒体情感分析系统,系统将根据用户的发帖内容,自动判断其情感倾向是积极、消极还是中性,并将结果存储在数据库中。
玩转阿里云RDS PostgreSQL数据库通过pg_jieba插件进行分词
|
SQL 关系型数据库 MySQL
MySql 常用插件
MySql 常用插件
83 0
|
存储 运维 监控
mysql开启审计日志
mysql开启审计日志
393 0
|
SQL 存储 JSON
Blueprints MySQL Connector / UE4 | DTMysql插件使用说明
Blueprints MySQL Connector / UE4 | DTMysql插件使用说明
293 0
|
安全 关系型数据库 MySQL
从输入任何密码都可以直接登录 MySQL 的 root 用户谈 auth_socket 验证插件---发表到爱可生开源社区
一线的工程师反映了一个奇怪的现象,刚刚从 MySQL 官网上下载了一个 MySQL 5.7.31,安装完成后,发现使用任何密码都能登陆 MySQL,修改密码也不管用,重新启动 MySQL 也不能解决。
514 0
|
Oracle 关系型数据库 MySQL
迁移MariaDB审计插件(Audit Plugin)到MySQL 5.7---发表到爱可生开源社区
Oracle的MySQL社区版本不带审计插件(Audit Plugin),要想使用审计功能,你可以用Enterprise的版本,不过这需要银子。业界还有一些GPL协议的审计插件,这里我们选择MariaDB的审计插件。
229 0