การแก้ปัญหา ติดต่อกับ MySQL 4.1.x ไม่ได้

หลายคน คงเคยมีปัญหา เวลาติดต่อกับ MySQL 4.1.x ขึ้นไป

mysql_connect(): Client does not support authentication protocol requested by server;

ปัญหานี้เกิดจาก การที่ MySQL มีการเปลี่ยนแปลงกระบวนการในการเข้ารหัส password ของ user
ผลก็คือ ทำให้ client รุ่นเก่า ไม่สามารถติดต่อ MySQL ได้ ซึ่งกลไกดังกล่าว มีใช้ใน MySQL 4.1 เป็นต้นไป

แต่เราสามารถสั่งให้ MySQL สามารถใช้ OLD_PASSWORD() เพื่อกำหนดให้ MySQL ใช้รูปแบบการจัดเก็บ password แบบเดิมได้ เช่น

mysql> SET PASSWORD FOR

อีกวิธีหนึ่งคือ เข้าไปเปลี่ยน default parameter ใน ไฟล์ my.ini ปกติจะอยู่ที่ C:\Program Files\MySQL\my.ini ( recomment default directory ของ mysql ได้เปลี่ยนแล้วนะครับ)
หา config เกี่ยวกับ password

#Use old password encryption method 
old_passwords 

ปัญหานี้เกิดจาก การที่ MySQL มีการเปลี่ยนแปลงกระบวนการในการเข้ารหัส password ของ user

ขยายความอีกนิดครับ
สาเหตุที่ 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 หรือสูงกว่าได้แล้วครับ
หวังว่า 4.1.2 คงไม่มีเปลี่ยนส่วนนี้แล้วนะ :lol:

* Client ในที่นี้ หมายถึง โปรแกรมที่ทำหน้าที่ขอใช้บริการ MySQL เช่น mysql, MySQL Front,…
หรือ library, api ,module ที่ใช้ในการติดต่อกับ MySQL Server

ขอบคุณที่ share ครับ :slight_smile:

Edit: ขออนุญาตย้ายมาอยู่หมวด Other ด้วยนะครับ

เป็นอย่างนี้นี่เอง :smiley:

แนะนำคุณ Pizzaman น่าจะจับแยกเรื่องน่าอ่าน เอาไว้อีก Topics หนึ่ง ต่างหากเอาไว้เลยก็ดีครับ แล้วเอากระทู้ความรู้ดีๆ ใส่เข้าไป คนมาใหม่ก็จะได้ไล่อ่านเป็นความรู้ได้ แยกจากเรื่องพูดคุยทั่วไป :slight_smile:

เป็นพวก How-To ดีไหมครับ

เป็นประเภท “เรื่องน่าอ่าน” ดีกว่าไหมครับ เพราะหลายอย่างๆ เช่น ขั้นตอนการหมดอายุของ domain มันไม่ใช่เรื่อง how-to แต่มันก็น่าอ่านเหมือนกัน :lol:

เห็นด้วยครับ ยินดีที่ชอบครับ ไว้จะเอาเรื่องน่าอ่านมาฝากเสมอๆ

อีกวิธีหนึ่งคือ เข้าไปเปลี่ยน default parameter ใน ไฟล์ my.ini ปกติจะอยู่ที่ C:\Program Files\MySQL\my.ini ( recomment default directory ของ mysql ได้เปลี่ยนแล้วนะครับ)
หา config เกี่ยวกับ password

#Use old password encryption method
old_passwords

ที่ผมลองกับ 4.1.10 win32 มันจะเป็น ขีดกลาง ครับ
old-passwords
ตัว admin ที่มาพร้อม mysql ใช้ง่ายมาก แค่คลิกๆ มันแก้ ini ให้เอง ไม่เหมือนเวอร์ชั่นเก่า

เป็นประเภท “เรื่องน่าอ่าน” ดีกว่าไหมครับ เพราะหลายอย่างๆ เช่น ขั้นตอนการหมดอายุของ domain มันไม่ใช่เรื่อง how-to แต่มันก็น่าอ่านเหมือนกัน :lol:

คิดไปคิดมา อย่าเพิ่มกลุ่มเลยครับ เอาเป็นว่า PIN เรื่องน่าสนใจในกลุ่มต่างๆไว้ดีกว่า เห็นได้ชัดด้านบนแต่ละกลุ่ม ทำให้คนเข้ามาก็ได้ประโยชน์ด้วย และแยกแยะกลุ่มชัดเจน ไม่งั้นกลุ่มใหม่ จะกลายเป็นเกาเหลาไป เริ่มทยอยทำแล้วครับ หวังว่าทุกท่านคง ok นะครับ

:wavey: ดีครับถ้าเอาไปรวมกันหมดมันจะเป็นเกาเหลา
แยกกลุ่มแล้ว pin ไว้ก็เห็นชัดดี :slight_smile:

กำเลย
เพิ่งจะเข้ามาอ่าน ปวดหัวฟรีอยู่ 2 วัน :smash:

ดีครับ

ขอย้ายมาอยู่ How To นะครับ