ที่จริงไม่ใช่เรื่องใหม่ เคย post ไว้ใน ติดต่อ mysql มีปัญหาแก้อย่างไร แต่พอดีว่า ก็ยังพบเจอปัญหานี้อยู่เป็นประจำ อีกส่วนหนึ่งอาจเพราะ hosting โดยทั่วไป PHP ยังใช้ version เก่าอยู่ ก็ขอเก็บไว้ที่นี่ด้วย กันลืม
mysql_connect(): Client does not support authentication protocol requested by server; consider upgrading MySQL client in ...
ปัญหานี้เกิดจาก การที่ MySQL
มีการเปลี่ยนแปลงกระบวนการในการเข้ารหัส password ของ user
ผลก็คือ ทำให้ client รุ่นเก่า ไม่สามารถติดต่อ MySQL ได้
ซึ่งกลไกดังกล่าว มีใช้ใน MySQL 4.1 เป็นต้นไป
แต่เราสามารถสั่งให้ MySQL สามารถใช้ OLD_PASSWORD() เพื่อกำหนดให้
MySQL ใช้รูปแบบการจัดเก็บ password แบบเดิมได้ เช่น
mysql> SET PASSWORD
FOR
-> 'some_user'@'some_host' =
OLD_PASSWORD('newpwd');
หรือการมี user อยู่แล้ว
mysql> UPDATE mysql.user
SET Password = OLD_PASSWORD('newpwd')
-> WHERE Host = 'some_host' AND User =
'some_user';
mysql> FLUSH PRIVILEGES;
ถ้าคุณมี user อยู่เป็นพัน เปลี่ยนแบบนี้คงไม่ไหวแน่ กรณีนี้ให้สั่ง MySQL ทำงานคู่กับ parameter --old-passwords
mysqld --old-passwords
อีกวิธีหนึ่งคือ เข้าไปเปลี่ยน default parameter ใน ไฟล์ my.ini
ปกติจะอยู่ที่ C:Program FilesMySQLmy.ini ( recomment default
directory ของ mysql ได้เปลี่ยนแล้วนะครับ)
หา config เกี่ยวกับ password
#Use old password
encryption method
old_passwords
สาเหตุที่ Client* รุ่นเก่า ไม่สามารถใช้งาน
MySQL รุ่นใหม่ (4.1 หรือใหม่กว่า) นั้นเป็นเพราะว่า
ใน MySQL รุ่นเก่า ( ก่อน 4.1) นั้น เมื่อเรากำหนดรหัสให้ user MySQL
จะทำการเข้ารหัส และเก็บรหัสในรูปแบบที่ได้จากการถูก hashing
ซึ่งมีความยาวเพียง 16 bytes ในขณะที่ MySQL 4.1 ขึ้นไป
ได้เพิ่มความปลอดภัย เพื่อลดความเสี่ยงในการถอดรหัส
เมื่อเราใช้คำสั่ง SELECT PASSWORD('mypass');
ใน MySQL รุ่นเก่า จะได้ผลเป็น 6f8c114b58f2ce9e
ซึ่งมีความยาว 16
bytes
แต่ MySQL รุ่นใหม่ (4.1.0)จะค่าที่มีความยาว 41 byte
แต่ในขณะที่ MySQL รุ่น 4.1.1 จะได้ค่า
*43c8aa34cdc98eddd3de1fe9a9c2c2a9f92bb2098d75
ค่า hashing ที่ได้ มีขนาด 45
bytes
ดังนั้น ใครที่ใช้ 4.1.0
ควรเปลี่ยนไปใช้ 4.1.1 หรือสูงกว่าได้แล้วครับ
*** Client ในที่นี้ หมายถึง
โปรแกรมที่ทำหน้าที่ขอใช้บริการ MySQL เช่น mysql, MySQL Front,...
หรือ library, api ,module ที่ใช้ในการติดต่อกับ MySQL Server
***
ปัจจุบันนี้ PHP 5.1.2 ค่อนข้างนิ่งมาก (เมื่อเทียบกับตัวก่อนๆ)
Links
A.2.3. Client does not support authentication
protocol
Client does not support authentication protocol
Password Hashing in MySQL 4.1
พึ่งเห็นบทความนี้ มีประโยชน์มากครับ