iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL审计插件MariaDB Audit Plugin学习总结
  • 690
分享到

MySQL审计插件MariaDB Audit Plugin学习总结

MySQL审计插件MariaDBAuditPlugin学习总结 2016-09-24 04:09:01 690人浏览 绘本
摘要

Mysql的社区版没有审计功能,企业版才有审计功能。企业版中自带 Audit Plugin ,名为audit_log.so。但是其它mysql分支版本也开发了各自的审计功能插件。最常见的就是Percona Audit Log Pl

MySQL审计插件MariaDB Audit Plugin学习总结

Mysql的社区版没有审计功能,企业版才有审计功能。企业版中自带 Audit Plugin ,名为audit_log.so。但是其它mysql分支版本也开发了各自的审计功能插件。最常见的就是Percona Audit Log Plugin、MariaDB Audit Plugin、当然还有通用插件McAfee Mysql Audit Plugin。 如果MySQL社区版想上审计功能的话,能否使用这三个插件呢?答案是社区版MySQL可以使用MariaDB Audit Plugin和McAfee MySQL Audit Plugin,Percona Audit Log Plugin是仅供Percona Server使用的免费插件,下面我们来学习总结一下,在MySQL社区版中如何使用MariaDB Audit Plugin插件来做数据库的跟踪、审计。

 

插件介绍

 

下面是官方网址关于MariaDB Audit Plugin的介绍,更多资料请参考https://mariadb.com/kb/en/mariadb-audit-plugin/

MariaDB and MySQL are used in a broad range of environments, but if you needed to record user access to be in compliance with auditing regulations for your organization, you would previously have had to use other database solutions. To meet this need, though, MariaDB has developed the MariaDB Audit Plugin. Although the MariaDB Audit Plugin has some unique features available only for MariaDB, it can be used also with MySQL.

Basically, the purpose of the MariaDB Audit Plugin is to log the server"s activity. For each client session, it records who connected to the server (i.e., user name and host), what queries were executed, and which tables were accessed and server variables that were changed. This infORMation is stored in a rotating log file or it may be sent to the local syslogd.

The MariaDB Audit Plugin works with MariaDB, MySQL (as of, version 5.5.34 and 10.0.7) and Percona Server. MariaDB started including by default the Audit Plugin from versions 10.0.10 and 5.5.37, and it can be installed in any version from MariaDB 5.5.20.

 

 

插件下载

  目前而言,官方并没有提供单独MariaDB Audit Plugin下载地址,所以你必须下载MariaDB的安装包,然后从安装包中找到插件的文件。

 

官方下载地址:

 

    Https://downloads.mariadb.org/mariadb/+releases/

 

这里我们下载mariadb-5.5.64-linux-systemd-x86_64.tar.gz测试验证一下。插件server_audit.so一般位于目录./lib/plugin下面。

 

 

 

插件安装

 

 

MySQL的插件必须放在plugin_dir目录下面,所以首先查看当前社区版本MySQL的系统变量plugin_dir(插件路径)

 

mysql> select version() from dual;
+------------+
| version()  |
+------------+
| 5.7.21-log |
+------------+
1 row in set (0.00 sec)
 
mysql> show variables like "plugin_dir";
+---------------+--------------------------+
| Variable_name | Value                    |
+---------------+--------------------------+
| plugin_dir    | /usr/lib64/mysql/plugin/ |
+---------------+--------------------------+
1 row in set (0.01 sec)
 
mysql> 

 

将server_audit.so文件拷贝到系统变量plugin_dir对应的目录下面。

 

# cd /tmp
# tar -xzvf mariadb-5.5.64-linux-systemd-x86_64.tar.gz 
# cd mariadb-5.5.64-linux-systemd-x86_64
# find ./ -name "server_audit.so"
./lib/plugin/server_audit.so
 
# cp /tmp/mariadb-5.5.64-linux-systemd-x86_64/lib/plugin/server_audit.so /usr/lib64/mysql/plugin/
# chmod +x server_audit.so 

 

 

在安装MySQL插件MariaDB Audit Plugin前,先确认系统glibc版本是否匹配编译server_audit.so的glibc版本。MariaDB一般多使用2.14版glibc进行编译。如果没有2.14版本的glibc,很有可能出现下面错误,如下所示: 

 

# strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE
 
mysql> INSTALL PLUGIN server_audit SONAME "server_audit.so";
ERROR 1126 (HY000): Can"t open shared library "/usr/lib64/mysql/plugin/server_audit.so" (errno: 2 /lib64/libc.so.6: version `GLIBC_2.14" not found (required by /usr/lib64/mysql/plugin/server_audit.so))
mysql>

 

 

安装glibc2.14,简单步骤如下,安装glibc2.14可能会遇到一些问题,此篇不做展开讲述。

 

