mysql.user.Password 欄位儲存的是 PASSWORD('明文') 的雜湊值,絕不可直接寫明文,否則驗證永遠失敗。
USE mysql;
INSERT INTO user (Host, User, Password) VALUES ('%', 'user', PASSWORD('pass'));
FLUSH PRIVILEGES;
-- 或
SET PASSWORD FOR 'user'@'%' = PASSWORD('pass');
GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'pass';
-- 或僅建立用戶不給權限
GRANT USAGE ON *.* TO 'user'@'%' IDENTIFIED BY 'pass';
# 設定 root 密碼 (初次安裝)
mysqladmin -u root password 'newpass'
# 修改現有密碼 (需知舊密碼)
mysqladmin -u root -p'oldpass' password 'newpass'
-- 方法 A
UPDATE mysql.user SET Password=PASSWORD('newpass') WHERE User='user' AND Host='%';
FLUSH PRIVILEGES;
-- 方法 B
SET PASSWORD FOR 'user'@'%' = PASSWORD('newpass');
-- 方法 C
GRANT USAGE ON *.* TO 'user'@'%' IDENTIFIED BY 'newpass';
user 表後:FLUSH PRIVILEGES;mysqladmin -u root reload 或 mysqladmin -u root flush-privilegesGRANT/SET PASSWORD/mysqladmin password 會自動重載,無需手動 FLUSH。| 現象 | 原因 | 解決 |
|---|---|---|
| Access denied | 密碼未加密/Host 不匹配 | 檢查 PASSWORD()、Host 欄位 |
| 密碼修改不生效 | 未執行 FLUSH PRIVILEGES | 執行 FLUSH 或重啟 mysqld |
| 舊版客戶端連不上 4.1+ | 認證協定不相容 | 用 OLD_PASSWORD() 或升級客戶端 |