mysql中如何更改初始密码

发布时间:2021-06-12 11:58:56 作者:小新
来源:亿速云 阅读:475
# MySQL中如何更改初始密码

## 前言

MySQL作为最流行的开源关系型数据库之一,安全性始终是管理员关注的重点。默认安装后,root账户通常没有密码或使用临时密码,这给数据库安全带来隐患。本文将详细介绍MySQL 5.7及以上版本中修改初始密码的完整流程,涵盖多种场景和验证方法。

## 一、准备工作

### 1.1 确认MySQL版本
```sql
SELECT VERSION();

不同版本修改密码的方法存在差异: - MySQL 5.7.6+ 使用ALTER USER语法 - 旧版本使用SET PASSWORDUPDATE mysql.user

1.2 获取临时密码(适用于首次安装)

对于MySQL 5.7+的默认安装,系统会生成临时密码,位置通常在:

sudo grep 'temporary password' /var/log/mysqld.log
# 或使用docker环境
docker logs mysql_container 2>&1 | grep "GENERATED ROOT PASSWORD"

二、修改密码的三种主要方式

2.1 使用ALTER USER语句(推荐)

-- 登录后执行(需用临时密码首次登录)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';

注意:MySQL 8.0默认使用caching_sha2_password插件,如需兼容旧客户端:

ALTER USER 'root'@'localhost' 
IDENTIFIED WITH mysql_native_password BY 'NewPass123!';

2.2 使用SET PASSWORD语句

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewPass123!');
-- MySQL 8.0+需改用:
SET PASSWORD FOR 'root'@'localhost' = 'NewPass123!';

2.3 直接更新user表(不推荐)

UPDATE mysql.user 
SET authentication_string=PASSWORD('NewPass123!') 
WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;

三、特殊场景处理

3.1 忘记root密码的情况

步骤1:停止MySQL服务

sudo systemctl stop mysqld

步骤2:启动安全模式

sudo mysqld_safe --skip-grant-tables &

步骤3:无密码登录并修改

UPDATE mysql.user SET authentication_string='' WHERE User='root';
FLUSH PRIVILEGES;
exit;

步骤4:重启服务后设置新密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewSecurePass456!';

3.2 Docker环境修改密码

docker exec -it mysql_container mysql -uroot -p
# 进入后使用ALTER USER修改
# 或启动时直接设置
docker run -e MYSQL_ROOT_PASSWORD=newpass -d mysql:latest

四、密码策略配置

4.1 查看当前策略

SHOW VARIABLES LIKE 'validate_password%';

典型输出示例:

+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+

4.2 临时调整策略(测试环境)

SET GLOBAL validate_password_policy=LOW;
SET GLOBAL validate_password_length=6;

五、安全最佳实践

  1. 密码复杂度要求

    • 至少12个字符
    • 包含大小写字母、数字和特殊符号
    • 避免使用字典单词
  2. 定期更换

    -- 设置密码过期策略
    ALTER USER 'root'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
    
  3. 审计跟踪

    -- MySQL企业版可用
    CREATE TABLE password_history (
     user VARCHAR(80) NOT NULL,
     password_timestamp TIMESTAMP NOT NULL,
     PRIMARY KEY (user, password_timestamp)
    );
    

六、多因素认证(MySQL 8.0+)

ALTER USER 'root'@'localhost' 
IDENTIFIED BY 'StrongPass!' 
AND FACTOR 2;

七、常见问题解决

7.1 ERROR 1819 (HY000)

密码不符合策略要求,可通过临时降低策略级别解决:

SET GLOBAL validate_password_policy=0;

7.2 修改后无法登录

检查授权主机是否正确:

SELECT Host, User FROM mysql.user;
-- 可能需要修改为'root'@'%'

7.3 插件认证错误

SHOW VARIABLES LIKE 'default_authentication_plugin';
-- 修改为兼容插件
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

八、自动化脚本示例

#!/bin/bash
NEW_PASSWORD="MyNewSecurePass123!"

# 自动检测临时密码
TEMP_PASS=$(sudo grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')

mysql -uroot -p"${TEMP_PASS}" --connect-expired-password <<EOF
ALTER USER 'root'@'localhost' IDENTIFIED BY '${NEW_PASSWORD}';
FLUSH PRIVILEGES;
EOF

结语

正确设置MySQL初始密码是数据库安全的第一道防线。本文涵盖了从基础修改到高级配置的全流程,建议生产环境结合密钥管理工具(如Vault)实现密码轮换自动化。定期审计和监控密码使用情况,可参考MySQL Enterprise的密码验证组件。

注意:所有示例密码仅用于演示,实际使用应遵循企业安全规范。 “`

这篇文章包含约1800字,采用Markdown格式,包含: 1. 多级标题结构 2. 代码块和SQL示例 3. 表格形式的配置参数 4. 特殊场景处理方案 5. 安全最佳实践建议 6. 自动化脚本示例 7. 常见问题解决方案

可根据需要调整具体内容细节或补充特定环境的操作说明。

推荐阅读:
  1. MySQL安装及初始密码修改
  2. mysql如何更改密码

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql

上一篇:linux如何安装mysql5.7

下一篇:如何从0到1搭建spring cloud alibaba微服务

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》