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

MySQL 5.7 修改密碼完整指南:authentication_string 欄位變更

     編輯:MySQL 綜合教學

MySQL 5.7 修改密碼完整指南:authentication_string 欄位變更

MySQL 5.7 重大變更:mysql.user 表移除 password 欄位,改用 authentication_string 儲存加密密碼。本文提供標準修改流程與常見坑點。

標準修改步驟 (SQL 方式)

# 1. 登入 MySQL
mysql -u root -p

# 2. 更新密碼 (替換 '新密碼' 與 '用戶名')
UPDATE mysql.user 
SET authentication_string = PASSWORD('新密碼') 
WHERE User = '用戶名' AND Host = 'localhost';

# 3. 刷新權限生效
FLUSH PRIVILEGES;

# 4. 退出驗證
QUIT;
# 重新登入測試
mysql -u 用戶名 -p'新密碼'

mysqladmin 指令方式 (適用腳本自動化)

# 修改 root 密碼
mysqladmin -u root -p'舊密碼' password '新密碼'

# 若 root 無密碼 (初始安裝)
mysqladmin -u root password '新密碼'

5.7 版本關鍵變更對照

項目5.6 及之前5.7+
密碼欄位名Password (CHAR(41))authentication_string (TEXT)
加密函數PASSWORD() → 41 字元雜湊PASSWORD() → 同樣邏輯,但存入 TEXT
驗證外掛mysql_native_password預設 mysql_native_password,支援 caching_sha2_password (8.0 預設)
FLUSH PRIVILEGES必要必要

常見錯誤與解決

錯誤現象原因解決
ERROR 1064: Unknown column 'password'仍用舊欄位名改用 authentication_string
修改後無法登入Host 不匹配 (如 '%' vs 'localhost')WHERE 子句精確匹配 User+Host
FLUSH PRIVILEGES 忘記執行權限快取未更新必須執行 FLUSH PRIVILEGES
PASSWORD() 回傳 NULL引數為 NULL 或空字串確保傳入非空字串

8.0 版本差異提醒

  • 8.0 預設驗證外掛為 caching_sha2_password,PASSWORD() 函數已移除。
  • 8.0 修改密碼標準語法:
    ALTER USER 'user'@'host' IDENTIFIED BY 'newpass';
    # 或
    SET PASSWORD FOR 'user'@'host' = 'newpass';
  • 若 8.0 需相容舊客戶端,可指定:
    ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'newpass';

最佳實務建議

  1. 使用強密碼:≥12 字元、大小寫、數字、特殊符號。
  2. 生產環境禁止使用 root 遠端登入:UPDATE mysql.user SET Host='localhost' WHERE User='root';
  3. 應用程式使用專屬帳號,最小權限原則。
  4. 定期輪換密碄 (建議 90 天),配合密碼管理工具。
  5. 備份前導出 mysql.user 表結構與資料,防誤操作。

驗證密碼雜湊值

SELECT User, Host, authentication_string FROM mysql.user WHERE User='root';
+------+-----------+-------------------------------------------+
| User | Host      | authentication_string                     |
+------+-----------+-------------------------------------------+
| root | localhost | *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 |
+------+-----------+-------------------------------------------+

掌握 authentication_string 變更,避免「明明改了密碼卻登不進去」的經典坑點。

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