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