首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 使用者密碼設定完整指南:PASSWORD() 加密、GRANT 自動加密、mysqladmin 命令列、權限表重載

     編輯:MySQL 資料庫相關知識

核心原則:密碼必須加密儲存

MySQL mysql.user 表中 Password (5.7+ 為 authentication_string) 欄位儲存加密雜湊值,非明文。直接寫入明文會導致驗證失敗。

四種標準設定密碼方法

方法一:INSERT + PASSWORD() 函數 (手動操作權限表)


USE mysql;
INSERT INTO user (Host, User, Password) 
VALUES ('%', 'newuser', PASSWORD('mypassword'));
FLUSH PRIVILEGES;

方法二:SET PASSWORD 語句 (推薦、語意清晰)


-- 為現有使用者設定/變更密碼
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
-- 或 MySQL 5.7.6+
SET PASSWORD FOR 'username'@'host' = 'newpassword';  -- 伺服器端自動雜湊
FLUSH PRIVILEGES;

方法三:GRANT 建立使用者時自動加密 (最常用、最佳實踐) ⭐


-- 一次完成:建立使用者 + 授權 + 設定密碼
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'mypassword';
-- IDENTIFIED BY 子句自動處理 PASSWORD() 加密
FLUSH PRIVILEGES;

方法四:mysqladmin 命令列工具 (腳本自動化首選)


# 為 root 設定密碼 (首次無舊密碼)
mysqladmin -u root password 'newpassword'

# 變更現有密碼
mysqladmin -u root -p'oldpassword' password 'newpassword'

# 重載權限 (等同 FLUSH PRIVILEGES)
mysqladmin -u root -p'password' reload
# 或
mysqladmin -u root -p'password' flush-privileges

FLUSH PRIVILEGES 關鍵作用

  • 將 mysql.user、db、tables_priv 等授權表變更從磁碟重載至記憶體快取
  • 未執行時,新權限/密碼不生效 (舊快取仍在使用)
  • GRANT/REVOKE 隱含執行,INSERT/UPDATE/DELETE 直接操作權限表時必須手動執行

密碼驗證流程解析

  1. 客戶端連線傳送用戶名 + 加密後的密碼回應 (Challenge-Response 機制)
  2. 伺服器從 mysql.user 讀取儲存雜湊值
  3. 伺服器執行相同演算法驗證回應
  4. 匹配 → 允許連線;不匹配 → Access denied

常見錯誤與修正

錯誤做法後果正確做法
INSERT ... VALUES ('%', 'u', 'plainpass')儲存明文,驗證永遠失敗使用 PASSWORD('plainpass') 或 IDENTIFIED BY
修改權限表未 FLUSH PRIVILEGES變更不生效務必執行 FLUSH PRIVILEGES 或 mysqladmin reload
MySQL 5.7+ 使用 Password 欄位欄位不存在/錯誤使用 authentication_string 欄位
SET PASSWORD = 'plain' (無 PASSWORD())舊版儲存明文5.7.6+ 伺服器端自動雜湊,舊版需 PASSWORD()

安全加固建議

  1. 啟用 validate_password 外掛強制複雜度
  2. 定期輪換密碼:ALTER USER 'user'@'host' PASSWORD EXPIRE INTERVAL 90 DAY;
  3. 禁止密碼重用:PASSWORD HISTORY 5
  4. Root 帳號限制來源:RENAME USER 'root'@'%' TO 'root'@'localhost';
  5. 移除匿名帳號:DELETE FROM mysql.user WHERE User=''; FLUSH PRIVILEGES;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved