给MariaDB开启日志审计功能

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

如果很多运维或者开发都分配了数据库的操作权限的话,某一天表或者字段丢失了都无法找到谁干的,这个锅只能运维来背了,因此有必要给数据库的操作记录保存下来。

下面来演示下如何操作:

软件版本:

    MariaDB10.0.17    (自带了server_audit插件)

MariaDB审计日志写到文件

安装server_audit插件

登陆进MariaDB,执行:

1
> show variables like  '%plugin%' ;  查看插件存放的目录

wKiom1dk6YPwqqdyAAAg_sTOgmo192.png


cd /usr/local/mariadb/lib/plugin/  查看有没有一个叫做server_audit.so的文件。

如果没有的话,到http://www.skysql.com/downloads/mariadb-audit-plugin-beta去下载放到/usr/local/mariadb/lib/plugin/目录下即可。


安装插件

1
> INSTALL PLUGIN server_audit SONAME 'server_audit.so' ;

或者编辑/etc/my.cnf添加

1
2
[mysqld]
plugin-load=server_audit=server_audit.so


然后重启mariadb


查看相关的全局变量

1
> show variables like  '%audit%' ;

wKioL1dk6aOhXP4JAABTaRqx77Q343.png


打开日志的审计功能

> set global server_audit_logging=on;

但是服务重启后会失效,可以通过在配置文件添加避免这个问题:

1
2
[mysqld]
server_audit_logging=on

 

 

查看audit插件的运行状态:

1
> show global status like  '%audit%' ;

wKiom1dk6eSSuN6OAAAl-4C8Os0225.png

server_audit_active :ON (表示server_audit插件在运行);

server_audit_current_log : server_audit.log(审计日志路径和日志名);

server_audit_last_error : 错误消息;

server_audit_writes_failed : 因错误没有记录的日志条目数

 

设置变量

1
2
3
4
5
set  GLOBAL server_audit_events= 'CONNECT,QUERY,TABLE' ;
set  GLOBAL server_audit_incl_users = 'test_user,root' ;
set  GLOBAL server_audit_excl_users= 'lirl'
set  GLOBALserver_audit_file_rotate_size=200000000;   (单位:字节)
set  GLOBAL server_audit_file_rotations=9;

 

为了防止server_audit插件被卸载,需要在配置文件中添加:

[mysqld]

server_audit=FORCE_PLUS_PERMANENT

重启MySQL生效。


或者我们直接在/etc/my.cnf的[mysqld]段添加上下面的内容,再重启MariaDB即可,上面的全部乱七八糟的设置就能都生效,省得那么多步骤。

1
2
3
4
5
6
7
8
# audit plugin settings
plugin-load = server_audit.so
server_audit = FORCE_PLUS_PERMANENT
server_audit_events =  'CONNECT,QUERY,TABLE'
server_audit_logging = ON
server_audit_incl_users = test1,root
server_audit_file_rotate_size =10G
server_audit_file_path  =  /usr/local/mariadb/var/server_audit .log

 

重启MariaDB后,我们tail -f /usr/local/mariadb/var/server_audit.log监控这个文件。

另开一个xshell终端,登陆mysql即可看到日志在刷新,例如查询修改操作都被记录下来了。

 

卸载server_audit的方法:

1
2
> UNINSTALL PLUGIN server_audit;
> show variables like  '%audit%' ;   验证是否卸载完

 

卸载的步骤:

1、需要先在配置文件里把server_audit相关的配置项目注释掉,再重启mariadb。

2、再来执行UNINSTALL PLUGIN server_audit;才能卸载掉这个插件。

3、卸载插件完成后,执行show variables like '%audit%';仍然能看到这个插件的可用参数,再次重启mariadb才行。

 


MariaDB审计日志写到syslog

和写入到日志文件中的配置方法基本相同,就是多了一条显式的指定日志的存储方式而已。简单演示下即可。

 

操作如下:

1
2
3
4
5
> INSTALL PLUGIN server_audit SONAME 'server_audit.so' ;
> SET GLOBALserver_audit_output_type=SYSLOG;
> SET GLOBALserver_audit_events= 'CONNECT,QUERY,TABLE' ;
> SET GLOBAL server_audit_logging=on;
> show variables like  '%audit%' ;


wKioL1dk6kHw6P8cAABcp352QAQ173.png


1
> show status like  '%audit%' ;

wKioL1dk6kKBaRJaAAAldGJdd_4781.png


重启rsyslog服务

1
# /etc/init.d/rsyslog restart

然后连接到mysql执行些数据库、表的操作,可以tail -f /var/log/message里面看到操作的内容。