# wget -c http://ftp.gnu.org/gnu/libc/glibc-2.14.tar.gz
# tar -zxvf glibc-2.14.tar.gz 
# cd glibc-2.14
# mkdir build
# cd build
# ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
#make && make install

 

安装完成后,验证是否安装成功。

 

# ll /lib64/libc.so.6
lrwxrwxrwx 1 root root 12 May 23 18:28 /lib64/libc.so.6 -> libc-2.14.so
# strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_PRIVATE

 

 

注意,安装完2.14版本的glibc后,必须重启MySQL,否则在安装补丁过程中,依然报上面错误

 

mysql> INSTALL PLUGIN server_audit SONAME "server_audit.so";
ERROR 1126 (HY000): Can"t open shared library "/usr/lib64/mysql/plugin/server_audit.so" (errno: 2 /lib64/libc.so.6: version `GLIBC_2.14" not found (required by /usr/lib64/mysql/plugin/server_audit.so))

 

 

重启MySQL实例后,安装成功。如下所示:

 

mysql> INSTALL PLUGIN server_audit SONAME "server_audit.so";
Query OK, 0 rows affected (0.02 sec)
mysql> SELECT PLUGIN_NAME, PLUGIN_LIBRARY, PLUGIN_STATUS, LOAD_OPTION 
    -> FROM INFORMATION_SCHEMA.PLUGINS 
    -> WHERE PLUGIN_LIBRARY = "server_audit.so";
+--------------+-----------------+---------------+-------------+
| PLUGIN_NAME  | PLUGIN_LIBRARY  | PLUGIN_STATUS | LOAD_OPTION |
+--------------+-----------------+---------------+-------------+
| SERVER_AUDIT | server_audit.so | ACTIVE        | ON          |
+--------------+-----------------+---------------+-------------+
1 row in set (0.00 sec)

 

关于插件MariaDB Audit Plugin 目前的版本信息,如下所示

 

Version

Introduced

1.4.7

MariaDB 10.1.41, MariaDB 10.2.26, MariaDB 10.3.17, MariaDB 10.4.7

1.4.5

MariaDB 10.2.24, MariaDB 10.3.15, MariaDB 10.4.5

1.4.4

MariaDB 5.5.61, MariaDB 10.0.36, MariaDB 10.1.34, MariaDB 10.2.15, MariaDB 10.3.7, MariaDB 10.4.0

1.4.0

MariaDB 5.5.48, MariaDB 10.0.24, MariaDB 10.1.11

1.3.0

MariaDB 5.5.43, MariaDB 10.0.18, MariaDB 10.1.5

1.2.0

MariaDB 5.5.42, MariaDB 10.0.17, MariaDB 10.1.4

1.1.7

MariaDB 5.5.38, MariaDB 10.0.11, MariaDB 10.1.0

1.1.6

MariaDB 5.5.37, MariaDB 10.0.10

1.1.5

MariaDB 10.0.09

1.1.4

MariaDB 5.5.36

1.1.3

MariaDB 5.5.34, MariaDB 10.0.7

 

我们这里从mariadb-5.5.64拷贝的插件文件,所以MariaDB Audit Plugin的版本为 1.4.4。 具体参考官方文档https://mariadb.com/kb/en/mariadb-audit-plugin-versions/

 

 

参数说明

 

如下所示可以查看MariaDB Audit Plugin的相关参数。用命令设置或在参数文件my.cnf中配置。

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)
 
 
mysql> SET GLOBAL server_audit_logging=ON;
Query OK, 0 rows affected (0.00 sec)

关于这些参数的具体定义,如下所示:

 

 

server_audit_events         

指定记录到日志的event类型,Type如下,具体请见下面截图(来自官方文档)。可以用逗号分隔的多个值(connect,query,table),如果开启了查询缓存(query cache),查询直接从查询缓存返回数据,将没有table记录

 

clip_image001

 

参数server_audit_events的有效值跟插件版本有关。

 

·         CONNECT, QUERY, TABLE (MariaDB Audit Plugin < 1.2.0)

·         CONNECT, QUERY, TABLE, QUERY_DDL, QUERY_DML (MariaDB Audit Plugin >= 1.2.0)

·         CONNECT, QUERY, TABLE, QUERY_DDL, QUERY_DML, QUERY_DCL (MariaDB Audit Plugin >=1.3.0)

·         CONNECT, QUERY, TABLE, QUERY_DDL, QUERY_DML, QUERY_DCL, QUERY_DML_NO_SELECT (MariaDB Audit Plugin >= 1.4.4)

 

server_audit_excl_users

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

server_audit_file_path      

