首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 5.7 修改 root 密碼全攻略:authentication_string 機制、skip-grant-tables 與 ALTER USER 實戰

     編輯:MySQL 綜合教學

MySQL 5.7 修改 root 密碼全攻略:authentication_string 機制、skip-grant-tables 與 ALTER USER 實戰

MySQL 5.7 引入重大安全架構變更:mysql.user 表移除 Password 列,改用 authentication_string 存儲加密密碼;密碼過期策略、驗證插件機制全面升級。本文提供 5.7 修改 root 密碼的標準流程、緊急重置方案、常見坑點及驗證清單。

一、 核心變更速覽

項目MySQL 5.6MySQL 5.7+
密碼存儲列Password (char(41))authentication_string (text)
默認驗證插件mysql_native_passwordmysql_native_password / caching_sha2_password (8.0)
密碼過期不支持支持 PASSWORD EXPIRE
SET PASSWORD 語法SET PASSWORD FOR 'user'@'host' = PASSWORD('pwd')同 5.6,但操作 authentication_string
推薦語法同上ALTER USER 'user'@'host' IDENTIFIED BY 'pwd'

二、 標準修改流程(已知當前密碼)

方法 1:ALTER USER(推薦,5.7.6+)

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
FLUSH PRIVILEGES;

方法 2:SET PASSWORD(兼容舊版本)

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewPass123!');
FLUSH PRIVILEGES;

方法 3:直接 UPDATE user 表(理解底層機制)

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

⚠️ 注意:5.7 中 PASSWORD() 函數返回的哈希值直接寫入 authentication_string。

三、 緊急重置流程(忘記 root 密碼)

1. 停止 MySQL 服務

systemctl stop mysqld
# 或
killall -TERM mysqld

2. 跳過權限表啟動

# 僅本地訪問,生產環境務必加 --skip-networking
mysqld_safe --skip-grant-tables --skip-networking &

3. 無密碼登入並修改

mysql -uroot
# 進入客戶端後
UPDATE mysql.user 
SET authentication_string = PASSWORD('NewPass123!') 
WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;
QUIT;

4. 重新正常啟動

killall -TERM mysqld
mysqld_safe &
# 或 systemctl start mysqld

5. 驗證新密碼並補全權限(關鍵步驟)

mysql -uroot -p'NewPass123!'
# 登入後執行(解決 5.7 密碼過期/插件問題)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
# 或
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewPass123!');

原因:--skip-grant-tables 模式下修改的密碼可能未觸發驗證插件初始化、密碼過期時間重置,需正常模式下再次 ALTER USER 固化。

四、 常見坑點與解決

現象原因解決
ERROR 1820 (HY000): You must reset your password using ALTER USER密碼標記為過期ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpwd';
ERROR 1064: You have an error in your SQL syntax密碼含特殊字符未轉義單引號包裹,特殊字符轉義:'New\@Pass\!'
修改後無法遠程連接Host 非 '%' 或 '具體 IP'CREATE USER 'root'@'%' IDENTIFIED BY 'pwd'; GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;
ERROR 1396: Operation CREATE USER failed用戶已存在先 DROP USER 或直接 ALTER USER
修改密碼後主從報錯從庫還用舊密碼連主庫從庫執行 CHANGE MASTER TO MASTER_PASSWORD='newpwd'; START SLAVE;

五、 生產環境最佳實踐

  1. 密碼策略:validate_password 插件強制複雜度(長度≥12、大小寫、數字、特殊字符)
  2. 賬號分離:root 僅本地管理,應用使用專用賬號(最小權限)
  3. 定期輪換:每 90 天輪換,腳本自動化 + 通知
  4. 審計日志:audit_log 記錄所有賬號變更操作
  5. 備份驗證:密碼變更後立即驗證邏輯/物理備份腳本連接正常

六、 總結

MySQL 5.7 密碼管理核心在於 authentication_string 列與 ALTER USER 語法。常規修改用 ALTER USER,忘記密碼用 --skip-grant-tables --skip-networking 緊急重置,隨後必須正常模式下再次 ALTER USER 固化。構建「強密碼策略、賬號分離、定期輪換、審計追蹤」的全生命週期管理體系,才是根本之道。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved