CentOS Yum 安装 MySQL 后设置与强化密码指南
在 CentOS 服务器上通过 yum 安装 MySQL(或 MariaDB)是常见的部署方式,安装完成后,首要且关键的安全步骤就是为 root 用户设置一个强密码并配置初始安全选项,忽视这一步会使得数据库门户大开,极易遭受未授权访问甚至攻击,以下是如何安全、有效地完成这项任务的详细步骤。

第一步:首次登录与发现初始状态
尝试使用空密码登录 (不推荐直接操作): 安装完成后,MySQL root 用户通常没有密码或有一个临时密码(MySQL 5.7+ 及某些 MariaDB 版本)。强烈建议不要在生产环境尝试空密码登录。

查找临时密码 (MySQL 5.7+): 如果安装的是较新的 MySQL 版本(5.7 及以上),安装过程会生成一个 临时随机密码 并记录在日志文件中,使用以下命令查找:
sudo grep 'temporary password' /var/log/mysqld.log
或
sudo grep 'temporary password' /var/log/mysql/mysqld.log # 可能路径
输出类似:
2023-10-27T03:12:34.567890Z 1 [Note] A temporary password is generated for root@localhost: JqkR7-&aT9wz记下冒号 () 后面的密码
JqkR7-&aT9wz。
第二步:安全登录并更改 root 密码
使用临时密码登录后修改 (MySQL 5.7+)
使用临时密码登录:

