MySQL 5.7+ 安装后须立即重置root密码、禁用空密码登录、删除匿名用户和test库、限制root远程访问、创建最小权限应用账号、启用密码策略与TLS加密。

修改 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)。
WebShop网上商店系统专注中小企业、个人的网上购物电子商务解决方案,淘宝商城系统用户/个人首选开店的购物系统!综合5500多用户的意见或建议,从功能上,界面美观上,安全性,易用性上等对网店系统进行了深度的优化,功能更加强大,界面模板可直接后台选择。WebShop网上商店系统特点:1 对于中小企业、个体、个人、店主和淘宝易趣等卖家,可利用WebShop快速建立购物网。2 源代码开放,利用WebS
- 检查远程 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 状态),否则配置会静默失效。









