小编揭示:拿MariaDB的so去MySQL里install,这种形式很容易导致 audit plugin工作异样,不举荐这么做。强烈建议应用GreatSQL,自带 audit plugin。

前言

数据库审计性能次要将用户对数据库的各类操作行为记录审计日志,以便日后进行跟踪、查问、剖析,以实现对用户操作的监控和审计。审计是一项十分重要的工作,也是企业数据安全体系的重要组成部分,等保测评中也要求有审计日志。对于 DBA 而言,数据库审计也极其重要,特地是产生人为事变后,审计日志便于进行责任追溯,问题查找。

以后 MySQL 社区版本并没有提供相干的插件应用,尽管 MySQL 提供有 binlog 及 general log ,这二者尽管具备局部审计性能,但个别不当做审计日志来对待。

常见的审计插件有 MariaDB Audit Plugin、Percona Audit Log Plugin、McAfee MySQL Audit Plugin 三种,MariaDB 自带的审计插件比拟适宜用于 MySQL 社区版,上面咱们来学习下如何应用审计插件来实现审计性能。

首先咱们须要装置一个MySQL,该步骤就先跳过一下。

MariaDB Auditing Plugin的装置

MariaDB 审计插件的名称是 server_audit.so(Windows零碎下是 server_audit.dll ),要留神的是,审计插件始终在更新,不同版本的审计插件性能也不同,举荐应用 >= 1.4.4 版本的插件。

因为 MariaDB Auditing Plugin 集成在MariaDB外面,没有独自提供,所以咱们须要先下载一个MariaDB。

上面咱们以 CentOS 零碎 MySQL 5.7 版本为例来装置下审计插件:

MariaDB下载地址:https://mariadb.com/kb/en/pos...

进入plugin子目录,查看下是否要另外装置依赖

#tar xvpf tar xvpf mariadb-5.5.64-linux-systemd-x86_64.tar.gz#cd mariadb-10.2.44-linux-systemd-x86_64/lib/plugin#ldd server_audit.soldd: warning: you do not have execution permission for `./server_audit.so'        linux-vdso.so.1 =>  (0x00007ffdc613d000)        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2b1c722000)        libc.so.6 => /lib64/libc.so.6 (0x00007f2b1c354000)        /lib64/ld-linux-x86-64.so.2 (0x00007f2b1cb4f000)

查看MySQL plugin的寄存地址

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

将mariadb 的审计插件 server_audit.so文件复制到该门路下,并更改插件属主及权限

#cp server_audit.so /usr/local/mysql57/lib/plugin/#chmod +x /usr/local/mysql57/lib/plugin/server_audit.so#chown mysql.mysql /usr/local/mysql57/lib/plugin/server_audit.so

在线装置插件

mysql> INSTALL PLUGIN server_audit SONAME 'server_audit.so';Query OK, 0 rows affected (0.08 sec)mysql> show plugins;+----------------------------+--------+--------------------+-----------------+---------+| Name                       | Status | Type               | Library         | License |+----------------------------+--------+--------------------+-----------------+---------+...| SERVER_AUDIT               | ACTIVE | AUDIT              | server_audit.so | GPL     |+----------------------------+--------+--------------------+-----------------+---------+

查看audit相干参数

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              |+-------------------------------+-----------------------+16 rows in set (0.00 sec)

参数阐明

  • server_audit_events:指定记录事件的类型,能够用逗号分隔的多个值(connect,query,table),默认为空代表审计所有事件
  • server_audit_excl_users:用户白名单,该列表中的用户行为将不记录
  • 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:启动或敞开审计,默认OFF,启动 ON
  • server_audit_mode:标识版本,用于开发测试
  • server_audit_output_type:指定日志输入类型,可为SYSLOG或FILE
  • server_audit_query_log_limit: 记录中查问字符串的长度限度。默认为1024
  • server_audit_syslog_facility:默认为LOG_USER,指定facility
  • server_audit_syslog_ident:设置ident,作为每个syslog记录的一部分
  • server_audit_syslog_info:指定的info字符串将增加到syslog记录
  • server_audit_syslog_priority:定义记录日志优先级