审计日志路径,如果server_audit_output_type为FILE,审计日志默认存于数据目录下。即参数datadir对应的数据目录下面。如果修改server_audit_file_path,之前旧的审计日志文件不会被删除。需要手工去清理、删除

另外MySQL会开始新的审计日志轮转。

server_audit_file_rotate_now

强制轮转一次,执行脚本SET GLOBAL server_audit_file_rotate_now = ON;后,审计日志就会强制轮转一次。

server_audit_file_rotate_size

限制单个轮转审计日志大小,超出该限值后自动轮转。默认值为1000000,单位为byte,建议设置稍微大一点,例如,64M大小,67108864。具体根据实际需求和参数server_audit_file_rotations一起设定。

 

注意事项:如果你参数server_audit_file_rotations设定为1000000, 你会发现审计日志的实际大小跟这个参数有点出入。这个是正常的。因为没法精准控制,可能写入最后一条记录后,发现日志文件大小应该超过了1000000,进程立刻强制轮转。但是此时文件大小已经超过1000000了。

 

# ls -lrt server*
-rw-r----- 1 mysql mysql 1000048 May 25 05:25 server_audit.log.9
-rw-r----- 1 mysql mysql 1000451 May 25 09:02 server_audit.log.8
-rw-r----- 1 mysql mysql 1000602 May 25 09:35 server_audit.log.7
-rw-r----- 1 mysql mysql 1000816 May 25 09:42 server_audit.log.6
-rw-r----- 1 mysql mysql 1000616 May 25 09:50 server_audit.log.5
-rw-r----- 1 mysql mysql 1000721 May 25 09:55 server_audit.log.4
-rw-r----- 1 mysql mysql 1001032 May 25 10:02 server_audit.log.3
-rw-r----- 1 mysql mysql 1000867 May 25 10:06 server_audit.log.2
-rw-r----- 1 mysql mysql 1001079 May 25 10:12 server_audit.log.1
-rw-r----- 1 mysql mysql  570568 May 25 10:30 server_audit.log

 

官方文档关于参数的详细介绍位于https://mariadb.com/kb/en/mariadb-audit-plugin-options-and-system-variables/,这里简单总结一下这些参数。

 

server_audit_file_rotations 

轮转日志总数,当设为0表示审计日志不轮转。默认值为9。 一般需要根据实际需求进行修改。

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两种选择,默认为FILE

server_audit_query_log_limit

  记录中查询字符串的长度限制。默认为1024

server_audit_syslog_facility

  当审计日志类型为syslog模式时,它定义了将发送到系统日志的记录的功能。 以后可以使用此参数过滤日志。

server_audit_syslog_ident  

设置ident,作为每个syslog记录的一部分 

server_audit_syslog_info    

指定的info字符串将添加到syslog记录

server_audit_syslog_priority

定义记录日志的syslogd priority

 

 

 

默认情况下,日志记录设置为OFF。 要启用它,请将server_audit_logging变量设置为ON。请注意,如果启用了查询缓存,并且从查询缓存返回了查询,则由于服务器未打开或访问任何表而是依赖于缓存的结果,因此没有TABLE记录将出现在日志中。 因此,您可能要禁用查询缓存。更多参数的详细信息,参考官方文档https://mariadb.com/kb/en/mariadb-audit-plugin-options-and-system-variables/

 

 

简单测试

 

# mkdir -p /var/log/mysql_audit

# chown mysql:mysql /var/log/mysql_audit/

 

在参数文件my.cnf里面修改一些系统变量参数。如下所示

 

#############################MariaDB Audit Plugin####################################
plugin_load_add = server_audit
server_audit_logging=on
server_audit_events=CONNECT,TABLE,QUERY_DDL,QUERY_DCL,QUERY_DML_NO_SELECT
server_audit_file_path="/var/log/mysql_audit/"
server_audit_file_rotate_size=67108864
server_audit_file_rotations=128
 
#####################################################################################

 

这些参数只能在MySQL实例重启后才能生效,而生产环境一般也不能随随便便重启,所以策略一般是在修改my.cnf中参数的同时,然后使用命令修改这些插件的变量。

 

mysql> set global server_audit_file_path="/var/log/mysql_audit/";
Query OK, 0 rows affected (0.05 sec)
mysql> set global server_audit_events="CONNECT,TABLE,QUERY_DDL,QUERY_DCL,QUERY_DML_NO_SELECT";
Query OK, 0 rows affected (0.00 sec)
mysql> set global server_audit_file_rotations=128;
Query OK, 0 rows affected (0.00 sec)
mysql> set global server_audit_file_rotate_size=67108864;
Query OK, 0 rows affected (0.00 sec)
mysql>set global server_audit_logging=ON;
Query OK, 0 rows affected (0.00 sec)

 

 

然后你就能在审计日志中看到相关内容了。简单测试如下所示:

 

image

 

 

问题小结

 

1:MariaDB Audit Plugin安装到社区版MySQL,有些版本还有一些问题。因为MySQL版本众多,以及api接口的变化,导致MariaDB Audit Plugin有一些Bug,有一些已经Fix掉了,一些暂时还没有。

 

https://jira.mariadb.org/browse/MDEV-19396

https://jira.mariadb.org/browse/MDEV-9106

 

 

个人在测试时发现,MySQL 8.0.18安装mariadb-5.5.64下的MariaDB Audit Plugin插件是报下面错误:

 

mysql> INSTALL PLUGIN server_audit SONAME "server_audit.so";
ERROR 1126 (HY000): Can"t open shared library "/usr/lib64/mysql/plugin/server_audit.so" (errno: 2 /usr/lib64/mysql/plugin/server_audit.so: undefined symbol: my_printf_error)
mysql> 

 

 

2:不少MariaDB一般多使用2.14版glibc进行编译,所以安装插件需要依赖GLIBC_2.14组件

 

 

mysql> INSTALL PLUGIN server_audit SONAME "server_audit.so";
 
ERROR 1126 (HY000): Can"t open shared library "/usr/lib64/mysql/plugin/server_audit.so" (errno: 2 /lib64/libc.so.6: version `GLIBC_2.14" not found (required by /usr/lib64/mysql/plugin/server_audit.so))
 
mysql>

 

 

 

 

参考资料:

https://mariadb.com/kb/en/mariadb-audit-plugin-log-settings/

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

https://mariadb.com/kb/en/mariadb-audit-plugin-versions/

https://mariadb.com/kb/en/mariadb-audit-plugin/

您可能感兴趣的文档:

--结束END--

本文标题: MySQL审计插件MariaDB Audit Plugin学习总结

本文链接: https://www.lsjlt.com/news/6314.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle怎么查询当前用户所有的表
    要查询当前用户拥有的所有表,可以使用以下 sql 命令:select * from user_tables; 如何查询当前用户拥有的所有表 要查询当前用户拥有的所有表,可以使...
    99+
    2024-05-14
    oracle
  • oracle怎么备份表中数据
    oracle 表数据备份的方法包括:导出数据 (exp):将表数据导出到外部文件。导入数据 (imp):将导出文件中的数据导入表中。用户管理的备份 (umr):允许用户控制备份和恢复过程...
    99+
    2024-05-14
    oracle
  • oracle怎么做到数据实时备份
    oracle 实时备份通过持续保持数据库和事务日志的副本来实现数据保护,提供快速恢复。实现机制主要包括归档重做日志和 asm 卷管理系统。它最小化数据丢失、加快恢复时间、消除手动备份任务...
    99+
    2024-05-14
    oracle 数据丢失
  • oracle怎么查询所有的表空间
    要查询 oracle 中的所有表空间,可以使用 sql 语句 "select tablespace_name from dba_tablespaces",其中 dba_tabl...
    99+
    2024-05-14
    oracle
  • oracle怎么创建新用户并赋予权限设置
    答案:要创建 oracle 新用户,请执行以下步骤:以具有 create user 权限的用户身份登录;在 sql*plus 窗口中输入 create user identified ...
    99+
    2024-05-14
    oracle
  • oracle怎么建立新用户
    在 oracle 数据库中创建用户的方法:使用 sql*plus 连接数据库;使用 create user 语法创建新用户;根据用户需要授予权限;注销并重新登录以使更改生效。 如何在 ...
    99+
    2024-05-14
    oracle
  • oracle怎么创建新用户并赋予权限密码
    本教程详细介绍了如何使用 oracle 创建一个新用户并授予其权限:创建新用户并设置密码。授予对特定表的读写权限。授予创建序列的权限。根据需要授予其他权限。 如何使用 Oracle 创...
    99+
    2024-05-14
    oracle
  • oracle怎么查询时间段内的数据记录表
    在 oracle 数据库中查询指定时间段内的数据记录表,可以使用 between 操作符,用于比较日期或时间的范围。语法:select * from table_name wh...
    99+
    2024-05-14
    oracle
  • oracle怎么查看表的分区
    问题:如何查看 oracle 表的分区?步骤:查询数据字典视图 all_tab_partitions,指定表名。结果显示分区名称、上边界值和下边界值。 如何查看 Oracle 表的分区...
    99+
    2024-05-14
    oracle
  • oracle怎么导入dump文件
    要导入 dump 文件,请先停止 oracle 服务,然后使用 impdp 命令。步骤包括:停止 oracle 数据库服务。导航到 oracle 数据泵工具目录。使用 impdp 命令导...
    99+
    2024-05-14
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作