如何解决无法加载身份validation插件’caching_sha2_password’的问题

在eclipse中,当我开始我的应用程序时,我得到了这个 – 无法发现要使用的方言。 java.sql.SQLException:无法加载身份validation插件’caching_sha2_password’。

在java.sql.SQLException:无法加载身份validation插件’caching_sha2_password’。 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:868)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:864)at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO。 java:1746)at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1226)at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2191)at com.mysql.jdbc.ConnectionImpl。 connectOneTryOnly(ConnectionImpl.java:2222)at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2017)at com.mysql.jdbc.ConnectionImpl。(ConnectionImpl.java:779)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 at at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)at a java.lang.reflect.Constructor.newInstance(Unknown Source)at a t 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 at java.ql.DriverManager.getConnection(未知源)位于ch.qos.logback.core.db.DriverManagerConnectionSource.getConnection(DriverManagerConnectionSource.java:54)at ch.qos.logback.core.db.ConnectionSourceBase.discoverConnectionProperties(ConnectionSourceBase) .java:46)at ch.qos.logback.core.db.DriverManagerConnectionSource.start(DriverManagerConnectionSource.java:38)at ch.qos.logback.core.joran.action.NestedComplexPropertyIA.end(NestedComplexPropertyIA.java:161 )at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:309)at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:193)at at at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:179)at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPl) ayer.java:62)at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165)at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:152) at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110)位于ch.qos的ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)。位于org.slf4j.impl.StaticLoggerBinder.init的ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)中的logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)( StaticLoggerBinder.java:84)at org.slf4j.impl.StaticLoggerBinder。(staticLoggerBinder.java:55)at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)at org.slf4j.LoggerFactory.performInitialization(LoggerFactory) .java:124)at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)at ch.qos.logback.classic.util.StatusViaSLF4JLoggerFactory.addSta tus(StatusViaSLF4JLoggerFactory.java:32)位于ch.qos.logback.classic.util.StatusViaSLF4JLoggerFactory.addInfo(StatusViaSLF4JLoggerFactory.java:20)at ch.qos.logback.classic.servlet.LogbackServletContainerInitializer.onStartup(LogbackServletContainerInitializer.java: 32)at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5245)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)at org.apache.catalina。 core.ContainerBase $ StartChild.call(ContainerBase.java:1421)at org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1411)at at java.util.concurrent.FutureTask.run(Unknown Source )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 8.0.4开始,他们将MySQL服务器的默认认证插件从mysql_native_password更改为caching_sha2_password。

您可以运行以下命令来解决此问题。

示例用户名/密码 – > student / pass123

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

有关详细信息,请参阅官方页面: MySQL参考手册

可能是你使用了错误的mysql_connector。

使用相同mysql版本的连接器

我在一个Spring Boot应用程序中遇到此错误,但在另一个应用程序中没有。 最后,我发现一个不工作的Spring Boot版本是2.0.0.RELEASE,而正在运行的版本是2.0.1.RELEASE。 这导致MySQL连接器的差异 – 5.1.45与5.1.46。 我为在启动时抛出此错误的应用程序更新了Spring Boot版本,现在它可以工作了。

您只需删除旧连接器并下载新版本(mysql-connector-java-5.1.46)

您遇到了“caching_sha2_password”插件附带的新MySQL版本的问题,请按照以下命令解决问题。

 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; 

如果您可以将连接器更新为支持MySQL 8的新身份validation插件的版本,那么就这样做。 如果由于某种原因这不是一个选项,请将数据库用户的默认身份validation方法更改为本机。

我认为最好更新你的“mysql-connector”lib包,这样数据库可以更安全。

我使用的是8.0.12版的mysql。 当我将mysql-connector-java更新为8.0.11版时,问题就消失了。

删除connect .jar文件如果添加了多个版本的连接器jar文件,则只添加与sql版本匹配的连接器jar文件。

我使用mysql 8.0.12并将mysql连接器更新为mysql-connector-java-8.0.12为我解决了这个问题。

希望它对某人有帮助。