shell> mysql
Client does not support authentication protocol requested by server;
consider upgrading MySQL client
MySQL 4.1 採用新的雙重 SHA1 密碼雜湊演算法 (PASSWORD() 回傳 41 位元組雜湊),舊版客戶端 (4.0 及之前) 僅支援舊 16 位元組雜湊,導致認證協定不匹配。
mysql> SET PASSWORD FOR 'user'@'host' = OLD_PASSWORD('new_password');
mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('new_password')
-> WHERE Host = 'host' AND User = 'user';
mysql> FLUSH PRIVILEGES;
在 my.cnf [mysqld] 區段加入:
old_passwords = 1
重啟 MySQL 後,PASSWORD() 函數將回傳舊式 16 位元組雜湊,所有新建/修改密碼自動相容舊客戶端。
shell> mysql -u user -p
Enter password: ********
Welcome to the MySQL monitor...
| MySQL 版本 | PASSWORD() 輸出 | 相容客戶端 |
|---|---|---|
| 4.0 及之前 | 16 位元組 (舊式) | 舊客戶端 |
| 4.1+ (預設) | 41 位元組 (新式, * + 40 hex) | 新客戶端 (4.1+) |
| 4.1+ (old_passwords=1) | 16 位元組 (舊式) | 新舊皆可 |
OLD_PASSWORD() 或 old_passwords=1 維持相容。