MySQL 8.0 安全部署指南  /  第 7 章安装 MySQL Enterprise Audit

第 7 章安装 MySQL Enterprise Audit

MySQL Enterprise Audit 支持对连接和查询活动进行标准的、基于策略的监控和记录,为受内部和外部监管准则约束的应用程序提供审核和合规性解决方案。

安装后,审计插件使 MySQL 服务器能够生成包含服务器活动审计记录的日志文件。日志内容包括客户端何时连接和断开连接,以及它们在连接时执行的操作,例如它们访问了哪些数据库和表。

安装插件后,它会写入一个审核日志文件。默认情况下,该文件已命名audit.log并位于数据目录中。

安装 MySQL Enterprise Audit:

  1. 运行 audit_log_filter_linux_install.sql位于shareMySQL 安装目录中的脚本。

    $> cd /usr/local/mysql
    $> bin/mysql -u root -p < /usr/local/mysql/share/audit_log_filter_linux_install.sql
    Enter password: (enter root password here)
    Result
    OK
  2. 通过以 root 身份登录并检查 INFORMATION_SCHEMA.PLUGINS表或使用SHOW PLUGINS 语句来验证插件安装。

    $> cd /usr/local/mysql 
    $> bin/mysqladmin -u root -p version
    Enter password: (enter root password here)
    mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
           FROM INFORMATION_SCHEMA.PLUGINS
           WHERE PLUGIN_NAME LIKE 'audit%';
    +-------------+---------------+
    | PLUGIN_NAME | PLUGIN_STATUS |
    +-------------+---------------+
    | audit_log   | ACTIVE        |
    +-------------+---------------+
  3. 为了防止插件在运行时被删除, 在 MySQL 配置文件 ( )--audit-log的选项组下添加选项, 设置为. [mysqld]/etc/my.cnfFORCE_PLUS_PERMANENT

    audit-log=FORCE_PLUS_PERMANENT
  4. 重新启动服务器以应用配置更改:

    $> systemctl restart mysqld
  5. 默认情况下,基于规则的审计日志过滤不会记录任何用户的可审计事件。要使用基于规则的过滤生成记录所有行为,请创建一个简单的过滤器以启用日志记录并将其分配给默认帐户:

    mysql> SELECT audit_log_filter_set_filter('log_all', '{ "filter": { "log": true } }');
    +-------------------------------------------------------------------------+
    | audit_log_filter_set_filter('log_all', '{ "filter": { "log": true } }') |
    +-------------------------------------------------------------------------+
    | OK                                                                      |
    +-------------------------------------------------------------------------+
    
    mysql> SELECT audit_log_filter_set_user('%', 'log_all');
    +-------------------------------------------------------------------------+
    | audit_log_filter_set_filter('log_all', '{ "filter": { "log": true } }') |
    +-------------------------------------------------------------------------+
    | OK                                                                      |
    +-------------------------------------------------------------------------+

    分配给的过滤器%用于来自没有明确分配过滤器的任何帐户的连接(最初对所有帐户都是如此)。

  6. 要验证是否正在记录事件,请发出一条语句,例如SHOW DATABASES并检查 audit.log日志事件的文件内容。

    $> cd /usr/local/mysql 
    $> bin/mysqladmin -u root -p version
    Enter password: (enter root password here)
    mysql> SHOW DATABASES;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+

    SHOW DATABASES语句运行方式root@localhost写入 audit.log类似于以下内容 的日志事件:

    <AUDIT_RECORD>
    <TIMESTAMP>2018-04-20T11:28:02 UTC</TIMESTAMP>
    <RECORD_ID>7_2018-04-20T11:27:29</RECORD_ID>
    <NAME>Query</NAME>
    <CONNECTION_ID>9</CONNECTION_ID>
    <STATUS>0</STATUS>
    <STATUS_CODE>0</STATUS_CODE>
    <USER>root[root] @ localhost []</USER>
    <OS_LOGIN/>
    <HOST>localhost</HOST>
    <IP/>
    <COMMAND_CLASS>show_databases</COMMAND_CLASS>
    <SQLTEXT>SHOW DATABASES</SQLTEXT>
    </AUDIT_RECORD>
笔记

审计日志文件的内容可能包含敏感信息,例如 SQL 语句的文本。出于安全原因,该文件应写入一个目录,该目录只能由 MySQL 服务器和有正当理由查看日志的用户访问。默认审计日志文件已命名 audit.log并位于数据目录中。在此部署中,数据目录归mysql用户所有。可以在服务器启动时使用 audit_log_file系统变量更改审计日志文件的位置。

可选地,审计日志文件也可以被加密。加密基于用户定义的密码。要使用此功能,必须启用 MySQL 密钥环。审计日志记录使用 MySQL 密钥环存储密码。有关更多信息,请参阅 加密审计日志文件

有关配置 MySQL Enterprise Audit 的更多信息,请参阅 MySQL Enterprise Audit