Linux MySQL 安全设置清单
一 基础与加固
sudo mysql_secure_installation。完成后务必用新密码测试登录。bind-address = 127.0.0.1(如需内网访问,可改为内网 IP),保存后重启服务:sudo systemctl restart mysql。sudo ufw allow from 192.168.1.0/24 to any port 3306;如需变更端口,先改配置再放行新端口并重启。ps -ef | grep mysqld),安装目录与数据目录属主/权限最小化(如 chown -R mysql:mysql /var/lib/mysql; chmod -R 700 /var/lib/mysql),配置文件中设置 user=mysql。DROP DATABASE IF EXISTS test;(MySQL 8.0+ 默认已移除,但仍建议核查)。二 身份与密码策略
INSTALL PLUGIN validate_password SONAME 'validate_password.so';,按需调整策略与长度:SET GLOBAL validate_password.policy=STRONG;、SET GLOBAL validate_password.length=12;。SELECT user,host FROM mysql.user WHERE authentication_string='' OR LENGTH(authentication_string)=0;,对空口令账号执行 ALTER USER 'user'@'host' IDENTIFIED BY 'StrongPass!23';。-p'明文';检查并清理敏感环境变量 grep -r MYSQL_PWD /proc/*/environ;可禁用历史记录或将 ~/.mysql_history 链接到 /dev/null。ALTER USER 'admin'@'localhost' IDENTIFIED BY 'NewStrongPass!23';,并在用户表或策略中设置 password_lifetime。三 网络与连接安全
LOCAL INFILE 防止读取服务器文件:SET GLOBAL local_infile=0;,配置文件中 local_infile=0。[mysqld] 配置 ssl=ON、ssl-ca=/path/ca.pem、ssl-cert=/path/server-cert.pem、ssl-key=/path/server-key.pem;对敏感账户强制 SSL:GRANT USAGE ON *.* TO 'app'@'%' REQUIRE SSL;。skip-name-resolve=1。secure_file_priv=/var/lib/mysql-files(仅允许该目录导入导出)。四 权限最小化与账户管理
%:
CREATE USER 'reader'@'192.168.1.50' IDENTIFIED BY 'R3adOnly!'; GRANT SELECT ON mydb.* TO 'reader'@'192.168.1.50';CREATE USER 'app'@'192.168.1.50' IDENTIFIED BY 'AppPass!23'; GRANT SELECT,INSERT,UPDATE,DELETE ON mydb.* TO 'app'@'192.168.1.50';REVOKE INSERT,UPDATE ON mydb.* FROM 'app'@'192.168.1.50';;不再使用的账号 DROP USER 'old'@'%';;变更后用 SHOW GRANTS FOR 'u'@'h'; 复核。FILE、PROCESS、SUPER、SHUTDOWN、CREATE USER、GRANT OPTION、RELOAD、REPL_SLAVE)给业务账号;DBA 管理账号单独创建并限制来源。五 日志审计与运行维护
log-error=/var/log/mysql/error.log,权限建议 mysql:mysql,640;确保日志存放在非系统分区,避免磁盘占满导致拒绝服务。slow_query_log=1、slow_query_log_file=/var/log/mysql/slow.log、long_query_time=2。log-raw=OFF。chmod 600 /etc/mysql/my.cnf);定期备份(如每日全备+binlog),并进行恢复演练。