暂无图片
暂无图片
1
暂无图片
暂无图片
1
暂无图片

mysql5.7安装审计日志插件server_audit

叶同学专栏 2021-07-25
4285

背景

Oracle 的 MySQL 社区版不带审计插件(Audit Plugin),要想使用审计功能,可以用企业版的mysql或其它一些 GPL 协议的审计插件,这里选择 MariaDB 的审计插件来实操。

安装环境

mysql版本:mysql5.7.24

注:经验证使用mysql5.7.34安装该插件存在兼容情况,导致数据库服务行异常

安装审计插件

MariaDB 的 10.1 版本对应与 Oracle 的 MySQL 5.7,下载下来并解压

下载地址

https://mariadb.com/kb/en/mariadb-server-10-1-46/

复制

解压并找到需要的审计插件

[root@yejf]/opt# tar -zxvf mariadb-10.1.46-linux-systemd-x86_64.tar.gz
[root@yejf]/opt/mariadb-10.1.46-linux-systemd-x86_64/lib/plugin# ll /opt/mariadb-10.1.46-linux-systemd-x86_64/lib/plugin/server_audit.so
-rw-r--r-- 1 postgres sdbadmin_group 2408月   6 2020 /opt/mariadb-10.1.46-linux-systemd-x86_64/lib/plugin/server_audit.so

复制

查看mysql的插件目录

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

复制

把这个so文件拷贝到mysql的插件目录

[root@yejf]/opt/mariadb-10.1.46-linux-systemd-x86_64/lib/plugin# cp /opt/mariadb-10.1.46-linux-systemd-x86_64/lib/plugin/server_audit.so /usr/local/mysql/lib/plugin/
[root@yejf]/opt/mariadb-10.1.46-linux-systemd-x86_64/lib/plugin# chown -R mysql:mysql /usr/local/mysql/lib/plugin/server_audit.so

复制

加载插件

mysql> install plugin server_audit SONAME 'server_audit.so';
Query OK, 0 rows affected (0.00 sec)

--或者编辑/etc/my.cnf添加
[mysqld]
plugin-load=server_audit=server_audit.so

复制

查看加载的插件

mysql> show plugins;
+----------------------------+----------+--------------------+-----------------+---------+
| Name                       | Status   | Type               | Library         | License |
+----------------------------+----------+--------------------+-----------------+---------+
...
| SERVER_AUDIT               | ACTIVE   | AUDIT              | server_audit.so | GPL     |
+----------------------------+----------+--------------------+-----------------+---------+
45 rows in set (0.00 sec)

复制

使用审计插件

查看相关的配置

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              |
+-------------------------------+-----------------------+

复制

开启审计日志

mysql> set GLOBAL server_audit_logging=on;
Query OK, 0 rows affected (0.00 sec)

复制

开启后可以在数据目录下查看生成的审计日志文件

[mysql@yejf mysql5.7data]$ tail -100f server_audit.log 20210722 11:17:26,yejf,root,localhost,2,12,QUERY,,'set GLOBAL server_audit_logging=on',0

复制

在数据库中进行sql操作

mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || mysql              || performance_schema || sys                |+--------------------+4 rows in set (0.06 sec)mysql> create database test;Query OK, 1 row affected (0.00 sec)mysql> use test;Database changedmysql> create table tmp as select 1,2,3;Query OK, 1 row affected (0.01 sec)Records: 1  Duplicates: 0  Warnings: 0mysql> exitBye

复制

可以看到所有扣分都会在审计日志中记录,记录的信息包括有时间,服务器主机,用户,ip,对应数据库名及query语句,还有连接的情况

[mysql@yejf mysql5.7data]$ tail -100f server_audit.log 20210722 11:17:26,yejf,root,localhost,2,12,QUERY,,'set GLOBAL server_audit_logging=on',020210722 11:18:37,yejf,root,localhost,2,13,QUERY,,'show databases',020210722 11:18:54,yejf,root,localhost,2,14,QUERY,,'create database test',020210722 11:18:56,yejf,root,localhost,2,15,QUERY,,'SELECT DATABASE()',020210722 11:18:56,yejf,root,localhost,2,17,QUERY,test,'show databases',020210722 11:18:56,yejf,root,localhost,2,18,QUERY,test,'show tables',020210722 11:19:13,yejf,root,localhost,2,19,QUERY,test,'create table tmp as select 1,2,3',020210722 11:21:51,yejf,root,localhost,2,0,DISCONNECT,test,,0

复制

记录的格式是

[timestamp],[serverhost],[username],[host],[connectionid],[queryid],[operation],[database],[object],[retcode]

复制

配置重启生效

前面的设置审计,当数据库重启后就会失效了

[mysql@yejf ~]$ service  mysql restartShutting down MySQL.. SUCCESS! Starting MySQL. SUCCESS! [mysql@yejf ~]$ mysql -uroot -prootmysql> 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)

复制

为了能够重启生效,需要把配置添加到配置文件/etc/my.cnf

[root@yejf]~mysql# cat /etc/my.cnf[client]user=rootpassword=rootport = 3306[mysqld]##添加项##server_audit_logging = ON                  #开启日志记录,默认是关闭server_audit = FORCE_PLUS_PERMANENT        #防止插件被卸载server_audit_file_path = server_audit.log  #定义审计日志文件名server_audit_file_rotate_now = OFF         #是否强制切割审计日志server_audit_file_rotate_size = 1073741824 #定义切割审计日志的文件大小1073741824=1GBserver_audit_file_rotations = 0            #定义审计日志的轮询个数,0为不轮询

复制

参数说明

可参考官网

https://mariadb.com/kb/en/mariadb-audit-plugin-options-and-system-variables/

复制

server_audit_events

省略值全部事件类型都会记录到审计日志中,可选择事件类型才记录。

如 server_audit_events = query,table,query_ddl,query_dml

事件类型

  • CONNECT:连接、断开连接和失败的连接,包括错误代码

  • QUERY:以纯文本形式执行的查询及其结果,包括由于语法或权限错误而失败的查询

  • TABLE:受查询执行影响的表

  • QUERY_DDL:与QUERY相同,但只筛选DDL类型的查询(create、alter、drop、rename和truncate语句,create/drop[procedure/function/user]和rename user除外(它们不是DDL)

  • QUERY_DML:与QUERY相同,但只筛选DML类型的查询(do、call、load data/xml、delete、insert、select、update、handler和replace语句)

  • QUERY_DCL:与QUERY相同,但只筛选DCL类型的查询(create user、drop user、rename user、grant、revoke和set password语句)

  • QUERY_DML_NO_SELECT:与QUERY_DML相同,但不记录SELECT查询。(从1.4.4版开始)(do、call、load data/xml、delete、insert、update、handler和replace语句)

server_audit_excl_users

该列表的用户[行为]将不记录,connect信息将不受该设置影响

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

启动或关闭审计ON/OFF

server_audit_mode

标识版本,用于开发测试

server_audit_output_type

指定日志输出类型,可为SYSLOG或FILE,当为syslog时记录到/var/log/messages

server_audit_query_log_limit

1024

server_audit_syslog_facility

LOG_USER

server_audit_syslog_ident

mysql-server_auditing

mysql-server_auditing

server_audit_syslog_info

server_audit_syslog_priority

LOG_INFO


文章转载自叶同学专栏,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

getaobib
暂无图片
3年前
评论
暂无图片 0
5.7.34不能安装MariaDB审计插件,不知道有什么解决办法没有?
3年前
暂无图片 点赞
评论