MySQL กับปัญหา authentication protocol


ที่จริงไม่ใช่เรื่องใหม่ เคย 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

คำสำคัญ (Tags): #database#php#it#opensource
หมายเลขบันทึก: 21620เขียนเมื่อ 29 มีนาคม 2006 17:50 น. ()แก้ไขเมื่อ 22 พฤษภาคม 2012 12:00 น. ()สัญญาอนุญาต: จำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (1)

พึ่งเห็นบทความนี้ มีประโยชน์มากครับ

 

 

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท