MySQL user 表的 password 欄位儲存的是 PASSWORD() 加密後的雜湊值,**明文密碼會導致驗證失敗** (Server 比對的是加密值)。
USE mysql;
INSERT INTO user (host, user, password) VALUES ('%', 'new_user', PASSWORD('secret'));
FLUSH PRIVILEGES;
SET PASSWORD FOR 'new_user'@'%' = PASSWORD('secret');
FLUSH PRIVILEGES。user@host。GRANT ALL ON *.* TO 'new_user'@'%' IDENTIFIED BY 'secret';
PASSWORD() 加密。WITH GRANT OPTION 授予授權權限。# 設定 root 密碼 (首次安裝 root 無密碼)
mysqladmin -u root password 'secret'
# 修改現有密碼
mysqladmin -u root -p'old_secret' password 'new_secret'
直接操作 user 表 (INSERT/UPDATE/DELETE) 後,**必須** 執行以下任一指令使權限生效:
FLUSH PRIVILEGES;mysqladmin -u root reload 或 mysqladmin -u root flush-privilegesGRANT、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'";