mysql -u root -p
系统提示输入密码时,粘贴或输入找到的临时密码,注意:临时密码通常包含特殊字符,输入时确保准确无误。
立即修改密码: 成功登录后,MySQL 会强制要求先修改密码才能执行任何操作,使用以下命令修改:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewStrongPassword!123';
将
'YourNewStrongPassword!123'替换为符合复杂度要求的强密码。- 密码要求: MySQL 默认有密码强度策略,密码通常需要包含:大小写字母、数字、特殊字符,且长度足够(如 12 位以上),如果设置的密码不符合策略,会报错
ERROR 1819 (HY000)。
- 密码要求: MySQL 默认有密码强度策略,密码通常需要包含:大小写字母、数字、特殊字符,且长度足够(如 12 位以上),如果设置的密码不符合策略,会报错
刷新权限: 执行修改后,立即刷新权限使更改生效:
FLUSH PRIVILEGES;
如果无临时密码或使用 MariaDB (更常见初始无密码)
使用 root 用户无密码登录 (仅在确认安全的环境下进行):
mysql -u root
设置新密码: 登录后,使用以下 SQL 语句设置密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewStrongPassword!123';
或者使用传统的
SET PASSWORD语法 (部分旧版本):SET PASSWORD FOR 'root'@'localhost' = PASSWORD('YourNewStrongPassword!123');刷新权限:
FLUSH PRIVILEGES;
第三步:运行安全脚本强化安装 (强烈推荐)
MySQL 和 MariaDB 都提供了一个名为 mysql_secure_installation 的交互式脚本,用于执行重要的安全加固步骤:
运行脚本:
sudo mysql_secure_installation
按照提示操作:
- 输入 root 密码: 输入你刚刚设置的强密码。
- 更改 root 密码? 如果刚改过且满意,可以选择
n(no),否则可以再次修改。 - 移除匿名用户?强烈建议选择
y(yes),匿名用户允许任何人无需用户名连接数据库,是重大安全隐患。 - 禁止 root 远程登录?强烈建议选择
y(yes),root 账户只应允许从localhost(服务器本身) 登录,需要远程管理时,应创建具有特定权限的普通用户。 - 移除测试数据库 (
test)?建议选择y(yes),默认的test数据库可能被无关人员访问或利用。 - 立即重载权限表?选择
y(yes),确保以上所有安全更改立即生效。
运行此脚本是提升新安装 MySQL 安全性的标准做法,务必执行。
第四步:处理密码策略与复杂度要求
如果设置密码时遇到 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements,说明密码不符合 MySQL 默认或配置的密码强度策略。
检查当前密码策略:
SHOW VARIABLES LIKE 'validate_password%';
输出会显示策略配置,
validate_password_length: 最小长度validate_password_policy: 策略级别 (LOW, MEDIUM, STRONG - 影响其他规则)validate_password_number_count: 要求的最少数字validate_password_mixed_case_count: 要求的大小写字母validate_password_special_char_count: 要求的最少特殊字符
应对策略:
- 设置更强密码: 确保密码包含足够长度、大小写字母、数字和特殊字符。
- 临时降低策略 (仅用于设置密码,不推荐长期降低):
SET GLOBAL validate_password_policy = LOW; -- 降低策略级别 SET GLOBAL validate_password_length = 8; -- 降低最小长度要求 ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; -- 设置新密码 SET GLOBAL validate_password_policy = MEDIUM; -- 设置完成后恢复策略 (根据你的安全需求) SET GLOBAL validate_password_length = 12; -- 恢复长度要求 FLUSH PRIVILEGES;
注意:降低策略有安全风险,仅在设置强密码遇到困难时临时使用,并务必在完成后恢复,更好的做法是设计一个符合要求的强密码。
- 永久修改策略 (需谨慎评估风险): 编辑 MySQL 配置文件
/etc/my.cnf或/etc/mysql/my.cnf,在[mysqld]部分添加或修改相关参数,然后重启 MySQL 服务 (sudo systemctl restart mysqld)。[mysqld] validate_password_policy=LOW validate_password_length=10修改配置需重启生效,且需评估是否符合整体安全要求。
第五步:验证新密码与访问控制
使用新密码登录:
mysql -u root -p
输入新设置的强密码,应能成功登录。
检查 root 用户权限:
SELECT user, host, authentication_string FROM mysql.user WHERE user = 'root';
确认
host主要是localhost,如果看到'root'@'%'且不需要远程 root 访问,应该删除它:DROP USER 'root'@'%'; FLUSH PRIVILEGES;
创建专用管理用户 (最佳实践): 为日常数据库管理操作创建一个非 root 的专用用户,并授予其所需的最小权限,避免直接用 root 进行常规操作。
CREATE USER 'dbadmin'@'localhost' IDENTIFIED BY 'AnotherStrongPassword!456'; GRANT ALL PRIVILEGES ON *.* TO 'dbadmin'@'localhost' WITH GRANT OPTION; -- 授予所有库表权限 (可按需缩小范围) FLUSH PRIVILEGES;
以后可以使用
dbadmin用户登录进行管理:mysql -u dbadmin -p
第六步:后续安全维护要点
- 定期更换密码: 将强密码更换纳入运维周期。
- 最小权限原则: 为每个应用程序或用户创建独立账号,仅授予其完成工作所必需的数据库权限 (
SELECT,INSERT,UPDATE,DELETE等),避免使用ALL PRIVILEGES或GRANT OPTION。 - 防火墙限制: 使用服务器防火墙 (如
firewalld或iptables) 严格控制访问 MySQL 端口 (默认 3306) 的来源 IP 地址,只允许受信任的应用服务器或管理终端访问。 - 禁用本地文件加载: 检查并确保
secure_file_priv系统变量被设置为一个合适的目录或为空(禁用LOAD DATA INFILE/SELECT ... INTO OUTFILE),防止通过 SQL 语句读写服务器文件。 - 加密连接: 如果应用需要远程连接,考虑配置 SSL/TLS 加密传输的数据。
- 保持更新: 定期使用
yum update更新 MySQL/MariaDB 软件包,及时修复安全漏洞。
数据库密码是守护数据资产的第一道门锁,在 CentOS 上通过 Yum 安装 MySQL 后,立即设置高强度的 root 密码、运行安全加固脚本、遵循最小权限原则并实施持续的访问控制,这些措施构成服务器安全防护不可或缺的环节,忽略初始密码设置或使用弱口令,等同于将核心数据暴露在巨大风险之中,后果往往是难以承受的。
