mysql安装后进行系统安全加固与配置优化

来源:这里教程网 时间:2026-02-28 20:38:09 作者:

修改 root 默认密码并禁用空密码登录

MySQL 5.7+ 安装后若未显式设置密码,

root@localhost
可能处于无密码或临时密码状态(临时密码在
/var/log/mysqld.log
中),这直接构成高危入口。必须立即重置并拒绝空密码认证。

先用临时密码登录:
mysql -u root -p
,输入日志中找到的临时密码
执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourStrongPass123!';
刷新权限:
FLUSH PRIVILEGES;
确认空密码用户已清除:
SELECT user,host,authentication_string FROM mysql.user WHERE authentication_string = '' OR authentication_string IS NULL;
,若有结果需手动
DROP USER
SET PASSWORD

删除默认匿名用户与 test 数据库

MySQL 初始化时可能创建

''@'localhost'
这类匿名用户,且保留
test
数据库——两者均无实际用途,却常被扫描工具利用为攻击跳板。

删匿名用户:
DROP USER ''@'localhost';
删 test 库(若存在):
DROP DATABASE IF EXISTS test;
移除 test 相关权限记录:
DELETE FROM mysql.db WHERE Db LIKE 'test%' OR Db LIKE '\_test%'; FLUSH PRIVILEGES;
验证:
SELECT user,host FROM mysql.user;
应仅剩明确授权的用户;
SHOW DATABASES;
不应含
test

限制 root 远程访问并创建最小权限应用账号

生产环境

root@localhost
必须禁止从任意主机连接(即禁用
root@'%'
),所有业务操作应通过专用账号完成,且该账号只拥有对应数据库的必要权限(如仅
SELECT,INSERT,UPDATE
)。

检查远程 root:
SELECT host,user FROM mysql.user WHERE user='root' AND host!='localhost';
,如有则
DROP USER 'root'@'xxx';
新建应用账号(示例):
CREATE USER 'app_user'@'10.20.30.%' IDENTIFIED WITH mysql_native_password BY 'AppPass456!';
授最小权限:
GRANT SELECT,INSERT,UPDATE ON myapp_db.* TO 'app_user'@'10.20.30.%'; FLUSH PRIVILEGES;
避免使用
GRANT ... ON *.*
WITH GRANT OPTION
,除非有强审计需求

启用强制密码策略与连接加密

默认 MySQL 允许弱密码且明文传输认证信息,必须通过配置层加固。关键参数需写入

/etc/my.cnf
[mysqld]
段并重启服务。

启用密码复杂度:
validate_password.policy=STRONG
validate_password.length=12
validate_password.mixed_case_count=1
validate_password.number_count=1
validate_password.special_char_count=1
强制 TLS 连接(要求客户端支持):
require_secure_transport=ON
ssl_mode=REQUIRED
ssl_cert=/var/lib/mysql/server-cert.pem
ssl_key=/var/lib/mysql/server-key.pem
禁用本地文件导入(防恶意读取):
local_infile=OFF
(同时需在客户端连接时加
--local-infile=0
重启后验证:
SHOW VARIABLES LIKE 'require_secure_transport';
应为
ON
STATUS;
SSL:
行应显示
Cipher in use

实际部署中,

ssl_cert
ssl_key
文件必须由可信 CA 签发或自建私有 CA 生成,不能使用 MySQL 自带的测试证书;
validate_password
插件需提前确认已安装(
SHOW PLUGINS;
validate_password
状态),否则配置会静默失效。

相关推荐