Як вирішити проблему неможливо завантажити плагін автентифікації 'caching_sha2_password'


108

У eclipse, коли я запустив свою програму, я отримав це - Не вдалося виявити діалект для використання. 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. java: 1746) в at com.mysql.jdbc.MysqlIO.doHandshake (MysqlIO.java:1226) в at 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.jdb .JDBC4Connection. (JDBC4Connection.java:47) at at sun.reflect.NativeConstructorAccessorImpl.

Відповіді:


166

Починаючи з MySQL 8.0.4, вони змінили плагін автентифікації за замовчуванням для сервера MySQL з mysql_native_password на caching_sha2_password .

Ви можете запустити наведену нижче команду, щоб вирішити проблему.

зразок імені користувача / пароля => студент / пропуск123

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

Для отримання детальної інформації зверніться до офіційної сторінки: Довідковий посібник MySQL


8
Хоча це працює, краще оновити версію MySQL Connector / J (як пропонують інші відповіді), оскільки це дозволяє використовувати більш безпечний плагін автентифікації sha2_caching.
Mark Rotteveel

@MarkRotteveel Так! Я також з цим згоден.
Gaurav,

@MarkRotteveel як?
theonlygusti

4
@theonlygusti Вам потрібно оновити MySQL Connector / J щонайменше до 5.1.46, або - краще - до 8.0.14.
Марк Роттевіл

@MarkRotteveel як це зробити? stackoverflow.com/questions/54413365 / ...
theonlygusti

62

Інші вказували на кореневу проблему, але в моєму випадку я використовував dbeaver і спочатку при налаштуванні з'єднання mysql з dbeaver вибирав неправильний драйвер mysql (кредит тут для відповіді: https://github.com/dbeaver/dbeaver/ issues / 4691 # issuecomment-442173584 )

Вибір варіанту MySQL на малюнку нижче дасть помилку, згадану як драйвер mysql 4+, що можна побачити в підказці з інформацією про базу даних.


Для цієї помилки при виборі верхнього варіанту mysql 4+ на цьому малюнку буде видано помилку, згадану в цьому запитанні


Замість вибору драйвера MySQL замість цього виберіть драйвер MySQL 8+, як показано на малюнку нижче.


введіть тут опис зображення


6
Дякую, це була саме моя проблема. Тоді ви випадково отримали чергову помилку: "Отримання відкритого ключа заборонено"?
Томаш Зато - відновити Моніку

Цікаво, що після вищезазначеного dbeaver завантажував таблиці.
Павло

3
ДЯКУЮ. Це мені дуже допомогло. Для тих, хто все ще отримує помилку "Громадське отримання кетів заборонено" в DBeaver, я знайшов посилання, яке це вирішує тут .
jpisty

2
Public key retrieval is not allowed
aderchox

42

Оновіть свій пакет lib mysql-конектор своєю версією mysql, як показано нижче, я використовую версію 8.0.13 і в pom я змінив версію:

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

Після цього моя проблема вирішена.


1
Дякуємо за корисну відповідь. Для інших, щоб знайти останню версію, використовуйте це посилання; mvnrepository.com/artifact/mysql/mysql-connector-java
yusuf


16

Я стикався з цією помилкою в одній програмі Spring Boot, але не в іншій. Нарешті, я виявив, що версія Spring Boot у не працює 2.0.0.RELEASE, а що працювала - 2.0.1.RELEASE. Це призвело до різниці в роз'ємі MySQL - 5.1.45 проти 5.1.46. Я оновив версію Spring Boot для програми, яка видавала цю помилку під час запуску, і тепер вона працює.


Це мені допомогло!
Anand Varkey Philips

Працював у мене! Я використовував версію 1.5.8.RELEASE.
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. Це допоможе вирішити проблему.
Атул

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';

8

Це можуть бути ваші з'єднувачі для 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)


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. *" У третьому рядку, що це означає *
Сарат Мохан,

Ім'я db, куди користувач припускає отримати доступ. або ви можете просто використовувати лише останній оператор ALTER, який також вирішить вашу проблему. У програмі ALTER вам просто потрібно передати своє ім'я користувача - ось і все

НАДАЙТЕ ВСІ ПРИВІЛЕГІЇ на your_db_name. * ДО 'your_user_name' @ '%' ідентифікований за допомогою 'your_user_password';
Сарат Мохан,

Добре, ви стикаєтесь із проблемою під час підключення до БД, чи не так? Це означає, що ви також вказуєте якесь ім'я БД у рядку підключення; ту саму БД потрібно додати замість імені вашого_db_. сподіваюся, ви зрозуміли

4

Я зіткнувся з цією проблемою на NetBeans під час роботи з готовим проектом з цієї книги про Murach JSP . Проблема була викликана використанням з'єднувача 5.1.23 J з базою даних MySQL 8.0.13. Мені потрібно було замінити старий драйвер на новий. Після завантаження Connector J це зробило три кроки.

Як замінити з'єднувач проекту NetBeans J:

  1. Завантажте поточний Connector J звідси . Потім скопіюйте його у свою ОС.

  2. У NetBeans натисніть на вкладку Файли, яка знаходиться поруч із вкладкою Проекти. Знайдіть mysql-connector-java-5.1.23.jar або будь-який старий роз’єм, який у вас є. Видаліть цей старий роз’єм. Вставте новий з'єднувач.

  3. Клацніть на вкладку Проекти. Перейдіть до папки Бібліотеки. Видаліть старий роз'єм mysql. Клацніть правою кнопкою миші на папці Бібліотеки. Виберіть Додати банку / папку. Перейдіть до місця, де ви встановили новий роз’єм, і виберіть відкритим.

  4. На вкладці Проект клацніть правою кнопкою миші на проекті. Виберіть Вирішити джерела даних внизу спливаючого меню. Клацніть на Додати підключення. На цьому етапі NetBeans пропускає вперед і припускає, що ви хочете використовувати старий роз’єм. Натисніть кнопку Назад, щоб повернутися до пропущеного вікна. Вийміть старий роз'єм і додайте новий роз'єм. Клацніть «Далі» та «Перевірте підключення», щоб переконатися, що воно працює.

Для відеодовідки я знайшов це корисним. Для IntelliJ IDEA я знайшов це корисним.


Я розумію, що моя відповідь не зовсім актуальна. Я розмістив тут свою відповідь NetBeans, оскільки моє власне запитання позначено як дублікат цього запитання.
Jack J

4

Я зробив точно таку ж проблему, використовуючи залежність нижче:

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

Я просто переходжу на версію 46, і все працює.


3

Я думаю, що краще оновити ваш lib-пакет "mysql-конектор", щоб база даних могла бути ще більш безпечною.

Я використовую mysql версії 8.0.12. Коли я оновив mysql-connector-java до версії 8.0.11, проблема зникла.


2

Якщо ви можете оновити з'єднувач до версії, яка підтримує новий плагін автентифікації MySQL 8, зробіть це. Якщо з якихось причин це неможливо, змініть метод автентифікації за замовчуванням користувача бази даних на рідний.


0

видаліть файл .jar connect, якщо ви додали файл jar-коннектора з декількома версіями, додайте лише файл jar-коннектора, який відповідає вашій версії sql.


0

Іншою причиною може бути той факт, що ви вказуєте на неправильний порт.

Переконайтеся, що ви насправді вказуєте на правильний SQL-сервер. Можливо, у вас встановлена ​​програма MySQL за замовчуванням, яка працює на 3306, але вам може знадобитися інший екземпляр MySQL.

Перевірте порти та запустіть запит щодо бази даних.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.