暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

MySQL弱密码如何安全加固

原创 Cui Hulong 2026-06-10
223

针对MySQL弱密码的安全加固,需要从密码策略、访问控制、权限管理和日常运维四个层面系统性地进行。这不是单一操作,而是一套完整的配置方案,目标是构建一个“进不来、拿不走、改不了”的安全防护体系。

MySQL数据库弱密码情况下,存在以下高风险安全隐患:

  • 用户密码为空(空口令);
  • 用户密码为弱口令(如123456test等);
  • 用户密码与用户名相同。
  • 老式的native加密机制
  • 默认账户与测试库未清理
  • 传输通道未加密

这些使得数据库极易遭受暴力破解、撞库攻击或权限越权利用,严重威胁业务数据的安全性与完整性。需要采取一套系统性的加固方案。最简单的入手方式是使用官方安全脚本,再配合密码插件、加密配置等步骤,逐一封堵每个风险点。

1.检查所有数据库账户

关于“弱口令”和“用户名与密码相同”的检测,MySQL 自身并未内置相关功能,需要借助外部工具或自定义脚本来实现。

# 检查空密码账户 SELECT user, host FROM mysql.user WHERE authentication_string = '' OR LENGTH(authentication_string) = 0;
# 查看是否启用了密码验证插件 SHOW VARIABLES LIKE 'validate_password%';

2.清理高风险账户

删除或加固空密码账户

# 或直接删除不必要的账户 DROP USER '用户'@'host'; # 删除匿名用户(如果存在) DROP USER '用户'@'localhost'; DROP USER '用户'@'%'; # 为空密码账户设置强密码(替换'user'@'host'为实际账户) ALTER USER 'user'@'host' IDENTIFIED BY 'P@ssw0123rd!2026'; #刷新策略: FLUSH PRIVILEGES;

3.限制root账户远程登录

# 删除允许远程登录的root账户(保留root@localhost) DELETE FROM mysql.user WHERE user = 'root' AND host NOT IN ('localhost', '127.0.0.1', '::1');

4.安装并配置默认验证插件

# 安装插件(MySQL 5.7) INSTALL PLUGIN validate_password SONAME 'validate_password.so'; 安装组件(MySQL 8.0) INSTALL COMPONENT 'file://component_validate_password'; # 确认插件/组件状态 SHOW VARIABLES LIKE 'validate_password%';
变量名 默认值 说明
validate_password.policy MEDIUM 策略等级:0=LOW, 1=MEDIUM, 2=STRONG
validate_password.length 12 密码最小长度
validate_password.mixed_case_count 1 至少需要的大小写字母数量(各1个)
validate_password.number_count 1 至少需要数字数量
validate_password.special_char_count 1 至少需要特殊字符数量
validate_password.check_user_name ON 是否禁止密码包含用户名

配置密码策略参数

等级 检查内容
LOW 0 仅检查密码长度
MEDIUM 1 长度 + 数字 + 大小写字母 + 特殊字符
STRONG 2 MEDIUM + 字典文件检查(禁止常见单词)
# 设置密码策略级别:MEDIUM 或 STRONG SET GLOBAL validate_password.policy = 'MEDIUM'; # 设置密码最小长度(建议12位以上) SET GLOBAL validate_password.length = 12; # 禁止密码与用户名相同 SET GLOBAL validate_password.check_user_name = 'ON'; # 设置数字、大小写字母、特殊字符的最小数量 SET GLOBAL validate_password.number_count = 1; SET GLOBAL validate_password.mixed_case_count = 1; SET GLOBAL validate_password.special_char_count = 1;

my.ncf配置参数持久化:

[mysqld]
# 密码验证插件配置
plugin-load-add=validate_password.so
validate_password_policy=MEDIUM
validate_password_length=12
validate_password_number_count=1
validate_password_mixed_case_count=1
validate_password_special_char_count=1
validate_password_check_user_name=ON

5.配置密码过期策略

在密码过期状态下,只能执行修改密码的命令,其他所有操作(SELECT、INSERT、UPDATE、SHOW等)都会被拒绝。

# 设置全局密码过期时间(90天)
SET GLOBAL default_password_lifetime = 90;

# 为特定用户设置密码过期
ALTER USER 'app_user'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;

# 立即强制用户修改密码
ALTER USER 'app_user'@'localhost' PASSWORD EXPIRE;

# 持久化配置(my.cnf)
[mysqld]
default_password_lifetime = 90

6.检查加固清单

检查项 验证方法
无空密码账户 SELECT user,host FROM mysql.user WHERE authentication_string=’’
密码策略已启用 SHOW VARIABLES LIKE ‘validate_password%’ 返回非空
禁止密码与用户名相同 validate_password_check_user_name=ON
密码最小长度≥12 validate_password_length ≥ 12
test数据库已删除 SHOW DATABASES 无test库
匿名用户已删除 SELECT user,host FROM mysql.user WHERE user=’’ 空集

7.官方指导脚本

mysql8.0开始提供脚本可以按照官方的指导,进行安全加固

运行安全脚本:执行 mysql_secure_installation 交互脚本。它会引导你完成以下关键设置:设置root密码、移除匿名用户、禁止root用户远程登录、删除test数据库。这是最简单有效的第一步。

总结

安全是一个持续的过程,而非一次性配置。可以启动审计日志,持续观察,稳固数据库的安全防线。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论