วิธีแก้ปัญหาไม่สามารถโหลดปลั๊กอินการตรวจสอบสิทธิ์ 'caching_sha2_password'


118

ในคราสเมื่อฉันเริ่มแอปพลิเคชันฉันได้รับสิ่งนี้ - ไม่พบภาษาถิ่นที่จะใช้ java.sql.SQLException: ไม่สามารถโหลดปลั๊กอินการตรวจสอบสิทธิ์ 'caching_sha2_password'

ที่ java.sql.SQLException: ไม่สามารถโหลดปลั๊กอินการตรวจสอบสิทธิ์ 'caching_sha2_password' ที่ com.mysql.jdbc.SQLError.createSQLException (SQLError.java:868) ที่ com.mysql.jdbc.SQLError.createSQLException (SQLError.java:864) ที่ com.mysql.jdbc.MysqlIO.proithluggable. java: 1746) ที่ com.mysql.jdbc.MysqlIO.doHandshake (MysqlIO.java:1226) ที่ com.mysql.jdbc.ConnectionImpl.coreConnect (ConnectionImpl.java:2191) ที่ com.mysql.jdbc.ConnectionImpl connectOneTryOnly (ConnectionImpl.java:2222) ที่ com.mysql.jdbc.ConnectionImpl.createNewIO (ConnectionImpl.java:2017) ที่ com.mysql.jdbc.ConnectionImpl. (ConnectionImpl.java:779) ที่ com.mysql.jdbc .JDBC4Connection. (JDBC4Connection.java:47) ที่ sun.reflect.NativeConstructorAccessorImpl

คำตอบ:


171

เริ่มต้นด้วย MySQL 8.0.4 พวกเขามีการเปลี่ยนแปลงปลั๊กอินรับรองความถูกต้องเริ่มต้นสำหรับเซิร์ฟเวอร์ MySQL จากmysql_native_passwordเพื่อ caching_sha2_password

คุณสามารถเรียกใช้คำสั่งด้านล่างเพื่อแก้ไขปัญหา

ชื่อผู้ใช้ / รหัสผ่านตัวอย่าง => นักเรียน / pass123

ALTER USER 'student'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass123';

อ้างอิงหน้าอย่างเป็นทางการสำหรับรายละเอียด: คู่มืออ้างอิง MySQL


9
แม้ว่าจะใช้งานได้ แต่จะดีกว่าหากอัปเกรดเวอร์ชัน MySQL Connector / J (ตามที่แนะนำโดยคำตอบอื่น ๆ ) เนื่องจากช่วยให้คุณสามารถใช้ปลั๊กอินการตรวจสอบความถูกต้อง sha2_caching ที่ปลอดภัยยิ่งขึ้น
Mark Rotteveel

@MarkRotteveel ใช่! ฉันเห็นด้วยเช่นกัน
Gaurav

@MarkRotteveel ยังไง
theonlygusti

4
@theonlygusti คุณต้องอัปเดต MySQL Connector / J เป็นอย่างน้อย 5.1.46 หรือ - ดีกว่า - เป็น 8.0.14
Mark Rotteveel

@MarkRotteveel ฉันจะทำอย่างไร? stackoverflow.com/questions/54413365/…
theonlygusti

72

คนอื่นชี้ไปที่ปัญหาราก แต่ในกรณีของฉันฉันใช้ dbeaver และในตอนแรกเมื่อตั้งค่าการเชื่อมต่อ mysql กับ dbeaver ได้เลือกไดรเวอร์ mysql ที่ไม่ถูกต้อง (เครดิตที่นี่สำหรับคำตอบ: https://github.com/dbeaver/dbeaver/ ปัญหา / 4691 # การออกความคิดเห็น -442173584 )

การเลือกตัวเลือก MySQL ในรูปด้านล่างจะทำให้เกิดข้อผิดพลาดที่กล่าวถึงเนื่องจากไดรเวอร์คือ mysql 4+ ซึ่งสามารถดูได้ในเคล็ดลับข้อมูลฐานข้อมูล


สำหรับข้อผิดพลาดนี้ในการเลือกตัวเลือก mysql 4+ อันดับต้น ๆ ในรูปนี้จะทำให้เกิดข้อผิดพลาดที่กล่าวถึงใน quesiton นี้


แทนที่จะเลือกไดรเวอร์ MySQL ให้เลือกไดรเวอร์ MySQL 8+ แทนดังแสดงในรูปด้านล่าง


ใส่คำอธิบายภาพที่นี่


8
ขอบคุณนี่คือปัญหาของฉัน แล้วคุณได้รับข้อผิดพลาดอื่น: "ไม่อนุญาตให้ดึงคีย์สาธารณะ" หรือไม่
Tomáš Zato - คืนสถานะ Monica

ที่น่าสนใจไม่หลังจากข้างต้น dbeaver โหลดตาราง
Paul

4
ขอขอบคุณ. สิ่งนี้ช่วยฉันได้มาก สำหรับผู้ที่ยังคงได้รับ "สาธารณะเกตุดึงไม่ได้รับอนุญาต" ข้อผิดพลาดใน DBeaver ผมพบว่าการเชื่อมโยงที่แก้นี้ที่นี่
jpisty

7
Public key retrieval is not allowed
aderchox

1
ใน DBeaver เวอร์ชันล่าสุด (ตรวจสอบด้วยเวอร์ชัน 7.3) ด้านบนสองตัวเลือกที่มีให้คือ "MySql 5" และ "MySql" คุณต้องเลือก "MySql" และเมื่อคุณวางเมาส์เหนือตัวเลือกนั้นระบบจะแสดงคำใบ้ว่าสำหรับ mysql เวอร์ชัน 8+
techmagister

45

อัปเกรดแพ็คเกจ lib mysql-connector "ของคุณด้วยเวอร์ชัน mysql ของคุณเช่นด้านล่างฉันใช้เวอร์ชัน 8.0.13 และใน pom ฉันเปลี่ยนเวอร์ชัน:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
    <version>8.0.13</version>
</dependency>

ปัญหาของฉันได้รับการแก้ไขแล้วหลังจากนี้


2
ขอบคุณสำหรับคำตอบที่เป็นประโยชน์ สำหรับผู้อื่นหากต้องการค้นหาเวอร์ชันล่าสุดโปรดใช้ลิงก์นี้ mvnrepository.com/artifact/mysql/mysql-connector-java
yusuf


16

ฉันกดปุ่มข้อผิดพลาดนี้ในแอป Spring Boot หนึ่ง แต่ไม่ใช่ในแอปอื่น ในที่สุดฉันก็พบเวอร์ชัน Spring Boot ในเวอร์ชันที่ใช้งานไม่ได้คือ 2.0.0 รีลีสและเวอร์ชันที่ใช้งานได้คือ 2.0.1 รีลีส ซึ่งนำไปสู่ความแตกต่างใน MySQL Connector - 5.1.45 เทียบกับ 5.1.46 ฉันอัปเดตเวอร์ชัน Spring Boot สำหรับแอปที่ส่งข้อผิดพลาดนี้เมื่อเริ่มต้นและตอนนี้ใช้งานได้แล้ว


สิ่งนี้ช่วยฉันได้!
Anand Varkey Philips

ทำงานให้ฉัน! ฉันใช้เวอร์ชัน 1.5.8 รีลีส
Ionuț Ciuta

15

คุณต้องการเพียงแค่ลบตัวเชื่อมต่อเก่าของคุณและดาวน์โหลดเวอร์ชันใหม่ (mysql-connector-java-5.1.46)


มันได้ผล ฉันเสียเวลาเกือบ 2 วันในการหาวิธีแก้ปัญหานี้ ขอบคุณ.
Hemant Nagpal

11

ฉันใช้ mysql 8.0.12 และการอัปเดตตัวเชื่อมต่อ mysql เป็น mysql-connector-java-8.0.12 สามารถแก้ไขปัญหาให้ฉันได้

หวังว่ามันจะช่วยใครสักคน


อัปเกรดเป็นอย่างน้อย 5.1.46 หรือเวอร์ชันล่าสุดเช่นวันนี้เรามี 8.0.18 วิธีนี้จะช่วยแก้ไขปัญหา
Atul

10

นี่อาจเป็นตัวเชื่อมต่อของคุณสำหรับ MySQL ซึ่งจำเป็นต้องได้รับการอัปเดตเนื่องจาก MySQL8 เปลี่ยนการเข้ารหัสรหัสผ่านดังนั้นตัวเชื่อมต่อรุ่นเก่าจึงเข้ารหัสไม่ถูกต้อง

ซื้อคืนภาค Maven สำหรับตัวเชื่อมต่อ Java สามารถพบได้ที่นี่
หากคุณใช้ปลั๊กอิน flywayคุณควรพิจารณาอัปเดตด้วยเช่นกัน !

จากนั้นคุณสามารถอัปเดตmaven pomของคุณด้วย:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.17</version>
</dependency>

หรือสำหรับผู้อื่นที่ใช้Gradleคุณสามารถอัปเดตbuild.gradleด้วย:

 buildscript {
    ext {
        ...
    }
    repositories {
        ...
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath('mysql:mysql-connector-java:8.0.11')
    }
 }

สิ่งที่คุณต้องทำจริงๆ (ตัวอย่าง build.gradle)


9

ตามที่กล่าวไว้ในการตอบกลับข้างต้น:

เริ่มต้นด้วย MySQL 8.0.4 ทีม MySQL ได้เปลี่ยนปลั๊กอินการตรวจสอบความถูกต้องเริ่มต้นสำหรับเซิร์ฟเวอร์ MySQL จาก mysql_native_password เป็น caching_sha2_password

ดังนั้นมีสามวิธีในการแก้ไขปัญหานี้:

 1. drop USER 'user_name'@'localhost';
    flush privileges;
    CREATE USER 'user_name'@'localhost' IDENTIFIED BY 'user_name';
    GRANT ALL PRIVILEGES ON * . * TO 'user_name'@'localhost';
    ALTER USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 
    'user_name';

 2. drop USER 'user_name'@'localhost';
    flush privileges;
    CREATE USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'user_name';
GRANT ALL PRIVILEGES ON * . * TO 'user_name'@'localhost'

 3. If the user is already created, the use the following command:

    ALTER USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 
        'user_name';

5

คุณกำลังมีปัญหากับ MySQL เวอร์ชันใหม่ที่มาพร้อมกับปลั๊กอิน "caching_sha2_password" ให้ปฏิบัติตามคำสั่งด้านล่างเพื่อแก้ไข

DROP USER 'your_user_name'@'%';
CREATE USER 'your_user_name'@'%' IDENTIFIED WITH mysql_native_password BY 'your_user_password';
GRANT ALL PRIVILEGES ON your_db_name.* TO 'your_user_name'@'%' identified by 'your_user_password';

หรือคุณสามารถใช้คำสั่งด้านล่างเพื่อรักษาสิทธิ์ของคุณตามที่เป็นอยู่:

ALTER USER your_user_name IDENTIFIED WITH mysql_native_password;

สวัสดีคุณหมายถึงอะไร "your_db_name. *" ในบรรทัดที่สามสิ่งที่ * แสดงถึง
Sarath Mohan

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

ให้สิทธิ์ทั้งหมดใน your_db_name * ถึง 'your_user_name' @ '%' ที่ระบุโดย 'your_user_password';
Sarath Mohan

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

4

ฉันคิดว่าการอัปเดตแพ็กเกจ lib "mysql-connector" จะดีกว่าดังนั้นฐานข้อมูลจึงปลอดภัยมากขึ้น

ฉันใช้ mysql ของเวอร์ชัน 8.0.12 เมื่อฉันอัปเดต mysql-connector-java เป็นเวอร์ชัน 8.0.11 ปัญหาก็หายไป


นี่ตอบโจทย์มาก! ฉันใช้5.1.44กับ mysql 8 ฉันใช้เวอร์ชันล่าสุดซึ่งเป็น 8.0.19 และใช้งานได้!
Dean Christian Armada

4

ฉันพบปัญหานี้ใน NetBeans เมื่อทำงานกับโครงการสำเร็จรูปจากหนังสือ Murach JSP เล่มนี้ ปัญหาเกิดจากการใช้ 5.1.23 Connector J กับฐานข้อมูล MySQL 8.0.13 ฉันต้องการเปลี่ยนไดรเวอร์เก่าด้วยไดรเวอร์ใหม่ หลังจากดาวน์โหลดตัวเชื่อมต่อ J ขั้นตอนนี้ใช้เวลาสามขั้นตอน

วิธีเปลี่ยน NetBeans Project Connector J:

  1. ดาวน์โหลด J เชื่อมต่อปัจจุบันจากที่นี่ จากนั้นคัดลอกในระบบปฏิบัติการของคุณ

  2. ใน NetBeans ให้คลิกที่แท็บไฟล์ซึ่งอยู่ถัดจากแท็บโครงการ ค้นหา mysql-connector-java-5.1.23.jar หรือตัวเชื่อมต่อเก่า ๆ ที่คุณมี ลบตัวเชื่อมต่อเก่านี้ วางในตัวเชื่อมต่อใหม่

  3. คลิกที่แท็บโครงการ ไปที่โฟลเดอร์ Libraries ลบตัวเชื่อมต่อ mysql เก่า คลิกขวาที่โฟลเดอร์ Libraries เลือกเพิ่ม Jar / Folder ไปที่ตำแหน่งที่คุณใส่ตัวเชื่อมต่อใหม่แล้วเลือกเปิด

  4. ในแท็บโครงการคลิกขวาที่โครงการ เลือกแก้ไขแหล่งข้อมูลที่ด้านล่างของเมนูป๊อปอัป คลิกที่เพิ่มการเชื่อมต่อ ณ จุดนี้ NetBeans จะข้ามไปข้างหน้าและถือว่าคุณต้องการใช้ตัวเชื่อมต่อเก่า คลิกปุ่มย้อนกลับเพื่อกลับไปที่หน้าต่างที่ข้ามไป ถอดขั้วต่อเก่าและเพิ่มขั้วต่อใหม่ คลิกถัดไปและทดสอบการเชื่อมต่อเพื่อให้แน่ใจว่าใช้งานได้

สำหรับการอ้างอิงวิดีโอฉันพบว่าสิ่งนี้มีประโยชน์ สำหรับ IntelliJ IDEA ฉันพบว่าสิ่งนี้มีประโยชน์


ฉันรู้ว่าคำตอบของฉันไม่เกี่ยวข้องทั้งหมด ฉันโพสต์คำตอบ NetBeans ของฉันที่นี่เนื่องจากคำถามของฉันเองถูกทำเครื่องหมายว่าซ้ำกับคำถามนี้
Jack J

4

ฉันประสบปัญหาเดียวกันโดยใช้การอ้างอิงด้านล่าง:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.44</version>
</dependency>

ฉันเพิ่งเปลี่ยนเป็นเวอร์ชัน 46 และทุกอย่างใช้งานได้


2

หากคุณสามารถอัปเดตตัวเชื่อมต่อเป็นเวอร์ชันซึ่งรองรับปลั๊กอินการตรวจสอบสิทธิ์ใหม่ของ MySQL 8 ให้ทำเช่นนั้น หากนั่นไม่ใช่ตัวเลือกด้วยเหตุผลบางประการให้เปลี่ยนวิธีการพิสูจน์ตัวตนเริ่มต้นของผู้ใช้ฐานข้อมูลของคุณเป็นเนทีฟ


0

ลบไฟล์ connect. jar หากคุณเพิ่มไฟล์ jar ตัวเชื่อมต่อหลายเวอร์ชันเพิ่มเฉพาะไฟล์ jar ตัวเชื่อมต่อที่ตรงกับเวอร์ชัน sql ของคุณ


0

อีกสาเหตุหนึ่งอาจเกิดจากการที่คุณชี้ไปที่พอร์ตผิด

ตรวจสอบให้แน่ใจว่าคุณกำลังชี้ไปที่เซิร์ฟเวอร์ SQL ที่ถูกต้องจริงๆ คุณอาจมีการติดตั้ง MySQL เริ่มต้นที่ทำงานบน 3306 แต่จริงๆแล้วคุณอาจต้องการอินสแตนซ์ MySQL อื่น

ตรวจสอบพอร์ตและเรียกใช้แบบสอบถามกับฐานข้อมูล

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