如何解决无法加载身份验证插件“ cache_sha2_password”的问题

在 eclipse 当我开始我的应用程序我得到了这个-无法发现方言使用。SQLException: 无法加载身份验证插件‘ cache _ sha2 _ password’。

SQLException: 无法加载身份验证插件 ‘ cache _ sha2 _ password’. at 作者: com.mysql.jdbc.SQLError.createSQLException (SQLError.java: 868) 作者: com.mysql.jdbc.SQLError.createSQLException (SQLError.java: 864) ProcdHandshakeWithPluggableAuthentication (MysqlIO.java: 1746) 在 com.mysql.jdbc. MysqlIO.doHandshake (MysqlIO.java: 1226) Com.mysql.jdbc. ConnectionImp.coreConnect (ConnectionImp.java: 2191) 在 只连接到 OneTryOnly (ConnectionImp.java: 2222) 在 Jdbc. ConnectionImp.createNewIO (ConnectionImp.java: 2017) 在 com.mysql.jdbc. ConnectionImpl (ConnectionImp.java: 779) 在 com.mysql.jdbc.JDBC4Connection (JDBC4Connection.java: 47) 本地构造函数 AccessorImp.newInstance0(本地构造函数) 方法) NewInstance (未知源) 在 NewInstance (未知) 源代码) ,地址是 java.lang.response. Construction tor.newInstance (Unknown Source) at com.mysql.jdbc. Util.handleNewInstance (Util.java: 425) 在 GetInstance (ConnectionImp.java: 389) at 在 Connect (NonRegisteringDriver.java: 330) 在 java.sql.DriverManager.getConnection (Unknown Source) GetConnection (Unknown Source) at GetConnection (DriverManagerConnectionSource.java: 54) 在 Db. ConnectionSourceBase.Discovery ConnectionProperties (ConnectionSourceBase.java: 46) 在 Db. DriverManagerConnectionSource.start (DriverManagerConnectionSource.java: 38) 在 Joran.action. NestedComplexPropertyIA.end (NestedComplexPropertyIA.java: 161) 在 CalEndAction (Interpreter.java: 309) 在 EndElement (Interpreter.java: 193) 在 EndElement (Interpreter.java: 179) 在 Play (EventPlayer.java: 62) 在 Joran. GenericConfigurator.doConfigure (GenericConfigurator.java: 165) 在 Joran. GenericConfigurator.doConfigure (GenericConfigurator.java: 152) 在 Joran. GenericConfigurator.doConfigure (GenericConfigurator.java: 110) 在 Joran. GenericConfigurator.doConfigure (GenericConfigurator.java: 53) 在 ConextInitializer.configureByResource (ContextInitializer.java: 75) 在 AutoConfig (ContextInitializer.java: 150) 在 Init (StaticLoggerBinder.java: 84) at 在 Impl. StaticLoggerBinder. (StaticLoggerBinder.java: 55) LoggerFactory.bind (LoggerFactory.java: 150) 性能初始化(LoggerFactory.java: 124) 在 GetILoggerFactory (LoggerFactory.java: 412) at 在 AddStatus (StatusViaSLF4JLoggerFactory.java: 32) 在 Util. StatusViaSLF4JLoggerFactory.addInfo (StatusViaSLF4JLoggerFactory.java: 20) 在 OnStartup (LogbackServletContainerInitializer.java: 32) 在 Core. StandardContext.startInternal (StandardContext.java: 5245) 在 Java: 150) 在 Core. ContainerBase $StartChild.call (ContainerBase.java: 1421) 在 Core. ContainerBase $StartChild.call (ContainerBase.java: 1411) FutureTask.run (Unknown Source) at 并发。 ThreadPoolExecutor.runWorker (未知源) 线程池执行者 $Worker.run (未知来源) At at java.lang. Thread.run (Unknown Source)

278265 次浏览

你有问题与新的 MySQL 版本,附带“缓存 _ 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;

从 MySQL 8.0.4开始,它们更改了默认值 从 Mysql _ national _ password到 MySQL 服务器的身份验证插件 缓存 _ sha2 _ password

您可以运行下面的命令来解决这个问题。

Sample username/password = > Student/pass123

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

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

可能您使用了错误的 mysql _ connect。

使用相同 mysql 版本的连接器

