【博客文章2024】通过GPL开源plugin,向MySQL8.0社区版增加审计日志功能(以MySQL NDB Cluster的SQL节点为操作案例) Author: Bo Tang 1. 社区版缺失的审计功能: MySQL企业版自带审计功能,但是需要付费。MySQL社区版不带审计插件。
MySQL企业版的审计插件的名称是:audit.log.so;Mariadb审计插件的名称是server_audit.so;McAfee审计插件的名称libaudit_plugin.so。Mariadb审计插件和McAfee审计插件遵守GPL。 2. 针对MySQL5.7及之前版本,通常采用的解决办法: 在MySQL5.7及之前版本环境,Mariadb的server_audit.so插件往往能够被无缝应用于MySQL中以实现审计功能。 比如:Mariadb的10.1.x/10.2.x版本的server_audit.so插件可直接兼容于MySQL5.7 版本。 具体做法:先从https://mariadb.com/下载 Mariadb对应版本的二进制包。然后将其解压缩,把解压缩后的plugins目录下的server_audit.so 审计插件直接拷贝出来,放置于MySQL5.7版本的插件目录下:
3. MySQL8.0使用之前解决办法时,会遇到的问题: MySQL8.0使用之前解决办法会遇到问题。比如:使用RedHat Linux8.3自带的Mariadb(3:10.3.17-1.module+el8.1.0+3974+90eded84)的server_audit.so,安装其在MySQL8.0时会出现如下错误:
使用从https://mariadb.com/下载来的10.11.7-GA版本的Mariadb的server_audit.so,安装其在MySQL8.0时也会出现如上的相同错误。而如果使用从https://mariadb.com/下载来的11.3.2-GA版本的Mariadb的server_audit.so,安装其在MySQL8.0时又会出现新的错误:
4. 通过cmake编译的开源的plugin,向MySQL8.0社区版增加审计功能: 亚马逊RDS for MySQL的开发团队在GPL宣言的框架下对Mariadb的审计插件源代码进行了二次开发,确保其与MySQL 8 API完全兼容。该插件的源代码在Github上公开发布。作为对MySQL社区的一项服务,MySQL社区版的用户可以在以下的网址下载整个源代码的zip包:https://github.com/Vettabase/audit-plugin-for-mysql 下载的包名叫:audit-plugin-for-mysql-mysql-8.0.zip。下面以MySQL NDB Cluster的SQL节点为操作案例,来演示: 解压缩audit-plugin-for-mysql-mysql-8.0.zip后,在其中搜索已经编译出来的server_audit.so,并将其拷贝到MySQL8.0插件所在的目录(这里拷贝到MySQL NDB Cluster的一个SQL节点):
这个二进制编译成品也适用于MySQL 8.0.x的所有非集群版本和所有NDB集群版本,本文也提供server_audit.so下载。 接下来就看安装插件时会不会出现错误:
说明安装成功。安装插件成功后,我们登录数据库(MySQL NDB Cluster的一个SQL节点)查看:
5. 审计功能测试: 变量server_audit_logging默认为OFF,设置为ON表示打开审计日志记录。我们准备测试审计1.用户的连接;2.用户的查询:
让用户执行查询,它对应的审计日志将用红色标出:
让用户执行连接,它对应的审计日志将用蓝色标出:
/var/lib/mysql/server_audit.log的格式是:时间戳,记录审计日志的主机,用户名,发生审计事件的主机,连接ID,查询ID,操作类型,数据库,对象,返回值。
它还会记录一些失败的连接(黄色表示)。 附录. 其他解决社区版增加审计功能的解决方案: MySQL社区版还可以使用McAfee提供的开源软件mysql Audit Pluging。项目地址:https://github.com/trellix-enterprise/mysql-audit,插件名称为libaudit_plugin.so。 |
GMT+8, 2024-2-21 22:01 , Processed in 0.037922 second(s), 21 queries .