为了确保 MySQL 5.7.44 符合等保(国家信息安全等级保护)的要求,需要在 my.***f 文件中进行一系列的安全配置。以下是一个详细的配置示例,涵盖了常见的安全设置:
- 基本安全配置
- 禁用不必要的功能
- 启用日志记录
- 限制用户权限
- 使用强密码策略
- 修改
my.***f文件
编辑 MySQL 的配置文件my.***f,通常位于/etc/mysql/my.***f或/etc/my.***f。
sudo nano /etc/mysql/my.***f
- 完整的
my.***f配置示例
以下是一个符合等保要求的my.***f配置示例:
[]
[mysqld]
# 基本设置
basedir=/usr/local/mysql
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid
# 字符集和排序规则
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
# 绑定地址
bind-address=0.0.0.0
# 最大连接数
max_connections=500
# 连接超时时间
wait_timeout=28800
interactive_timeout=28800
# 启用二进制日志
log-bin=mysql-bin
binlog_format=ROW
expire_logs_days=7
# 错误日志
log-error=/var/log/mysql/error.log
# 慢查询日志
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow-query.log
long_query_time=2
# 通用查询日志
general_log=1
general_log_file=/var/log/mysql/general-query.log
# SSL/TLS 加密
ssl-ca=/path/to/ca.pem
ssl-cert=/path/to/server-cert.pem
ssl-key=/path/to/server-key.pem
# 强密码策略
validate_password_policy=MEDIUM
validate_password_length=12
validate_password_mixed_case_count=1
validate_password_number_count=1
validate_password_special_char_count=1
# SQL 注入防护
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 禁用危险函数
secure-file-priv=/var/lib/mysql-files/
# 防止 SQL 注入攻击
local-infile=0
# 资源限制
open_files_limit=65535
table_open_cache=2048
query_cache_size=64M
tmp_table_size=64M
max_heap_table_size=64M
# 其他安全设置
skip-name-resolve=1
default-storage-engine=InnoDB
[client]
port=3306
socket=/var/lib/mysql/mysql.sock
[mysql]
default-character-set=utf8mb4
- 解释关键配置项
- 字符集和排序规则:
character-set-server=utf8mb4 collation-server=utf8mb4_general_ci - 绑定地址:
bind-address=0.0.0.0 - 最大连接数:
max_connections=500 - 连接超时时间:
wait_timeout=28800 interactive_timeout=28800 - 二进制日志:
log-bin=mysql-bin binlog_format=ROW expire_logs_days=7 - 错误日志:
log-error=/var/log/mysql/error.log - 慢查询日志:
slow_query_log=1 slow_query_log_file=/var/log/mysql/slow-query.log long_query_time=2 - 通用查询日志:
general_log=1 general_log_file=/var/log/mysql/general-query.log - SSL/TLS 加密:
ssl-ca=/path/to/ca.pem ssl-cert=/path/to/server-cert.pem ssl-key=/path/to/server-key.pem - 强密码策略:
validate_password_policy=MEDIUM validate_password_length=12 validate_password_mixed_case_count=1 validate_password_number_count=1 validate_password_special_char_count=1 - SQL 注入防护:
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION - 禁用危险函数:
secure-file-priv=/var/lib/mysql-files/ - 防止 SQL 注入攻击:
local-infile=0 - 资源限制:
open_files_limit=65535 table_open_cache=2048 query_cache_size=64M tmp_table_size=64M max_heap_table_size=64M - 其他安全设置:
skip-name-resolve=1 default-storage-engine=InnoDB
- 重启 MySQL 服务
保存并关闭my.***f文件后,重启 MySQL 服务以应用更改。
sudo systemctl restart mysql
- 验证配置
- 检查 MySQL 日志:
查看 MySQL 错误日志以确保没有配置错误。tail -f /var/log/mysql/error.log - 验证 SSL/TLS 配置:
使用openssl工具验证 SSL/TLS 配置是否正确。openssl s_client -connect :3306 -CAfile /path/to/ca.pem - 验证用户权限:
登录到 MySQL 并检查用户权限。mysql -u root -pSELECT User, Host FROM mysql.user;
通过以上步骤,你可以确保 MySQL 5.7.44 符合等保的基本安全要求。请根据实际需求进一步调整和优化配置。