Java 如何解决无法加载身份验证插件的问题';缓存密码';问题

Java 如何解决无法加载身份验证插件的问题';缓存密码';问题,java,mysql,eclipse,maven,spring-boot,Java,Mysql,Eclipse,Maven,Spring Boot,在eclipse中,当我启动我的应用程序时,我发现了这个问题——无法发现要使用的方言。java.sql.SQLException:无法加载身份验证插件“缓存\u sha2\u密码” 位于java.sql.SQLException:无法加载身份验证插件 “缓存\u sha2\u密码”。至少 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:868)位于 com.mysql.jdbc.SQLError.createSQLExceptio

在eclipse中,当我启动我的应用程序时,我发现了这个问题——无法发现要使用的方言。java.sql.SQLException:无法加载身份验证插件“缓存\u sha2\u密码”

位于java.sql.SQLException:无法加载身份验证插件 “缓存\u sha2\u密码”。至少 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:868)位于 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:864)位于 com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.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) at at sun.reflect.nativeConstructor附件mpl.newInstance0(本机 方法)在 sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源) 至少 sun.reflect.delegatingConstructor AccessorImpl.newInstance(未知 源代码)位于java.lang.reflect.Constructor.newInstance(未知 源码)位于com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 至少 com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389)位于 在 com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330) 位于的java.sql.DriverManager.getConnection(未知源) 位于的java.sql.DriverManager.getConnection(未知源) ch.qos.logback.core.db.driverManager连接源.getConnection(driverManager连接源.java:54) 至少 ConnectionSourceBase.discoverConnectionProperties(ConnectionSourceBase.java:46) 至少 ch.qos.logback.core.db.driverManager连接源.start(driverManager连接源.java:38) 至少 ch.qos.logback.core.joran.action.NestedComplexPropertyIA.end(NestedComplexPropertyIA.java:161) 至少 ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:309) 至少 ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:193) 至少 ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:179) 至少 ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62) 至少 ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165) 至少 ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:152) 至少 ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110) 至少 ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53) 至少 ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75) 至少 ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150) 至少 org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)位于 在 org.slf4j.impl.StaticLoggerBinder.(StaticLoggerBinder.java:55) 位于org.slf4j.LoggerFactory.bind(LoggerFactory.java:150) 性能化(LoggerFactory.java:124) 至少 org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)位于 在 ch.qos.logback.classic.util.StatusViaSLF4JLoggerFactory.addStatus(StatusViaSLF4JLoggerFactory.java:32) 至少 ch.qos.logback.classic.util.StatusViaSLF4JLoggerFactory.addInfo(StatusViaSLF4JLoggerFactory.java:20) 至少 LogbackServletContainerInitializer.onStartup(LogbackServletContainerInitializer.java:32) 至少 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5245) 至少 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 至少 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1421) 至少 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1411) 在处运行(未知源) 位于的java.util.concurrent.ThreadPoolExecutor.runWorker(未知源) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(未知源) 位于java.lang.Thread.run(未知源)


您对“缓存\u sha2\u密码”插件附带的新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.0.4开始,他们更改了默认设置 MySQL服务器的身份验证插件,从MySQL\u本机\u密码缓存\u sha2\u密码

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

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

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

有关详细信息,请参阅官方页面:

可能是您使用了错误的mysql\u连接器


使用相同mysql版本的连接器

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

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

我认为最好更新“mysql-connector”lib包,这样数据库就更安全了


我使用的是8.0.12版的mysql。当我将mysql connector java更新到版本8.0.11时,问题就解决了。

如果您可以将连接器更新到支持
 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';
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
    <version>8.0.13</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.44</version>
</dependency>
 buildscript {
    ext {
        ...
    }
    repositories {
        ...
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath('mysql:mysql-connector-java:8.0.11')
    }
 }

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

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