wKiom1dk6kLSaVJRAACoskaaKtU794.png

默认的操纵日志都打在/var/log/message里面,不方便我们查看,可以修改下/etc/rsyslog.conf

*.info;mail.none;authpriv.none;cron.none/var/log/messages的下面加一行:

1
if  $programname == 'mysql-server_auditing'  then  /var/log/mariadb_audit_log

                    

 

1
# /etc/init.d/rsyslog restart   重启rsyslog服务

 

这样的话,就能将审计的日志输出到独立的文件/var/log/mariadb_audit_log里面。

(注意:审计日志在/var/log/messages写一遍,在/var/log/mariadb_audit_log再写一遍,不是单单只写到/var/log/mariadb_audit_log里面的)

 

补充:MariaDB Audit Plugininit-connect+binlog比较

1)、init-connect+binlog方案要求用户对日志表至少有insert权限,每添加一个新用户都要进行授权,显得比较麻烦;而MariaDB Audit Plugin默认会对所有用户进行行为审计,不需要对新添加的用户进行授权,MariaDB Audit Plugin还可以指定对哪些用户进行行为审计,哪些用户不需要进行行为审计;

2)、init-connect+binlog方案无法对具有super权限的用户进行行为审计,而MariaDB Audit Plugin可以对所有用户进行行为审计,包括具有super权限的用户;

3)、init-connect+binlog方案需要修改配置文件之后重启MySQL生效,而MariaDB Audit Plugin可以在线进行配置,无需重启服务生效;

4)、init-connect+binlog方案审计信息输出到binlog中,MariaDB Audit Plugin可以选择将审计信息输出到syslog或者自定义的路径;










本文转自 lirulei90 51CTO博客,原文链接:http://blog.51cto.com/lee90/1790582,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
6月前
|
存储 Go
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
本文将探讨几个热门的 go 日志库如 logrus、zap 和官网的 slog,我将分析这些库的的关键设计元素,探讨它们是如何支持日志轮转与切割功能的配置。
283 0
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
C++-实现日志log功能
C++-实现日志log功能
132 0
|
1月前
|
Rust 前端开发 JavaScript
Tauri 开发实践 — Tauri 日志记录功能开发
本文介绍了如何为 Tauri 应用配置日志记录。Tauri 是一个利用 Web 技术构建桌面应用的框架。文章详细说明了如何在 Rust 和 JavaScript 代码中设置和集成日志记录,并控制日志输出。通过添加 `log` crate 和 Tauri 日志插件,可以轻松实现多平台日志记录,包括控制台输出、Webview 控制台和日志文件。文章还展示了如何调整日志级别以优化输出内容。配置完成后,日志记录功能将显著提升开发体验和程序稳定性。
68 1
Tauri 开发实践 — Tauri 日志记录功能开发
|
6月前
|
数据采集 分布式计算 监控
日志服务功能特性
日志服务功能特性
65 7
|
2月前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
151 9
|
3月前
|
存储 监控 Serverless
函数计算发布功能问题之用户在使用主流函数计算产品的日志服务时可能会遇到使用成本的问题如何解决
函数计算发布功能问题之用户在使用主流函数计算产品的日志服务时可能会遇到使用成本的问题如何解决
|
3月前
|
监控 Serverless 开发者
函数计算发布功能问题之查看函数的调用日志的问题如何解决
函数计算发布功能问题之查看函数的调用日志的问题如何解决
|
4月前
|
Python
Python编程实战:利用闭包与装饰器优化日志记录功能
【7月更文挑战第7天】Python的闭包和装饰器简化了日志记录。通过定义如`log_decorator`的装饰器,可以在不修改原函数代码的情况下添加日志功能。当@log_decorator用于`add(x, y)`函数时,调用时自动记录日志。进一步,`timestamp_log_decorator`展示了如何创建特定功能的装饰器,如添加时间戳。这些技术减少了代码冗余,提高了代码的可维护性。
64 1
|
4月前
|
监控
若依修改-----其他功能,包括参数设置,通知公告,日志管理,验证码控制开关在参数设置里,若依的注册页面是隐藏的,在src的login.vue的97行注册开发,修改成true,通知公告,促进组织内部信
若依修改-----其他功能,包括参数设置,通知公告,日志管理,验证码控制开关在参数设置里,若依的注册页面是隐藏的,在src的login.vue的97行注册开发,修改成true,通知公告,促进组织内部信
|
5月前
|
缓存 监控 安全
在 Spring Boot 中使用 AOP(Aspect-Oriented Programming)实现日志记录功能
在 Spring Boot 中使用 AOP(Aspect-Oriented Programming)实现日志记录功能
296 1