侧边栏壁纸
博主头像
与晚风述往事博主等级

万般皆下品,唯有读书高。

  • 累计撰写 149 篇文章
  • 累计创建 29 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

MySQL mysql-audit插件的使用

与晚风述往事
2021-10-18 / 0 评论 / 0 点赞 / 599 阅读 / 4,725 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-10-18,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

介绍

mysql-audit是McAfee提供的一款开源插件,主要功能是为MySQL提供审计功能,旨在强调安全性和审计要求。

在mysql数据库中使用mysql-audit插件,需要注意的是,mysql-audit插件对mysql数据库的性能有较大的影响。因此,如果你的数据库没有强制要求,不建议使用此插件。

参数介绍

mysql-audit插件的可用参数有30多个,这些参数基本上都可以动态配置。下面简单介绍下这些参数的作用。

  • audit_before_after 指定插件是在执行当前SQL语句之前还是之后,或两者都有的情况下写入其日志文件,可选值有before、after和both。默认值为after。在1.1.2版本中引入。

  • audit_checksum 是否检验mysqld二进制文件,可选值有OFF|ON,存在audit_offsets参数时使用该参数。设置为ON时,指定的audit_offsets值和计算的校验值不匹配,则插件不会加载。该参数是静态参数(仅能通过配置文件中生效)。

  • audit_client_capabilities 如果启用,则插件以客户端功能位图的值作为未签名的64位值发送。默认值为OFF。在1.1.1版本中引入。

  • audit_delay_cmds

  • audit_delay_ms

  • audit_force_record_logins 指定强制审计connect、quit和failed login命令,无论audit_record_cmds和audit_record_objs中的值如何设置。可选值有OFF|ON,默认值OFF。在1.0.6版本中引入。

  • audit_header_msg 是否记录标题消息,可选值有OFF|ON,默认值为ON。在1.0.6版本中引入。

  • audit_json_file 是否启用审计,可选值有OFF|ON,设置为ON表示启用审计,审计写入到JSON文件中。

  • audit_json_file_bufsize 指定写入JSON日志文件的缓冲区大小(以字节为单位)。默认值为ON,当值设置为0时,表示默认大小。值设置为1时,表示无缓冲区,最大值为262144(256KB)。在记录大型语句(大于4KB的日志条目)时,较大值可能会提高性能。如果运行时更改,则执行刷新使新值生效。在1.0.8版本中引入。

  • audit_json_file_flush 日志刷新,可选值有OFF|ON,设置为ON表示日志刷新(关闭并重新打开日志),简单理解就是日志按一定规则进行切割。默认值为OFF。

  • audit_json_file_retry JSON日志文件重试间隔,默认值为60秒,设置为0表示禁用重试。如果插件无法打开或写入json日志文件,则以每audit_json_file_retry的时间间隔重试。在1.0.6版本中引入。

  • audit_json_file_sync JSON日志同步周期,默认值为0。如果此值大于0,则每audit_json_file_sync次写入后,审计日志同步到磁盘中。

  • audit_json_log_file JSON日志文件名,启用audit_json_file参数后,则会将审计日志写入到此文件中。参数值可以是mysql目录下的决对路径或相对路径,默认值是mysql-audit.json。

  • audit_json_socket 是否启用JSON套接字,可选值有OFF|ON。设置为ON表示启用审计,审计写入到UNIX套接字中。

  • audit_json_socket_name JSON套接字名,启用audit_json_socket参数后,则会将审计日志写入到此unix套接字中。

  • audit_json_socket_retry JSON套接字重试间隔。默认值为10秒,设置为0表示禁用重试。如果插件无法打开或写入json套接字,则以每audit_json_socket_retry的时间间隔重试。在1.0.6版本中引入。

  • audit_json_socket_write_timeout 写入JSON套接字超时时间,默认值1000毫秒(1秒)。值设置为0表示禁用超时。在1.1.3版本中引入此参数。

  • audit_offsets 指定mysql数据库的偏移量。

  • audit_offsets_by_version

  • audit_password_masking_cmds 指定以正则表达式屏蔽密码的命令列表(简单理解就是不审计这些可能包含密码的语句),多个以英文逗号分隔。默认值是可能包含密码的mysql命令是:
    CREATE_USER,GRANT,SET_OPTION,SLAVE_START,CREATE_SERVER,ALTER_SERVER,CHANGE_MASTER。
    在1.0.6版本中引入。

  • audit_password_masking_regex 指定用于密码屏蔽的正则表达式。此正则表达式仅用于audit_password_masking_cmds参数。在1.0.6版本中引入。

  • audit_record_cmds 指定审计的命令列表,多个使用英文逗号分隔,用于记录到审计中。例如insert,update,delete。

  • audit_record_objs 指定审计的对象列表,多个使用英文逗号分隔,用于记录到审计中。支持通配符*,支持{}表示没有对象的情况。

  • audit_sess_connect_attrs 是否发送会话连接属性。可选值有OFF|ON,默认值为ON。在1.1.1版本中引入。

  • audit_socket_creds 是否发送客户端进程的信息,例如:PID、应用程序名称等。可选值有OFF|ON,默认值为ON。在1.1.2版本中引入。

  • audit_uninstall_plugin 是否禁用卸载AUDIT插件,可选值有OFF|ON。禁用后,无法使用uninstall命令卸载该插件。该参数是静态参数(仅能通过配置文件中生效)。

  • audit_validate_checksum 是否进行mysqld二进制校验和验证,可选值有OFF|ON。

  • audit_validate_offsets_extended

  • audit_whitelist_cmds 未记录查询的白名单命令列表,多个以英文逗号分隔。在1.0.6版本中引入。

  • audit_whitelist_users 未记录查询的白名单用户列表,多个使用英文逗号分隔。指定{}作为列表的一部分以包含空用户。

安装

1、下载mysql-audit插件

要想使用mysql-audit审计插件,首先需要确定mysql的版本。例如我这里mysql是5.7版本,则我需要下载对应mysql 5.7版本的mysql-audit。

github的mysql-audit插件地址:https://github.com/mcafee/mysql-audit

mysql_mysql_audit_1

2、将插件上传至服务器

下载好mysql-audit插件后,我们需要将其上传到运行mysql的服务器中。通常我个人喜欢上传到/usr/local/src目录,并且我这里的mysql就是安装在这里。

3、解压包并拷贝so文件

上传后需要解压zip包,解压后将lib目录下的so文件复制到mysql数据库的默认插件目录中。如果不清楚mysql插件目录的位置,则可以登录到mysql命令窗口查询参数【plugin_dir】。

解压包

[root@localhost src]# unzip audit-plugin-mysql-5.7-1.1.9-974-linux-x86_64.zip

拷贝文件至mysql插件目录

[root@localhost src]# cp audit-plugin-mysql-5.7-1.1.9-974/lib/libaudit_plugin.so /usr/local/src/mysql/lib/plugin/

4、安装

拷贝到mysql数据库的插件目录后,就可以进入mysql命令窗口安装了。

进入mysql命令窗口

[root@localhost src]# mysql/bin/mysql -uroot -p

安装插件

mysql> INSTALL PLUGIN AUDIT SONAME 'libaudit_plugin.so';

安装错误解决

1、Can't initialize function 'AUDIT'; Plugin initialization function failed

下面是github上的原文:

AUDIT插件使用编译的偏移量来访问未通过一致 API公开的内置MySQL数据结构。偏移量的使用用于通过单个二进制分发支持多个 MySQL 版本。该插件将根据MySQL服务器版本使用适当的偏移量。为了验证插件是否在我们知道并测试了偏移量的MySQL版本上运行,我们在mysqld二进制文件上添加了校验和验证。因此,如果正在使用我们尚未提取偏移量和校验和的 MySQL 服务器分发版,则插件将无法安装,因为 mysqld 的校验和与已知校验和不匹配。
通常,对于特定版本,不同MySQL发行版之间的偏移量是相同的。 因此,可以使用特定MySQL服务器版本的偏移量运行AUDIT插件而无需校验和验证。

解决:

在动态安装时报错,就需要先查看报错的日志路径。

查看日志路径

mysql> show global variables like 'log_error';

查看日志

[root@localhost src]# vim /usr/local/mysql/mysql.log

mysql_mysql_audit_2

从日志文件中看到的确是THD offsets(偏移量)引起的问题,从github上我们得知,对于某些尚未提取偏移量和校验和的MySQL服务器分发版,可以关闭校验和验证,手动使用脚本计算偏移量。

授权计算偏移量脚本

[root@localhost src]# chmod +x audit-plugin-mysql-5.7-1.1.9-974/utils/offset-extract.sh

计算mysql数据库偏移量

[root@localhost src]# audit-plugin-mysql-5.7-1.1.9-974/utils/offset-extract.sh /usr/local/src/mysql/bin/mysqld

mysql_mysql_audit_3

配置my.cnf参数

配置参数时,需要注意这三个参数时配置在[mysqld]参数下面。

[root@localhost src]# vim /etc/my.cnf

audit_validate_checksum=OFF
plugin-load=AUDIT=libaudit_plugin.so
audit_offsets=7832, 7880, 3640, 4800, 456, 360, 0, 32, 64, 160, 544, 7996, 4368, 3648, 3656, 3660, 6080, 2072, 8, 7064, 7104, 7088, 13480, 148, 672, 0

mysql_mysql_audit_4
参数说明:

  • audit_validate_checksum 禁用mysqld二进制文件校验和验证
  • plugin-load 插件加载
  • audit_offsets 偏移量

关闭mysql数据库

[root@localhost src]# mysql/bin/mysqladmin -uroot -p shutdown

后台进程启动数据库

[root@localhost src]# mysql/bin/mysqld_safe &

mysql_mysql_audit_5
数据库启动成功后,连接到mysql命令窗口,查看数据库参数【audit_json_file】值,如果能够看到参数值,则表示插件已经静态安装成功,否则需要重新检查是否有按步骤执行。

插件配置成功后,接下来我们就可以随意的使用插件了。

0

评论区