MySQL添加审计日志插件audit_log

这篇具有很好参考价值的文章主要介绍了MySQL添加审计日志插件audit_log。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、说明

       如果下载MySQL源码或者社区版,里面是没有审计日志插件的,可以考虑从别的数据库产品中引入审计日志插件。本文为MySQL5.7.32源码添加percona-server5.7中的审计日志插件——audit_log的源码。

       如果只是想使用审计日志插件,而不需要自己编译源码,那么mariadb5.5.68的server_audit也是可用的。从mariadb的官网上下载linux版本的安装包,解压后直接把lib/plugin/server_audit.so放到MySQL的plugin-dir目录下。

       操作系统:Linux;MySQL版本:5.7.32(源码);percona-server版本:5.7(源码)

       MySQL下载:https://dev.mysql.com/downloads/mysql/

       Percona-server下载:percona-server/plugin at 5.7 · percona/percona-server · GitHub

二、步骤

2.1添加audit_log目录

       percona中的/plugin/audit_log目录,拷贝到mysql的对应位置(audit_log下面的tests不要);

       接下来参考percona,修改mysql中的源码;

       在mysql的include/mysql/plugin.h第661行添加THDVAR_SET定义;

       sql/sql_plugin.cc第3148行添加函数plugin_thdvar_safe_update定义,最好连同注释也添加进来;

       sql/sql_plugin.h第173行之后添加plugin_thdvar_safe_update声明;

       plugin/audit_log/CMakeLists.txt中有关make install的部分删除。

       至此,mysql源码已经可以cmake、make、make install了。

2.2添加测试用例

       创建mysql-test/suite/audit_log目录,里面再创建include、t、r三个文件夹;

       percona的/plugin/audit_log/tests/mtr目录下的文件拷贝到上面那三个目录里,*.inc放入include,*.test和*.opt放入t,*.result放入r;

       mysql-test/suite/audit_log下所有执行--source的地方,需要参考mysql其他测试用例替换inc文件的路径;建议使用带有搜索功能的编辑器,比如vscode;

       mysql-test/include/plugin.defs中添加audit_log相关的参数,也就是添加一行:

audit_log        plugin_audit_log        AUDIT_LOG        audit_log

        至此,mysql源码编译过后可以运行audit_log的测试用例了。需要有测试用例,才能知道还有什么bug,才能去修复。

2.3修复bug

2.3.1解决COMMAND_CLASS为error的问题

       sql/sql_audit.cc中,修改mysql_audit_notify函数,与percona保持一致;最前面include "sql_parse.h";

       sql/sql_parse.cc中添加get_command_name_len定义;

       sql/sql_parse.h中添加get_command_name_len声明。

2.3.2解决存储过程和触发器语句不记录的问题

       sql/sp_instr.cc中include "sql_audit.h";866行,execute函数中添加audit_log_notify。

2.3.4解决audit_null测试用例的问题

       mysql-test/suite/audit_null/t/audit_plugin_2.test,用percona对应的文件替换;

       mysql-test/suite/audit_null/r/audit_plugin_2.result,用percona对应的文件替换。

