Mysql5.6审计功能_MySQL
程序员文章站
2022-05-21 18:13:30
...
1. 前言
为了安全和操作的可追溯性考虑,越来越多的公司加入了审计功能。mysql5.5推出了相关的审计功能,到5.6.20功能进一步完善,算是勉强可用了,虽然细粒度方面做的不是太好,但是后续版本还是可以期待一下的。这里主要介绍下相关的功能和特性。2. 开启审计
2.1 配置文件加载
mysql5.6中的审计是通过audit_log插件来实现的,我们可以在配置文件中加载该插件来开启。[mysqld] plugin-load=audit_log.so
如果希望数据库强制开启审计功能,如果不开启的话server不启动,或者审计功能不能进行时server挂住,加入
[mysqld] plugin-load=audit_log.so audit-log=FORCE_PLUS_PERMANENT
2.2 加载插件列表
审计功能的开启还有另外一种方式,就是在命令行中安装审计插件。确保在数据库的插件目录中存在audit_log.so。[i686数据库的插件目录默认是/usr/lib/mysql/plugin,中,也可以指定参数plugin_dir]mysql> INSTALL PLUGIN audit_log SONAME 'audit_log.so';
3. 参数介绍
审计参数如下:3.1 audit_log_buffer_size
audit_log_buffer_size :审计缓存,建议设置为4096的倍数,该参数只有在audit_log_strategy为ASYNCHRONOUS时生效。3.2 audit_log_connection_policy
audit_log_connection_policy:记录了连接审计的信息。包含三个参数Value | Description |
---|---|
ALL |
Log all connection events |
ERRORS |
Log only failed connection events |
NONE |
Do not log connection events |
3.3 audit_log_current_session
audit_log_current_session:标志当前会话是否进入审计,是个只读参数,只能通过 audit_log_exclude_accounts和 audit_log_include_accounts来控制哪儿些进入会话审计。3.4 audit_log_exclude_accounts/audit_log_include_accounts
audit_log_exclude_accounts:控制哪儿些用户可以不进入审计,字符串类型,默认可以使用逗号分隔。audit_log_include_accounts:控制哪儿些用户可以进入审计,字符串类型,默认可以使用逗号分隔。
exclude和include同时只有一个参数生效。
3.5 audit_log_file
audit_log_file:可以用于控制审计日志的名称和路径。3.6 audit_log_flush
audit_log_flush:控制审计日志的归档,只有在audit_log_rotate_on_size=0的时候生效,在手工重命名审计日志归档后,可以指定audit_log_flush=1来生成新的审计日志。3.7 audit_log_format
audit_log_format:审计日志的格式,分为OLD和NEW(NEW格式在5.6.14才出现)。当更改格式的时候需要进行3个步骤:1 :关闭数据库 2:重命名当前的audit.log文件
3:更改audit_log_format参数,并重启mysql,重启后会自动生成一个新的audit.log文件
防止NEW格式和OLD格式在同一个审计日志中,会导致审计功能错误。 audit_log_policy :记录了审计日志的控制策略:
Value | Description |
---|---|
ALL |
Log all events |
LOGINS |
Log only login events |
QUERIES |
Log only query events |
NONE |
Log nothing (disable the audit stream |
3.8 audit_log_statement_policy
audit_log_statement_policy:记录了语句的审计策略,可能会被audit_log_policy给覆盖:Value | Description |
---|---|
ALL |
Log all statement events |
ERRORS |
Log only failed statement events |
NONE |
Do not log statement events |
3.9 audit_log_rotate_on_size
audit_log_rotate_on_size:审计日志的文件大小。当参数大于0的时候,当审计日志超过限制后,会自动的重命名为加时间戳后缀的日志文件。同时创建新的审计日志。3.10 audit_log_strategy
audit_log_strategy:审计日志的刷新策略分为:Value | Meaning |
---|---|
ASYNCHRONOUS |
Log asynchronously, wait for space in output buffer |
PERFORMANCE |
Log asynchronously, drop request if insufficient space in output buffer |
SEMISYNCHRONOUS |
Log synchronously, permit caching by operating system |
SYNCHRONOUS |
Log synchronously, call sync() after each request
|
4. 日志格式
审计日志格式是XML的形式,NEW要比OLD的标签详细一些。具体的标签信息如下: 实例:2013-09-17T15:03:24 UTC 1_2013-09-17T15:03:24 Audit 1 1 /usr/local/mysql/bin/mysqld --socket=/usr/local/mysql/mysql.sock --port=3306 x86_64-osx10.6 5.7.2-m12-log 2013-09-17T15:03:40 UTC 2_2013-09-17T15:03:24 Connect 2 0 0 root localhost 127.0.0.1 connect root test ...2013-09-17T15:03:41 UTC 4_2013-09-17T15:03:24 Query 2 0 0 root[root] @ localhost [127.0.0.1] localhost 127.0.0.1 drop_table DROP TABLE IF EXISTS t 2013-09-17T15:03:41 UTC 5_2013-09-17T15:03:24 Query 2 0 0 root[root] @ localhost [127.0.0.1] localhost 127.0.0.1 create_table CREATE TABLE t (i INT) ...2013-09-17T15:03:41 UTC 7_2013-09-17T15:03:24 Quit 2 0 0 connect ...2013-09-17T15:03:47 UTC 9_2013-09-17T15:03:24 Shutdown 3 0 0 root[root] @ localhost [127.0.0.1] localhost 127.0.0.1 2013-09-17T15:03:47 UTC 10_2013-09-17T15:03:24 Quit 3 0 0 connect 2013-09-17T15:03:49 UTC 11_2013-09-17T15:03:24 NoAudit 1
:文件的根标签为,并以 为结束标签
:包含一系列的必选标签和可选标签,可选标签是否出现取决于audit record类型。
以下标签audit record类型决定是否出现