我在一个 SpringBoot 应用程序中遇到了这个错误,但在另一个应用程序中没有遇到。最后,我发现不能工作的 SpringBoot 版本是2.0.0。释放和一个正在工作的是2.0。释放。这导致了 MySQL 连接器的不同——5.1.45和5.1.46。我更新了在启动时抛出这个错误的应用程序的 SpringBoot 版本,现在它可以工作了。

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

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

我使用的是8.0.12版本的 mysql。

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

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

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

希望能帮到别人。

如上所述:

从 MySQL 8.0.4开始,MySQL 团队将 MySQL 服务器的默认身份验证插件从 MySQL _ nate _ password 更改为 cache _ 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 服务器。您可能在3306上运行默认的 MySQL 安装,但是您实际上可能需要一个不同的 MySQL 实例。

检查端口并对数据库运行一些查询。

在使用来自 这本 Murach JSP 的书的现成项目时,我在 NetBeans 上遇到了这个问题。问题是由使用5.1.23 Connector J 和 MySQL 8.0.13数据库引起的。我需要用一个新的司机来替换旧的司机。在下载 ConnectorJ 之后,这需要三个步骤。

如何替换 NetBeans 项目连接器 J:

  1. 给你下载当前的连接器 J,然后复制到操作系统中。

  2. 在 NetBeans 中,单击“文件”选项卡,该选项卡位于“项目”选项卡旁边。找到 mysql-Connector-java-5.1.23.jar 或者任何旧的连接器。删除这个旧连接器。粘贴新的连接器。

  3. 单击 Projects 选项卡。导航到 Library 文件夹。删除旧的 mysql 连接器。右键单击“库”文件夹。选择 Add Jar/Folder。导航到放置新连接器的位置,并选择 open。

  4. 在 Project 选项卡中,右键单击该项目。在弹出式功能表底部选取「解析资料来源」。单击“添加连接”。此时 NetBeans 将跳过前面的步骤,并假设您希望使用旧的连接器。单击 Back 按钮返回到跳过的窗口。删除旧的连接器,并添加新的连接器。单击“下一步”和“测试连接”以确保它能正常工作。

对于视频参考,我发现 这个是有用的。对于 IntelliJ IDEA,我发现 这个是有用的。

使用 mysql 版本升级你的 mysql 连接器“ lib 包,如下所示。我使用的是8.0.13版本,在 pom 中我修改了版本:

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

我只要换到46版,一切都会好起来的。

这可能是您需要更新的 MySQL 连接器,因为 MySQL8更改了密码的加密——所以旧的连接器正在错误地加密它们。

可以在 给你中找到 java 连接器的专用回购。
如果你使用 Flyway 插件 ,你也应该考虑 也在更新

然后你可以简单地更新你的 (咒语):

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

或者对于其他使用 格拉德尔的人,你可以用以下方式更新 建造,分级:

 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)

其他人指出了根本问题,但是在我的例子中,我使用的是 dbever,最初用 dbever 设置 mysql 连接时,选择了错误的 mysql 驱动程序(请参考此处的答案: https://github.com/dbeaver/dbeaver/issues/4691#issuecomment-442173584)

如果选择下图中的 MySQL 选项,将得到提到的错误,因为驱动程序是 mysql4 + ,这可以在数据库信息提示中看到。


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


而不是选择 MySQL 驱动程序,而是选择 MySQL 8 + 驱动程序,如下图所示。


enter image description here

我也有这个错误,这是令人困惑的。最终我发现这与 mysql java 连接器版本无关,实际上错误在于我设置了错误的数据源-用户-名称(此配置为 spring.datasource.druid.username)。

  1. Sprint 引导错误信息是:
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 连接器版本
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<version>5.1.44</version>
</dependency>
  1. 该用户使用的密码插件是 mysql_native_password

如果您遇到此错误 Authentication plugin 'caching_sha2_password' cannot be loaded的导出或其他。因为 DBeaver 仍然使用 MySQL 二进制版本5。

因此,您需要从 https://dev.mysql.com/downloads/mysql/下载 MySQL 二进制版本8,然后将其解压缩到新环境的某个路径,如下图所示。

enter image description here

然后您需要从这里或在编辑连接上设置二进制

enter image description here

enter image description here