ข้อผิดพลาด MYSQL 2049 (HY000): การเชื่อมต่อที่ใช้โพรโทคอลการรับรองความถูกต้องเก่า (ก่อน 4.1.1) ที่ใช้ (ตัวเลือกไคลเอนต์ 'เปิดใช้งาน' secure_auth ')


9

เมื่อฉันพยายามกู้คืนดัมพ์ฐานข้อมูลทั้งหมดซึ่งอยู่ในเวอร์ชัน 5.0 ถึง 5.6 เวอร์ชันมันได้รับการกู้คืนและหลังจากนั้นเมื่อฉันพยายามเชื่อมต่อใหม่ฉันได้รับข้อผิดพลาดต่อไปนี้

ERROR 2049 (HY000): Connection using old (pre-4.1.1) authentication protocol ref used (client option 'secure_auth' enabled)..

ฉันได้ลองเพิ่มบรรทัดต่อไปนี้ใน My.ini และเริ่มบริการใหม่ แต่ปัญหายังคงอยู่จนถึง

skip-grant-tables ลิงก์ต่อไปนี้ระบุว่าเป็นข้อบกพร่องใน MYSQL

https://github.com/santisaez/powerstack/blob/master/packages/mysql/mysql-powerstack-secure_auth.patch

ใครบ้างมีการแก้ไขสำหรับวิธีนี้

คำตอบ:


6

นี่ไม่ใช่ข้อผิดพลาดหากคุณมีบัญชีผู้ใช้ที่มีรหัสผ่านที่ใช้อัลกอริทึมการแฮชแบบเก่าแก่ หากคุณอ่านรายงานข้อผิดพลาดที่กล่าวถึงในลิงค์ที่คุณโพสต์:

http://bugs.mysql.com/bug.php?id=69027

[1 พฤษภาคม 15:24] ทอดด์ชาวนา

วิธีแก้ปัญหา ("วิธีแก้ปัญหา" จริง ๆ ) นี่คือการเปลี่ยนรหัสผ่านสำหรับผู้ใช้ที่ได้รับผลกระทบเป็นแฮช post-4.1 นี่เป็นวิธีปฏิบัติที่ดีที่สุดที่แนะนำโดยไม่คำนึงถึง - การแฮชรหัสผ่านและกระบวนการอนุญาตก่อนหน้า 4.1 มีข้อ จำกัด ด้านความปลอดภัยที่น่าทึ่ง (กล่าวถึงในเอกสารประกอบที่http://dev.mysql.com/doc/refman/5.0/en/password-hashing.html )

การกู้คืนmysqlสกีมาเวอร์ชัน 5.0 ลงในเซิร์ฟเวอร์ 5.6 เป็นความคิดที่ไม่ดีเลยเนื่องจาก 5.6 มีคอลัมน์เพิ่มเติมในบางตารางและบางตารางใหม่ทั้งหมดซึ่งอาจหรืออาจจะไม่หายไปตอนนี้ขึ้นอยู่กับวิธีที่คุณกำหนดค่า mysqldump เมื่อคุณ สร้างไฟล์ดัมพ์ คุณอาจทำให้เกิดปัญหาอื่น ๆ ที่คุณอาจไม่เห็นในทันที

นอกจากนี้ฉันไม่เห็นskip-grant-tablesพูดถึงในบทความ ... แต่ถ้าคุณใช้ตัวเลือกนั้นกับเซิร์ฟเวอร์อย่างถูกต้องการตรวจสอบทั้งหมดจะถูกข้ามและคุณควรจะสามารถเข้าสู่ระบบและรีเซ็ตรหัสผ่าน


8

บนบรรทัดคำสั่งใช้สิ่งต่อไปนี้ถ้าคุณไม่มีทางเลือก ...

mysql -uTheUseerNAme -pThePassword DbName -h HostName --skip-secure-auth

หวังว่านี่จะช่วยให้ใครบางคนเป็นปัญหาของฉันที่เชื่อมต่อจาก Linux


สิ่งนี้ไม่ได้ผลสำหรับฉัน ฉันยังได้รับข้อความแสดงข้อผิดพลาด
fanchyna

6

ถ้าคุณใช้ MySQL Workbench คุณต้องเลือกตัวเลือกนี้:

ป้อนคำอธิบายรูปภาพที่นี่


ขณะนี้ใช้งานได้สำหรับการเชื่อมต่อกับฐานข้อมูลปัญหาของการไม่สามารถนำเข้า / ส่งออกจะยังคงมีอยู่ ฉันได้ทดสอบและยืนยันสิ่งนี้เนื่องจากฉันกำลังมองหาวิธีที่จะได้รับอนุญาตให้นำเข้า / ส่งออกข้อมูลด้วยโปรโตคอลตรวจสอบความถูกต้องเก่า
rkeet

ขอบคุณ! มันทำงานสำหรับฉันเมื่อฉันพยายามเชื่อมต่อโดยใช้ Workbench
Huynh Vinh Phat

ฉันพบว่าตัวเลือกนี้อยู่ใน workbench เวอร์ชัน 6.0.7 แต่ไม่ใช่ในเวอร์ชันล่าสุด
Mian Asbat Ahmad

1

นี่เป็นความหมายจริงๆสำหรับความคิดเห็นในคำตอบก่อนหน้า แต่มีขนาดใหญ่เกินกว่าที่จะแสดงความคิดเห็นใน StackExchange ได้

ฉันก็กำลังทุกข์ทรมานจากปัญหานี้เช่นกัน ดังนั้นฉันจึงสร้างผู้ใช้ใหม่ด้วยแฮชสไตล์ใหม่และตอนนี้ใช้ผู้ใช้ใหม่โดยไม่มีปัญหา นี่คือสิ่งที่ฉันทำ:

    [172.16.2.222:mysql Thu Nov  7 16:16:25 2013]> use mysql;
    Database changed
    [172.16.2.222:mysql Thu Nov  7 16:22:23 2013]> describe user;
    describe user;
    +-----------------------+-----------------------------------+------+-----+---------+-------+
    | Field                 | Type                              | Null | Key | Default | Extra |
    +-----------------------+-----------------------------------+------+-----+---------+-------+
    | Host                  | char(60)                          | NO   | PRI |         |       |
    | User                  | char(16)                          | NO   | PRI |         |       |
    | Password              | char(41)                          | NO   |     |         |       |

ฉันยินดีที่จะเห็นว่าคอลัมน์รหัสผ่านของเรากว้างพอที่จะเก็บแฮชแบบใหม่แล้ว (หากมีความกว้างน้อยกว่า 41 ตัวอักษรฉันอาจไม่มีความกล้าที่จะขยาย :-)

    [172.16.2.222:mysql Thu Nov  7 16:13:10 2013]> show variables like '%pass%';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | old_passwords   | ON    |
    | report_password |       |
    +-----------------+-------+
    2 rows in set (0.06 sec)

old_passwordsการONเป็นปัญหาชัดเจนดังนั้นฉันจึงเปลี่ยนชั่วคราว:

    [172.16.2.222:mysql Thu Nov  7 16:13:59 2013]> set session old_passwords = 'OFF';
    Query OK, 0 rows affected (0.05 sec)

    [172.16.2.222:mysql Thu Nov  7 16:14:12 2013]> show variables like '%pass%';
    show variables like '%pass%';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | old_passwords   | OFF   |
    | report_password |       |
    +-----------------+-------+
    2 rows in set (0.06 sec)

จากนั้นฉันสร้างผู้ใช้ใหม่:

    [172.16.2.222:mysql Thu Nov  7 16:14:16 2013]> create user 'erich' IDENTIFIED BY 'SEKRIT PASSWORD';

... และดูที่แฮชใหม่:

    [172.16.2.222:mysql Thu Nov  7 16:14:26 2013]> select * from user order by User;
    +-----------+--------------+-------------------------------------------+--------
    | Host      | User         | Password                                  | Select_
    +-----------+--------------+-------------------------------------------+--------
    | localhost | someguy      | 3d9505dd323e53f1                          | Y      
    | %         | someotherguy | 79b3df3b004bb855                          | Y      
    | %         | erich        | *D2589EF6B59146801234567897BB190123456789 | N      
    | %         | anotheroldguy| 60577e0d77b9212b                          | Y      

สังเกตว่าแฮชของฉันใหญ่กว่าตัวอื่นอย่างไร!

เพียงเพื่อจะเป็นระเบียบเรียบร้อยผมตั้งกลับไปold_passwords OFFนี่อาจไม่มีประโยชน์เพราะฉันไม่สามารถคิดได้ว่าทำไมใคร ๆ ก็ต้องการสร้างผู้ใช้ใหม่ด้วยรหัสผ่านเก่า แต่ใครจะรู้

อย่างไรก็ตาม: วิธีนี้แก้ไขได้สำหรับฉัน


สิ่งนี้สามารถแก้ไขคำถามของ OP ได้หรือไม่ หากไม่เป็นเช่นนั้นอาจเป็นคำถามและคำตอบของตัวเอง
Max Vernon

@ MaxVernon ฉันคิดว่ามันขึ้นอยู่กับ OP เพื่อตัดสินใจว่าจะแก้ไขหรือไม่ มันใช้งานได้สำหรับฉัน
offby1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.