在MySQL社区版中也用上审计插件

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 在MySQL社区版中也用上审计插件
  • 前言
  • MariaDB Auditing Plugin的安装
  • 查看audit相关参数
  • 启用审计功能
  • 功能测试

前言

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

当前 MySQL 社区版本并没有提供相关的插件使用,虽然 MySQL 提供有 binlog 及 general log ,这二者虽然具备部分审计功能,但一般不当做审计日志来看待。

常见的审计插件有 MariaDB Audit Plugin、Percona Audit Log Plugin、McAfee MySQL Audit Plugin 三种,MariaDB 自带的审计插件比较适合用于 MySQL 社区版,下面我们来学习下如何使用审计插件来实现审计功能。

首先我们需要安装一个MySQL,该步骤就先跳过一下。

MariaDB Auditing Plugin的安装

MariaDB 审计插件的名称是 server_audit.so(Windows系统下是 server_audit.dll ),要注意的是,审计插件一直在更新,不同版本的审计插件功能也不同,推荐使用 >= 1.4.4 版本的插件。

由于 MariaDB Auditing Plugin 集成在MariaDB里面,没有单独提供,所以我们需要先下载一个MariaDB。

下面我们以 CentOS 系统 MySQL 5.7 版本为例来安装下审计插件:

MariaDB下载地址:https://mariadb.com/kb/en/postdownload/mariadb-server-5-5-64/

进入plugin子目录,查看下是否要另外安装依赖

#tar xvpf tar xvpf mariadb-5.5.64-linux-systemd-x86_64.tar.gz
#cd mariadb-10.2.44-linux-systemd-x86_64/lib/plugin
#ldd server_audit.so
ldd: warning: you do not have execution permission for `./server_audit.so'
        linux-vdso.so.1 =>  (0x00007ffdc613d000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2b1c722000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f2b1c354000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f2b1cb4f000)

查看MySQL plugin的存放地址

mysql> show global variables like 'plugin_dir';
+---------------+--------------------------------+
| Variable_name | Value                          |
+---------------+--------------------------------+
| plugin_dir    | /usr/local/mysql57/lib/plugin/ |
+---------------+--------------------------------+
1 row in set (0.00 sec)

将mariadb 的审计插件 server_audit.so文件复制到该路径下,并更改插件属主及权限

#cp server_audit.so /usr/local/mysql57/lib/plugin/
#chmod +x /usr/local/mysql57/lib/plugin/server_audit.so
#chown mysql.mysql /usr/local/mysql57/lib/plugin/server_audit.so

在线安装插件

mysql> INSTALL PLUGIN server_audit SONAME 'server_audit.so';
Query OK, 0 rows affected (0.08 sec)
mysql> show plugins;
+----------------------------+--------+--------------------+-----------------+---------+
| Name                       | Status | Type               | Library         | License |
+----------------------------+--------+--------------------+-----------------+---------+
...
| SERVER_AUDIT               | ACTIVE | AUDIT              | server_audit.so | GPL     |
+----------------------------+--------+--------------------+-----------------+---------+

查看audit相关参数

mysql> show variables like '%server_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              |
+-------------------------------+-----------------------+
16 rows in set (0.00 sec)

参数说明

  • server_audit_events:指定记录事件的类型,可以用逗号分隔的多个值(connect,query,table),默认为空代表审计所有事件
  • server_audit_excl_users:用户白名单,该列表中的用户行为将不记录
  • server_audit_file_path:存储日志的文件,默认在数据目录的 server_audit.log 文件中
  • server_audit_file_rotate_now:强制日志文件轮转
  • server_audit_file_rotate_size:限制日志文件的大小
  • server_audit_file_rotations:指定日志文件的数量,如果为0日志将从不轮转
  • server_audit_incl_users:指定哪些用户的活动将记录,connect将不受此变量影响,该变量比 server_audit_excl_users 优先级高
  • server_audit_loc_info: 内部参数,用不到
  • server_audit_logging:启动或关闭审计,默认OFF,启动 ON
  • server_audit_mode:标识版本,用于开发测试
  • server_audit_output_type:指定日志输出类型,可为SYSLOG或FILE
  • server_audit_query_log_limit: 记录中查询字符串的长度限制。默认为1024
  • server_audit_syslog_facility:默认为LOG_USER,指定facility
  • server_audit_syslog_ident:设置ident,作为每个syslog记录的一部分
  • server_audit_syslog_info:指定的info字符串将添加到syslog记录
  • server_audit_syslog_priority:定义记录日志优先级

启用审计功能

set global server_audit_logging=on;
set global server_audit_events='connect,query,table,query_ddl,query_dcl,query_dml_no_select';
set global server_audit_file_path='/var/log/server_audit.log';
set global server_audit_file_rotate_size=104857600;

[mysqld]下添加以下配置,使得配置永久生效:

server_audit_logging=on
server_audit_events=connect,query,table,query_ddl,query_dcl,query_dml_no_select
server_audit_file_path=/var/log/server_audit.log
server_audit_file_rotate_size=104857600

功能测试

从另外一台远程连接到数据库上,执行一些操作

[root@mgr2 ~]# mysql -uauth -p123456 -h192.168.***.*** -P***
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.26-log Source distribution
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
mysql> create database test;
Query OK, 1 row affected (0.03 sec)
mysql> use test;
Database changed
mysql> create  table t1(id int);
Query OK, 0 rows affected (0.09 sec)
mysql> insert into t1  values (1);
Query OK, 1 row affected (0.02 sec)
mysql> delete from t1 where id=1;
Query OK, 1 row affected (0.03 sec)
mysql> exit
Bye
[root@mgr2 ~]# mysql -uauth -p12345 -h192.168.***.*** -P***
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'auth'@'192.168.***.*** (using password: YES)


查看相应日志升级对应的操作记录

20220723 21:28:34,mgr3,auth,192.168.*.*,3,0,CONNECT,,,0
20220723 21:28:34,mgr3,auth,192.168.*.*,3,9,QUERY,,'select @@version_comment limit 1',0
20220723 21:28:47,mgr3,auth,192.168.*.*,3,10,QUERY,,'show databases',0
20220723 21:28:57,mgr3,auth,192.168.*.*,3,11,QUERY,,'create database test',0
20220723 21:28:59,mgr3,auth,192.168.*.*,3,12,QUERY,,'SELECT DATABASE()',0
20220723 21:28:59,mgr3,auth,192.168.*.*,3,14,QUERY,test,'show databases',0
20220723 21:28:59,mgr3,auth,192.168.*.*,3,15,QUERY,test,'show tables',0
20220723 21:29:09,mgr3,auth,192.168.*.*,3,16,QUERY,test,'create  table t1(id int)',0
20220723 21:29:17,mgr3,auth,192.168.*.*,3,17,QUERY,test,'insert into t1  values (1)',0
20220723 21:29:24,mgr3,auth,192.168.*.*,3,18,QUERY,test,'delete from t1 where id=1',0
20220723 21:29:48,mgr3,auth,192.168.*.*,3,0,DISCONNECT,test,,0
20220723 21:29:59,mgr3,auth,192.168.*.*,4,0,FAILED_CONNECT,,,1045

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

server_audit 审计插件优势:

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

server_audit 审计插件劣势:

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


小编提醒:拿MariaDB的so去MySQL里install,这种方式很容易导致 audit plugin工作异常,不推荐这么做。强烈建议使用GreatSQL,自带 audit plugin

EnjoyGreatSQL:)

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
存储 Java 关系型数据库
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
90 1
|
6月前
|
Ubuntu 关系型数据库 MySQL
百度搜索:蓝易云【ubuntu20.4服务器安装mysql社区版并开放3306端口】
现在,你已经在Ubuntu 20.04服务器上成功安装了MySQL社区版,并且已经开放了3306端口,可以通过该端口访问MySQL服务器了。请确保在生产环境中设置安全措施,例如设置强密码、限制访问等,以保护数据库的安全性。
140 2
|
6月前
|
NoSQL 关系型数据库 MySQL
基于Python和mysql开发的BBS问答社区管理系统(源码+数据库+程序配置说明书+程序使用说明书)
基于Python和mysql开发的BBS问答社区管理系统(源码+数据库+程序配置说明书+程序使用说明书)
|
2月前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
63 2
zabbix agent集成percona监控MySQL的插件实战案例
|
1月前
|
自然语言处理 关系型数据库 MySQL
MySQL数据库使用Match语法需要安装什么插件吗?
【10月更文挑战第1天】MySQL数据库使用Match语法需要安装什么插件吗?
66 0
|
6月前
|
安全 关系型数据库 MySQL
mysql 安装插件 validate_password
mysql 安装插件 validate_password
302 0
|
4月前
|
存储 关系型数据库 MySQL
利用 MySQL 克隆插件搭建主从
MySQL 的 Clone 插件是一个强大的功能,首次引入于 MySQL 8.0.17 版本。简单来说,Clone Plugin 是一款物理克隆数据工具,它能够帮助我们快速、高效地克隆或复制数据库,极大地简化了数据库迁移、备份和恢复的过程,让我们在处理大量数据时更加得心应手。本篇文章我们一起来学习下如何使用克隆插件。
85 2
|
11月前
|
存储 运维 关系型数据库
MySQL官方特供649页顶级笔记,凝聚社区力量深入技术内幕
但凡有职场经验的兄弟都知道,大厂的面试真是一言难尽,不光看你面试时的临场发挥能力,还要分N次考你对公司业务核心技术的熟悉度。
|
6月前
|
Java 数据库 Maven
基于springboot+vue社区团购系统(分前后台springboot+mybatis+mysql+maven+vue+html)
基于springboot+vue社区团购系统(分前后台springboot+mybatis+mysql+maven+vue+html)
110 0
|
6月前
|
Ubuntu 关系型数据库 MySQL
百度搜索:蓝易云【ubuntu20.4服务器安装mysql社区版并开放3306端口】
恭喜!您已成功在Ubuntu 20.04服务器上安装MySQL社区版并开放3306端口。现在您可以开始使用MySQL数据库了。
121 0
下一篇
无影云桌面