В 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)




У вас возникла проблема с новой версией 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;
Имя базы данных, к которой пользователь должен получить доступ. или вы можете просто использовать только последний оператор ALTER, который также решит вашу проблему. В ALTER вам просто нужно передать свое имя пользователя, вот и все
ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ ДЛЯ your_db_name. * TO 'your_user_name' @ '%', идентифицированного 'your_user_password';
Хорошо, вы столкнулись с проблемой при подключении к БД, верно? Это означает, что вы также указываете какое-то имя БД в строке подключения, ту же БД необходимо добавить вместо your_db_name. надеюсь, ты ясно
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.
@MarkRotteveel Да! Я тоже согласен с этим.
@MarkRotteveel как?
@theonlygusti Вам необходимо обновить MySQL Connector / J как минимум до версии 5.1.46 или, что лучше, до версии 8.0.14.
@MarkRotteveel, как мне это сделать? stackoverflow.com/questions/54413365/…
@theonlygusti Либо обновив зависимость в вашем определении зависимости Maven или Gradle, либо вручную загрузив новую версию с сайта MySQL и заменив ее в зависимостях вашего проекта.
вы видели этот ^^ вопрос?
столкнулся с ERROR 1396 (HY000): Operation ALTER USER failed for 'user'@'localhost'
@Yusef Создание нового пользователя - не лучшее решение, но, по крайней мере, оно работает.
Возможно, вы используете неправильный mysql_connector.
Используйте коннектор той же версии mysql
Спасибо. Это работает для меня (на DBeaver выберите MySQL 8+ вместо MySQL), и я считаю, что это должно быть правильное решение.
Я столкнулся с этой ошибкой в одном приложении Spring Boot, но не в другом. Наконец, я обнаружил, что версия Spring Boot в том, что не работает, была 2.0.0.RELEASE, а та, которая работала, была 2.0.1.RELEASE. Это привело к различию в соединителе MySQL - 5.1.45 и 5.1.46. Я обновил версию Spring Boot для приложения, которое выдавало эту ошибку при запуске, и теперь оно работает.
Это мне помогло!
Сработало у меня! Я использовал версию 1.5.8.RELEASE.
Вам нужно просто удалить старый коннектор и загрузить новую версию (mysql-connector-java-5.1.46)
Это сработало. Я потратил почти 2 дня на поиск этого решения. Спасибо.
Я думаю, что лучше обновить ваш пакет lib "mysql-connector", чтобы база данных была еще более безопасной.
Я использую mysql версии 8.0.12. Когда я обновил mysql-connector-java до версии 8.0.11, проблема исчезла.
Это отличный ответ! Я использовал 5.1.44 с mysql 8. Я использовал последнюю версию 8.0.19, и она сработала!
Если вы можете обновить свой коннектор до версии, которая поддерживает новый плагин аутентификации MySQL 8, сделайте это. Если по какой-то причине это не вариант, измените метод аутентификации пользователя базы данных по умолчанию на собственный.
удалите файл подключения .jar, если вы добавили файл jar с несколькими версиями соединителя, добавьте только файл jar соединителя, соответствующий вашей версии sql.
Я использую mysql 8.0.12, и обновление коннектора mysql до mysql-connector-java-8.0.12 решило проблему для меня.
Надеюсь, это кому-то поможет.
Обновитесь как минимум до 5.1.46 или последней версии, как сегодня у нас есть 8.0.18. Это поможет решить проблему.
Как упоминалось в вышеприведенных репликах:
Начиная с 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:
Загрузите текущий коннектор J из здесь. Затем скопируйте его в свою ОС.
В NetBeans щелкните вкладку "Файлы", которая находится рядом с вкладкой "Проекты". Найдите mysql-connector-java-5.1.23.jar или любой другой старый коннектор, который у вас есть. Удалите этот старый соединитель. Вставьте новый коннектор.
Щелкните вкладку "Проекты". Перейдите в папку "Библиотеки". Удалите старый соединитель mysql. Щелкните правой кнопкой мыши папку "Библиотеки". Выберите Добавить банку / папку. Перейдите в то место, где вы разместили новый соединитель, и выберите «Открыть».
На вкладке "Проект" щелкните проект правой кнопкой мыши. Выберите «Разрешить источники данных» в нижней части всплывающего меню. Щелкните Добавить соединение. На этом этапе NetBeans переходит вперед и предполагает, что вы хотите использовать старый соединитель. Нажмите кнопку «Назад», чтобы вернуться к пропущенному окну. Удалите старый разъем и добавьте новый. Нажмите «Далее» и «Проверить соединение», чтобы убедиться, что оно работает.
Для справки по видео я нашел это полезным. Для IntelliJ IDEA я нашел это полезным.
Я понимаю, что мой ответ не совсем актуален. Я разместил здесь свой ответ NetBeans, потому что мой собственный вопрос помечен как дубликат этого вопроса.
Обновите пакет 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
Я сделал ту же проблему, используя приведенную ниже зависимость:
<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')
}
}
Другие указали на корневую проблему, но в моем случае я использовал dbeaver и изначально при настройке соединения mysql с dbeaver выбирал неправильный драйвер mysql (ответ здесь: https://github.com/dbeaver/dbeaver/issues/4691#issuecomment-442173584)
Выбор варианта MySQL на рисунке ниже приведет к ошибке, упомянутой, поскольку драйвером является mysql 4+, который можно увидеть в подсказке с информацией о базе данных.
Вместо того, чтобы выбирать драйвер MySQL, выберите драйвер MySQL 8+, показанный на рисунке ниже.
Спасибо, это была моя проблема. Произошла ли у вас другая ошибка: «Извлечение открытого ключа запрещено»?
Интересно, что после вышесказанного dbeaver загрузил таблицы.
СПАСИБО. Это мне очень помогло. Для тех, кто все еще получает ошибку «Public Ket Retrieval is not allowed» в DBeaver, я нашел ссылку, которая решает эту здесь.
Public key retrieval is not allowedЛюди, получившие Public Key Retrieval is not allowed. Пожалуйста, попробуйте перезапустить программу.
В последних версиях DBeaver (проверенных с помощью версии 7.3) выше доступны две опции: «MySql 5» и «MySql». Вы должны выбрать «MySql», а также, когда вы наведете указатель мыши на эту опцию, появится подсказка, говорящая, что это для mysql версии 8+.
У меня также есть эта ошибка, которая сбивает с толку. В конце концов я обнаружил, что это не имеет отношения к версии java-коннектора mysql, на самом деле ошибка заключается в том, что я установил неправильное имя-пользователя-источника данных (эта конфигурация: spring.datasource.druid.username).
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
Моя среда:
MySQL Server 8.0.22<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<version>5.1.44</version>
</dependency>
mysql_native_password.
Здравствуйте, что вы подразумеваете под "your_db_name. *" В третьей строке, что это * означает для