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

MySQL 設定使用者密碼完整指南:加密儲存、GRANT 自動加密與 mysqladmin 命令列操作

     編輯:MySQL 資料庫相關知識

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

MySQL user 表的 password 欄位儲存的是 PASSWORD() 加密後的雜湊值,**明文密碼會導致驗證失敗** (Server 比對的是加密值)。

方法一:INSERT 直接寫入 (需手動加密 + FLUSH)

USE mysql;
INSERT INTO user (host, user, password) VALUES ('%', 'new_user', PASSWORD('secret'));
FLUSH PRIVILEGES;

方法二:SET PASSWORD 指令 (推薦、自動重載)

SET PASSWORD FOR 'new_user'@'%' = PASSWORD('secret');
  • 自動觸發權限重載,無需 FLUSH PRIVILEGES。
  • 可精確指定 user@host。

方法三:GRANT 建立帳號時同時設定 (最推薦、自動加密)

GRANT ALL ON *.* TO 'new_user'@'%' IDENTIFIED BY 'secret';
  • IDENTIFIED BY 後接明文密碼,GRANT 內部自動呼叫 PASSWORD() 加密。
  • 一條指令完成建立帳號、授權、設定密碼。
  • 支援 WITH GRANT OPTION 授予授權權限。

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

# 設定 root 密碼 (首次安裝 root 無密碼)
mysqladmin -u root password 'secret'

# 修改現有密碼
mysqladmin -u root -p'old_secret' password 'new_secret'
  • 非互動模式,適合安裝腳本。
  • 注意: 命令列明文密碼會殘留於 Shell 歷史,生產環境慎用。

關鍵操作:FLUSH PRIVILEGES

直接操作 user 表 (INSERT/UPDATE/DELETE) 後,**必須** 執行以下任一指令使權限生效:

  • SQL:FLUSH PRIVILEGES;
  • 命令列:mysqladmin -u root reload 或 mysqladmin -u root flush-privileges

GRANT、SET PASSWORD、mysqladmin password 內建自動重載,無需額外執行。

常見錯誤與避坑

錯誤做法後果正確做法
INSERT ... password='plaintext'無法登入 (驗證失敗)用 PASSWORD('plaintext') 或 IDENTIFIED BY 'plaintext'
修改 user 表後未 FLUSH修改不生效執行 FLUSH PRIVILEGES
GRANT 時用 PASSWORD('pwd')雙重加密,無法登入直接用 IDENTIFIED BY 'pwd'

快速驗證

mysql -u new_user -p'secret' -e "SELECT 'Login OK'";
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved