Как решить проблему "Не удается загрузить плагин аутентификации" caching_sha2_password "

В eclipse, когда я запустил свое приложение, я получил это - Не удалось найти диалект для использования. java.sql.SQLException: невозможно загрузить плагин аутентификации caching_sha2_password.

at java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password'. at at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:868) at at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:864) at at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1746) at at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1226) at at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2191) at at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2222) at at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2017) at at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:779) at at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:47) at at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at at java.lang.reflect.Constructor.newInstance(Unknown Source) at at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) at at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389) at at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330) at at java.sql.DriverManager.getConnection(Unknown Source) at at java.sql.DriverManager.getConnection(Unknown Source) at at ch.qos.logback.core.db.DriverManagerConnectionSource.getConnection(DriverManagerConnectionSource.java:54) at at ch.qos.logback.core.db.ConnectionSourceBase.discoverConnectionProperties(ConnectionSourceBase.java:46) at at ch.qos.logback.core.db.DriverManagerConnectionSource.start(DriverManagerConnectionSource.java:38) at at ch.qos.logback.core.joran.action.NestedComplexPropertyIA.end(NestedComplexPropertyIA.java:161) at at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:309) at at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:193) at at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:179) at at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62) at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165) at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:152) at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110) at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53) at at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75) at at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150) at at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84) at at org.slf4j.impl.StaticLoggerBinder.(StaticLoggerBinder.java:55) at at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150) at at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124) at at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412) at at ch.qos.logback.classic.util.StatusViaSLF4JLoggerFactory.addStatus(StatusViaSLF4JLoggerFactory.java:32) at at ch.qos.logback.classic.util.StatusViaSLF4JLoggerFactory.addInfo(StatusViaSLF4JLoggerFactory.java:20) at at ch.qos.logback.classic.servlet.LogbackServletContainerInitializer.onStartup(LogbackServletContainerInitializer.java:32) at at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5245) at at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1421) at at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1411) at at java.util.concurrent.FutureTask.run(Unknown Source) at at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at at java.lang.Thread.run(Unknown Source)

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
125
0
231 294
17

Ответы 17

У вас возникла проблема с новой версией 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 17.05.2018 11:49

Имя базы данных, к которой пользователь должен получить доступ. или вы можете просто использовать только последний оператор ALTER, который также решит вашу проблему. В ALTER вам просто нужно передать свое имя пользователя, вот и все

user8406805 17.05.2018 11:50

ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ ДЛЯ your_db_name. * TO 'your_user_name' @ '%', идентифицированного 'your_user_password';

Sarath Mohan 17.05.2018 11:53

Хорошо, вы столкнулись с проблемой при подключении к БД, верно? Это означает, что вы также указываете какое-то имя БД в строке подключения, ту же БД необходимо добавить вместо your_db_name. надеюсь, ты ясно

user8406805 17.05.2018 11:55

Starting with MySQL 8.0.4, they have changed the default authentication plugin for MySQL server from mysql_native_password to caching_sha2_password.

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

образец имени пользователя / пароля => студент / пароль123

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

Подробности см. На официальной странице: Справочное руководство по MySQL

Хотя это работает, лучше обновить версию MySQL Connector / J (как предлагается некоторыми другими ответами), поскольку это позволяет вам использовать более безопасный плагин аутентификации sha2_caching.

Mark Rotteveel 29.11.2018 17:26

@MarkRotteveel Да! Я тоже согласен с этим.

Gaurav 30.11.2018 04:07

@MarkRotteveel как?

theonlygusti 29.01.2019 04:16

@theonlygusti Вам необходимо обновить MySQL Connector / J как минимум до версии 5.1.46 или, что лучше, до версии 8.0.14.

Mark Rotteveel 29.01.2019 11:23

@MarkRotteveel, как мне это сделать? stackoverflow.com/questions/54413365/…

theonlygusti 29.01.2019 11:51

@theonlygusti Либо обновив зависимость в вашем определении зависимости Maven или Gradle, либо вручную загрузив новую версию с сайта MySQL и заменив ее в зависимостях вашего проекта.

Mark Rotteveel 29.01.2019 11:52

вы видели этот ^^ вопрос?

theonlygusti 29.01.2019 12:02

столкнулся с ERROR 1396 (HY000): Operation ALTER USER failed for 'user'@'localhost'

Yuseferi 17.03.2019 11:56

@Yusef Создание нового пользователя - не лучшее решение, но, по крайней мере, оно работает.

HeadhunterKev 27.11.2019 14:42

Возможно, вы используете неправильный mysql_connector.

Используйте коннектор той же версии mysql

Спасибо. Это работает для меня (на DBeaver выберите MySQL 8+ вместо MySQL), и я считаю, что это должно быть правильное решение.

ibic 21.03.2021 05:58

Я столкнулся с этой ошибкой в ​​одном приложении Spring Boot, но не в другом. Наконец, я обнаружил, что версия Spring Boot в том, что не работает, была 2.0.0.RELEASE, а та, которая работала, была 2.0.1.RELEASE. Это привело к различию в соединителе MySQL - 5.1.45 и 5.1.46. Я обновил версию Spring Boot для приложения, которое выдавало эту ошибку при запуске, и теперь оно работает.

Это мне помогло!

Anand Varkey Philips 27.07.2018 11:47

Сработало у меня! Я использовал версию 1.5.8.RELEASE.

Ionuț Ciuta 30.08.2018 10:38

Вам нужно просто удалить старый коннектор и загрузить новую версию (mysql-connector-java-5.1.46)

Это сработало. Я потратил почти 2 дня на поиск этого решения. Спасибо.

Hemant Nagpal 29.12.2018 17:53

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

Я использую mysql версии 8.0.12. Когда я обновил mysql-connector-java до версии 8.0.11, проблема исчезла.

Это отличный ответ! Я использовал 5.1.44 с mysql 8. Я использовал последнюю версию 8.0.19, и она сработала!

Dean Christian Armada 06.01.2021 18:28

Если вы можете обновить свой коннектор до версии, которая поддерживает новый плагин аутентификации MySQL 8, сделайте это. Если по какой-то причине это не вариант, измените метод аутентификации пользователя базы данных по умолчанию на собственный.

удалите файл подключения .jar, если вы добавили файл jar с несколькими версиями соединителя, добавьте только файл jar соединителя, соответствующий вашей версии sql.

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

Надеюсь, это кому-то поможет.

Обновитесь как минимум до 5.1.46 или последней версии, как сегодня у нас есть 8.0.18. Это поможет решить проблему.

Atul 14.11.2019 10:41

Как упоминалось в вышеприведенных репликах:

Начиная с 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';

Другой причиной может быть тот факт, что вы указываете не на тот порт.

Убедитесь, что вы действительно указываете на правильный SQL-сервер. У вас может быть установлен MySQL по умолчанию, работающий на 3306, но вам может потребоваться другой экземпляр MySQL.

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

Я столкнулся с этой проблемой на NetBeans при работе с готовым проектом из эта книга Murach JSP. Проблема была вызвана использованием соединителя J 5.1.23 с базой данных MySQL 8.0.13. Мне нужно было заменить старый драйвер на новый. После загрузки Connector J для этого потребовалось три шага.

Как заменить соединитель J проекта NetBeans:

  1. Загрузите текущий коннектор J из здесь. Затем скопируйте его в свою ОС.

  2. В NetBeans щелкните вкладку "Файлы", которая находится рядом с вкладкой "Проекты". Найдите mysql-connector-java-5.1.23.jar или любой другой старый коннектор, который у вас есть. Удалите этот старый соединитель. Вставьте новый коннектор.

  3. Щелкните вкладку "Проекты". Перейдите в папку "Библиотеки". Удалите старый соединитель mysql. Щелкните правой кнопкой мыши папку "Библиотеки". Выберите Добавить банку / папку. Перейдите в то место, где вы разместили новый соединитель, и выберите «Открыть».

  4. На вкладке "Проект" щелкните проект правой кнопкой мыши. Выберите «Разрешить источники данных» в нижней части всплывающего меню. Щелкните Добавить соединение. На этом этапе NetBeans переходит вперед и предполагает, что вы хотите использовать старый соединитель. Нажмите кнопку «Назад», чтобы вернуться к пропущенному окну. Удалите старый разъем и добавьте новый. Нажмите «Далее» и «Проверить соединение», чтобы убедиться, что оно работает.

Для справки по видео я нашел это полезным. Для IntelliJ IDEA я нашел это полезным.

Я понимаю, что мой ответ не совсем актуален. Я разместил здесь свой ответ NetBeans, потому что мой собственный вопрос помечен как дубликат этого вопроса.

Jack J 12.12.2018 03:25

Обновите пакет 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>

После этого моя проблема решилась.

Спасибо за полезный ответ. Для других, чтобы найти последнюю версию, используйте эту ссылку; mvnrepository.com/artifact/mysql/mysql-connector-java

yusuf 07.09.2019 13:41

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

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

Я просто перехожу на 46 версию и все работает.

Это могут быть ваши соединители для 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')
    }
 }

All that you really need to do (build.gradle example)

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

Выбор варианта MySQL на рисунке ниже приведет к ошибке, упомянутой, поскольку драйвером является mysql 4+, который можно увидеть в подсказке с информацией о базе данных.


For this error selecting the top mysql 4+ choice in this figure will give the error mentioned in this quesiton


Вместо того, чтобы выбирать драйвер MySQL, выберите драйвер MySQL 8+, показанный на рисунке ниже.


Спасибо, это была моя проблема. Произошла ли у вас другая ошибка: «Извлечение открытого ключа запрещено»?

Tomáš Zato - Reinstate Monica 04.02.2020 22:41

Интересно, что после вышесказанного dbeaver загрузил таблицы.

Paul 05.02.2020 02:36

СПАСИБО. Это мне очень помогло. Для тех, кто все еще получает ошибку «Public Ket Retrieval is not allowed» в DBeaver, я нашел ссылку, которая решает эту здесь.

jpisty 02.06.2020 02:30
Public key retrieval is not allowed
aderchox 04.08.2020 22:53

Люди, получившие Public Key Retrieval is not allowed. Пожалуйста, попробуйте перезапустить программу.

Pranithan T. 26.11.2020 10:17

В последних версиях DBeaver (проверенных с помощью версии 7.3) выше доступны две опции: «MySql 5» и «MySql». Вы должны выбрать «MySql», а также, когда вы наведете указатель мыши на эту опцию, появится подсказка, говорящая, что это для mysql версии 8+.

techmagister 13.12.2020 03:08

У меня также есть эта ошибка, которая сбивает с толку. В конце концов я обнаружил, что это не имеет отношения к версии java-коннектора mysql, на самом деле ошибка заключается в том, что я установил неправильное имя-пользователя-источника данных (эта конфигурация: spring.datasource.druid.username).

  1. Информация об ошибке загрузки спринта:
create connection error, 
url: jdbc:mysql://..amazonaws.com:3306/moe_grooming?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useSSL=false, errorCode 0, state null

3624 java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password

Моя среда:

  1. MySQL Server 8.0.22
  2. Версия коннектора Java для MySQL
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
    <version>5.1.44</version>
</dependency>
  1. Плагин используемого пароля этого пользователя - mysql_native_password.

Другие вопросы по теме