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

MySQL 設置用戶密碼的 5 種標準方法與最佳實踐

     編輯:MySQL 資料庫相關知識

核心原則

MySQL user 表存儲的是 PASSWORD() 加密後的哈希值,**絕不可**直接寫入明文密碼。

方法一:CREATE USER + IDENTIFIED BY(8.0 推薦)

CREATE USER 'app'@'%' IDENTIFIED BY 'StrongPass#2024';

方法二:ALTER USER(8.0 修改密碼標準語法)

ALTER USER 'app'@'%' IDENTIFIED BY 'NewStrongPass#2024';

方法三:SET PASSWORD(5.7/8.0 通用)

SET PASSWORD FOR 'app'@'%' = 'NewStrongPass#2024';
-- 或舊版語法
SET PASSWORD FOR 'app'@'%' = PASSWORD('NewStrongPass#2024');

方法四:GRANT ... IDENTIFIED BY(建帳號同時設密碼)

GRANT SELECT, INSERT ON `shop`.* TO 'reader'@'%' IDENTIFIED BY 'ReadOnly#2024';

方法五:直接操作 mysql.user 表(不推薦,需 FLUSH PRIVILEGES)

USE mysql;
UPDATE user SET authentication_string = PASSWORD('NewPass#2024') 
WHERE User = 'app' AND Host = '%';
FLUSH PRIVILEGES;

命令列工具:mysqladmin

# root 修改自身密碼
mysqladmin -u root -p'oldPass' password 'NewStrongPass#2024'

# 修改其他用戶(需 SUPER 權限)
mysqladmin -u root -p'rootPass' -u 'app' password 'NewPass#2024'

驗證密碼是否生效

# 重新連線測試
mysql -u app -p'NewStrongPass#2024' -e "SELECT CURRENT_USER();"

安全加固清單

  • 🔒 密碼複雜度:≥12 字元、大小寫、數字、特殊符號。
  • 🔒 定期輪換:建議 90 天,配合 password_expired 強制變更。
  • 🔒 禁用舊式認證:default_authentication_plugin = caching_sha2_password(8.0 預設)。
  • 🔒 審計空密碼帳號:SELECT User, Host FROM mysql.user WHERE authentication_string = '' OR authentication_string IS NULL;
  • 🔒 生產環境禁止 root@%,僅允許 root@localhost 或 root@127.0.0.1。

常見坑點

PASSWORD() 返回 NULLFLUSH PRIVILEGES 報錯
現象原因解決
密碼修改後舊連線仍可用連線池未重連應用端重建連線池或重啟服務
5.7.6+ 已移除改用 ALTER USER 或 SET PASSWORD 新語法
權限不足使用 root 或具備 RELOAD 權限帳號
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved