Mariadb 日志与审计插件配置

slug
mariadb-audit-plugin
tags
mariadb
audit
plugin
date
Aug 9, 2024
summary
 Mariadb 日志目录和audit 审计插件及密码插件配置。
status
Published
type
Post

一、启用日志

1.1. 错误日志

# /etc/my.cnf.d/mariadb-logs.cnf [mariadb] ...... # Error Log log_error=/var/log/mariadb/error.log log_warnings=3
  • 日志详细程度:0-9,默认值为 2

1.2. 通用查询日志

通用查询日志是从客户端接收到的每个 SQL 查询以及每个客户端连接和断开连接的日志。由于它是服务器收到的每个查询的记录,因此它可能会很快变大。
但是,如果您只想记录更改数据的查询,那么最好使用二进制日志。一个重要的区别是,二进制日志仅在服务器提交事务时记录查询,而通用查询日志在服务器接收到查询后立即记录查询。
# /etc/my.cnf.d/mariadb-logs.cnf [mariadb] ...... # General Query Log general_log log_output=FILE general_log_file=/var/log/mariadb/queries.log log_disabled_statements='slave,sp'

1.3. 二进制日志

二进制日志包含对数据库的所有更改(数据和结构)以及每个语句执行所需时间的记录。它由一组二进制日志文件和一个索引组成。
这意味着诸如 CREATE、ALTER、INSERT、UPDATE 和 DELETE 之类的语句将被记录,但对数据没有影响的语句(如 SELECT 和 SHOW )将不会被记录。如果您想记录这些(以性能为代价),请使用通用查询日志。
# /etc/my.cnf.d/mariadb-logs.cnf [mariadb] # Binary Log # datadir/log-basename-bin log_bin=ON log_basename=mariadb binlog_format=mixed expire_logs_days=90 max_binlog_size=512M max_binlog_total_size=5G --binlog-ignore-db=database_name

1.4. 清除二进制日志

# 列出所有日志 SHOW BINARY LOGS; # 查看正在读取的文件 SHOW SLAVE STATUS; # 删除所有二进制日志文件 RESET MASTER; # 清除到指定位置 PURGE BINARY LOGS TO 'mariadb-bin.000057'; # 清除指定日期之前的 PURGE BINARY LOGS BEFORE '2019-04-02 22:46:26'; # 清除3天前的日志 #SELECT DATE_SUB(CURRENT_DATE, INTERVAL 3 DAY); PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 3 DAY); PURGE BINARY LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 3 DAY);

1.5. 慢查询日志

慢查询日志是执行时间较长的 SQL 查询的记录。
请注意,如果您的查询包含用户的密码,则慢查询日志也可能包含密码。因此,应该对其进行保护。
# /etc/my.cnf.d/mariadb-logs.cnf [mariadb] ...... ## Slow Query Log log_output=FILE slow_query_log slow_query_log_file=/var/log/mariadb/slow.log long_query_time=5.0 log_queries_not_using_indexes=ON log_slow_admin_statements=ON log_slow_rate_limit=10
  • long_query_time 定义慢速查询的时间
  • log_queries_not_using_indexes 记录不使用索引的查询
  • log_slow_admin_statements 记录缓慢的管理语句
  • log_slow_rate_limit 限制每10次慢查询才记录一次

二、轮换日志

2.1. Logrotate

2.1.1. 身份验证

使用 MariaDB 进行身份验证的最简单方法是将用户帐户配置 root@localhost 为使用 unix_socket 身份验证。
在MariaDB 10.4及更高版本不许设置
ALTER USER 'root'@'localhost' IDENTIFIED VIA unix_socket;

2.1.2. 配置文件

  • /etc/logrotate.conf
  • /etc/logrotate.d/
$ sudo tee /etc/logrotate.d/mariadb <<EOF /var/log/mysql/* { su mysql mysql missingok create 660 mysql mysql notifempty daily minsize 1M maxsize 100M rotate 30 dateext dateformat .%Y-%m-%d-%H-%M-%S compress delaycompress sharedscripts olddir archive/ createolddir 770 mysql mysql # only use with logrotate >= 3.8.9 postrotate # just if mysqld is really running if test -x /usr/local/mysql/bin/mysqladmin && \\ /usr/local/mysql/bin/mariadb-admin ping &>/dev/null then /usr/local/mysql/bin/mariadb-admin --local flush-error-log \\ flush-engine-log flush-general-log flush-slow-log fi endscript } EOF
重要参数:
  • daily:每天轮换每个日志文件一次。
  • minsize 1M:该指令将其配置为在日志轮转期间跳过小于 1 MB 的日志文件。
  • maxsize 100M:此指令将其配置为在日志文件增长超过 100 MB 时比每天更频繁地轮换日志文件。
  • rotate 30:该指令将其配置为保留每个日志文件的 30 个旧副本。
  • dateext:该指令将其配置为使用日期作为扩展名,而不仅仅是数字。
  • olddir archive/:该指令将其配置为将轮换日志文件存档在/var/log/mariadb/archive/.

2.2. Journal

systemd-journal 是一个改进型的日志管理服务。
常见用法如下:
# 查看文件情况 du -h --max-depth=1 /var/log # 日志总体磁盘占用情况 journalctl --disk-usage # 硬性指定日志总体体积,删除超出部分 journalctl --vacuum-size=10M # 只保留近一周的日志 journalctl --vacuum-time=1w # 直接删除 /var/log/journal/ 目录下的日志文件 rm -rf /var/log/journal/f9d400c5e1e8c3a8209e990d887d4ac1

三、启用审计

3.1. 查看当前开启审计

show variables like '%audit%';
如果没有,则先查看审计插件目录
SHOW VARIABLES LIKE 'plugin_dir';

3.2. 启用审计

具体参数详见官方文档:
# /etc/my.cnf.d/server-audit.cnf [mariadb] ## MariaDB Audit Plugin server_audit_events=CONNECT,QUERY,TABLE,QUERY_DDL,QUERY_DML,QUERY_DCL,QUERY_DML_NO_SELECT server_audit_file_path=/var/log/mariadb/server_audit.log server_audit_file_rotate_size=100M server_audit_file_rotations=10 server_audit_logging=ON server_audit_output_type=file server_audit=FORCE_PLUS_PERMANENT

3.3. 重启

sudo systemctl restart mariadb

四、密码插件

4.1. simple_password_check

# /etc/my.cnf.d/simple_password_check.cnf [mariadb] # Password Validation plugin_load_add = simple_password_check.so simple_password_check_digits=1 simple_password_check_letters_same_case=1 simple_password_check_minimal_length=8 simple_password_check_other_characters=1

4.2. cracklib_password_check

sudo yum install MariaDB-cracklib-password-check sudo apt-get install mariadb-plugin-cracklib-password-check
安装
[mariadb] ... plugin_load_add = cracklib_password_check
If you have any questions, please contact me.