2.3.5其他bug

       其他bug可自行修复或者删除测试用例。

       audit_log.audit_log_filter_users和audit_log.percona_bug_ps3867中有master_port大小写的问题;

       audit_log.audit_log,mysql中应该没有这种语法;

       audit_log.audit_log_default_db,change_user没有失败不重连的参数,因此断开后会尝试重连;

       audit_log.audit_log_threadpool,thread_handling支持one-thread-per-connection或no-threads,不支持percona的pool-of-threads,也不支持需要线程池插件的loaded-dynamically。

       还有一个关于客户端的bug。创建一个数据库test。用户使用mysql客户端连接时,执行use test,audit_log不会记录数据库。如果给数据库名加上 ` ,也就是执行use `test`,才会记录数据库。使用odbc、jdbc、或者其他直接调用sql_common接口的程序连接数据库则不会有这种问题。

三、关于audit_log_rotate_on_size和audit_log_rotations

       关于audit_log的所有参数说明,可以看官网:Audit Log Plugin - Percona Server for MySQL

       有关audit_log_rotate_on_size和audit_log_rotations这两个参数,最初并没有完全理解什么意思。自己做了一下实验,写一下自己的理解。

      audit_log支持设置文件轮换数量和文件大小上限。如果设置了文件大小上限,则当一个日志文件大小达到上限之后,将该文件重命名,送入轮换队列,然后新建一个文件去记录审计日志。当前正在记录日志的文件,重命名时其后面加上“.1”。轮回队列中的其余文件也会重命名,其后面的数字标号加一。

       如果设置了文件轮换数量,则当轮换队列中的文件数超过设置的数量时,丢弃最旧的那个文件,也就是标号最大的文件。

       假设审计日志文件名为audit.log,文件大小上限为16KB(16384),轮换数量为2,则使用audit.log记录日志。audit.log达到上限后重命名为audit.log.1,然后新建一个audit.log去记录日志。旧的audit.log.1重命名为audit.log.2,旧的audit.log.2会被丢弃。

公司配置mysql的安全审计插件audit_log,以记录敏感操作和事件。文件路径为 /var/l,数据库,数据库

 文章来源地址https://www.toymoban.com/news/detail-778761.html

到了这里,关于MySQL添加审计日志插件audit_log的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL 使用开源审计插件

    MySQL 只有企业版有审计插件,开源社区版没有审计插件。企业要通过等保需要开通审计功能,这里记录使用 MariaDB 开源审计插件,让 MySQL 社区版拥有审计功能。 审计插件是包含在 MariaDB 中的,所以需要先下载 MariaDB 然后将 server_audit.so 审计插件 copy 出来。 MariaDB 的 10.1 版本对

    2024年02月10日
    浏览(40)
  • 【Oracle】设置FGA(Fine-Grained Audit)细粒度审计

    【声明】文章仅供学习交流,观点代表个人,与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) 收集Oracle数据库内存相关的信息 【Oracle】ORA-32017和ORA-00384错误处理 FGA(Fine-Grained Audit)细粒度审计是Oracle提供的一种数据库审计方法,用于创建定制的审计设置。 可以通过调用Or

    2024年01月24日
    浏览(39)
  • IDEA sql日志 Mybatis log插件

    背景:在IDEA控制台打印出sql日志并显示可执行SQL语句 显示sql日志 在项目的 application.yaml 文件中加入代码 重启项目。刷新前端页面。如果在console控制台中能看见这种输出就是成功 不太喜欢这种方法,每个项目都要改。如果有别的全局配置的方法,欢迎评论 显示可执行SQL语句

    2024年02月16日
    浏览(34)
  • MySQL5.7 与 MariaDB10.1 审计插件兼容性验证

    这是一篇关于发现 MariaDB 审计插件导致 MySQL 发生 crash 后,展开适配验证并进行故障处理的文章。 作者:官永强 爱可生DBA 团队成员,擅长 MySQL 运维方面的技能。热爱学习新知识,亦是个爱打游戏的宅男。 本文来源:原创投稿 爱可生开源社区出品,原创内容未经授权不得随

    2024年02月15日
    浏览(39)
  • MySQL 三大日志(bin log、redo log、undo log)

    redo log (重做日志) 是 InnoDB 存储引擎独有的,它让 MySQL有了崩溃恢复的能力,是事务中实现 持久化的重要操作 比如 MySQL 实例宕机了,重启时, InnoDB 存储引擎会使用 redo log 恢复数据,保 证数据的持久性与完整性 。 MySQL 中数据时以页为单位,查询一条记录,会从硬盘中把该

    2024年02月07日
    浏览(53)
  • mysql开启bin log 并查看bin log日志(linux)

    参数说明:      

    2024年02月13日
    浏览(41)
  • Mysql开启bin-log日志

    目录 一、安装配置 二、mysqlbinlog命令   

    2024年02月20日
    浏览(52)
  • MySQL日志之binlog,redo log

    目录 1.binlog 概念: 作用: 格式: 写入操作: 2.redo log 概念: 作用: redo log在MySQL操作数据时的实现: 查询时: 更新时: 写入操作: 概念: 刷盘策略: 自动刷盘操作: binlog,记录所有语句的更新操作(即只要增删改,不包含查) 同步数据,保证 数据的一致性 statement:

    2024年02月16日
    浏览(43)
  • 必须了解的mysql三大日志-binlog、redo log和undo log

    MySQL实现事务、集群的主从复制,底层都离不开日志,所以日志是MySQL的精华所在。只有了解MySQL日志,才算是彻底搞懂MySQL 本文主要讲述MySQL的三大日志系统,Redo Log(重做日志)、Undo Log(恢复日志)、Bin Log(备份日志) Bin Log记录的是逻辑日志,即原始的SQL语句,是MySQL自

    2024年02月05日
    浏览(54)
  • MySQL知识学习03(三大日志详解 binlog、redo log、undo log)

    前言 MySQL 日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中,比较重要的还要属 二进制日志 binlog(归档日志) 和 事务日志 redo log(重做日志) 和 undo log(回滚日志) 。 1、redo log? redo log (重做日志)是 InnoDB 存储引擎独有的,它让

    2024年02月02日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包