启用审计性能

set global server_audit_logging=on;set global server_audit_events='connect,query,table,query_ddl,query_dcl,query_dml_no_select';set global server_audit_file_path='/var/log/server_audit.log';set global server_audit_file_rotate_size=104857600;

[mysqld]下增加以下配置,使得配置永恒失效:

server_audit_logging=onserver_audit_events=connect,query,table,query_ddl,query_dcl,query_dml_no_selectserver_audit_file_path=/var/log/server_audit.logserver_audit_file_rotate_size=104857600

功能测试

从另外一台近程连贯到数据库上,执行一些操作

[root@mgr2 ~]# mysql -uauth -p123456 -h192.168.***.*** -P***mysql: [Warning] Using a password on the command line interface can be insecure.Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 3Server version: 5.7.26-log Source distributionCopyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || mysql              || performance_schema || sys                |+--------------------+4 rows in set (0.00 sec)mysql> create database test;Query OK, 1 row affected (0.03 sec)mysql> use test;Database changedmysql> create  table t1(id int);Query OK, 0 rows affected (0.09 sec)mysql> insert into t1  values (1);Query OK, 1 row affected (0.02 sec)mysql> delete from t1 where id=1;Query OK, 1 row affected (0.03 sec)mysql> exitBye[root@mgr2 ~]# mysql -uauth -p12345 -h192.168.***.*** -P***mysql: [Warning] Using a password on the command line interface can be insecure.ERROR 1045 (28000): Access denied for user 'auth'@'192.168.***.*** (using password: YES)

查看相应日志降级对应的操作记录

20220723 21:28:34,mgr3,auth,192.168.*.*,3,0,CONNECT,,,020220723 21:28:34,mgr3,auth,192.168.*.*,3,9,QUERY,,'select @@version_comment limit 1',020220723 21:28:47,mgr3,auth,192.168.*.*,3,10,QUERY,,'show databases',020220723 21:28:57,mgr3,auth,192.168.*.*,3,11,QUERY,,'create database test',020220723 21:28:59,mgr3,auth,192.168.*.*,3,12,QUERY,,'SELECT DATABASE()',020220723 21:28:59,mgr3,auth,192.168.*.*,3,14,QUERY,test,'show databases',020220723 21:28:59,mgr3,auth,192.168.*.*,3,15,QUERY,test,'show tables',020220723 21:29:09,mgr3,auth,192.168.*.*,3,16,QUERY,test,'create  table t1(id int)',020220723 21:29:17,mgr3,auth,192.168.*.*,3,17,QUERY,test,'insert into t1  values (1)',020220723 21:29:24,mgr3,auth,192.168.*.*,3,18,QUERY,test,'delete from t1 where id=1',020220723 21:29:48,mgr3,auth,192.168.*.*,3,0,DISCONNECT,test,,020220723 21:29:59,mgr3,auth,192.168.*.*,4,0,FAILED_CONNECT,,,1045

至此,咱们实现审计插件的初步应用,从审计日志内容中咱们能够看出,记录的格局还是很清晰具体的,每列内容都是须要的,依据日志很容易查到对应的操作。不过审计插件也是有优缺点的,优劣势整顿如下:

server_audit 审计插件劣势:

  • 丰盛的审计内容:包含用户连贯,敞开,DML操作,存储过程,触发器,事件等。
  • 灵便的审计策略:能够自定义审计事件,例如过滤掉select查问,或者排除审计某个用户等。
  • 灵便不便:收费应用且装置不便,能够在线开启和停用审计性能。

server_audit 审计插件劣势:

  • 开启审计会减少数据库的性能开销,并占用磁盘空间。
  • 日志格局不够丰盛,不能自定义输入格局。

Enjoy GreatSQL :)

## 对于 GreatSQL

GreatSQL是由万里数据库保护的MySQL分支,专一于晋升MGR可靠性及性能,反对InnoDB并行查问个性,是实用于金融级利用的MySQL分支版本。

相干链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

社区博客有奖征稿详情:https://greatsql.cn/thread-10...

技术交换群:

微信:扫码增加GreatSQL社区助手微信好友,发送验证信息加群