如何解决无法加载验证插件“缓存\u sha2\u密码”问题

mpbci0fu  于 2021-06-17  发布在  Mysql
关注(0)|答案(16)|浏览(841)

在eclipse中,当我启动我的应用程序时,我得到了这样一个问题:无法发现要使用的方言。java.sql.sqlexception:无法加载身份验证插件“caching\u sha2\u password”。
在java.sql.sqlexception:无法加载身份验证插件“caching\u sha2\u password”。在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。java:779)在com.mysql.jdbc.jdbc4connection.(jdbc4connection。java:47)在位于sun.reflect.nativeconstructoraccessorimpl.newinstance0(本机方法),位于sun.reflect.nativeconstructoraccessorimpl.newinstance(未知源),位于sun.reflect.delegatingconstructoraccessorimpl.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)在ch.qos.logback.core.db.connectionsourcebase.discoverconnectionproperties(connectionsourcebase。java:46)位于ch.qos.logback.core.db.drivermanagerconnectionsource.start(drivermanagerconnectionsource)。java:38)在ch.qos.logback.core.joran.action.nestedcomplexpropertyia.end(nestedcomplexpropertyia。java:161)at ch.qos.logback.core.joran.spi.interpreter.callendaction(解释器。java:309)at ch.qos.logback.core.joran.spi.interpreter.endelement(解释器。java:193)at ch.qos.logback.core.joran.spi.interpreter.endelement(解释器。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。java:55)在org.slf4j.loggerfactory.bind(loggerfactory。java:150)在org.slf4j.loggerfactory.performinization(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)在ch.qos.logback.classic.servlet.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.futuretask.run(未知源)at java.util.concurrent.threadpoolexecutor.runworker(未知源)at java.util.concurrent.threadpoolexecutor$worker.run(未知源)at java.lang.thread.run(未知源)

cu6pst1q

cu6pst1q1#

从mysql 8.0.4开始,他们将mysql服务器的默认身份验证插件从mysql\u native\u password更改为caching\u sha2\u password。
您可以运行以下命令来解决问题。
用户名/密码示例=>student/pass123

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

详情请参阅官方页面:mysql参考手册

hgc7kmma

hgc7kmma2#

可能是您使用了错误的mysql\u连接器。
使用相同mysql版本的连接器

svdrlsy4

svdrlsy43#

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

0x6upsns

0x6upsns4#

我认为最好更新“mysql connector”lib包,这样数据库就更安全了。
我使用的是8.0.12版本的mysql。当我将mysql连接器java更新到8.0.11版本时,问题就消失了。

axzmvihb

axzmvihb5#

如果您对带有“caching\u sha2\u 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;
eoigrqb6

eoigrqb66#

我正在使用mysql 8.0.12,并将mysql连接器更新为mysql-connector-java-8.0.12,为我解决了这个问题。
希望它能帮助别人。

rxztt3cl

rxztt3cl7#

如上所述:
从mysql 8.0.4开始,mysql团队将mysql服务器的默认身份验证插件从mysql\u native\u password更改为caching\u sha2\u 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';
yquaqz18

yquaqz188#

另一个原因可能是您指向了错误的端口。
确保您实际上指向了正确的sql server。您可能有一个默认安装的mysql在3306上运行,但实际上您可能需要一个不同的mysql示例。
检查端口并对数据库运行一些查询。

llew8vvj

llew8vvj9#

我在处理murachjsp书中的一个现成项目时,在netbeans上遇到了这个问题。这个问题是由于在mysql 8.0.13数据库中使用5.1.23连接器j造成的。我需要用一个新的司机替换旧的司机。下载连接器j后,需要三个步骤。
如何替换netbeans项目连接器j:
从这里下载当前接头j。然后复制到你的操作系统。
在netbeans中,单击projects选项卡旁边的files选项卡。找到mysql-connector-java-5.1.23.jar或任何旧的连接器。删除此旧连接器。粘贴新接头。
单击“项目”选项卡。导航到“库”文件夹。删除旧的mysql连接器。右键单击libraries文件夹。选择添加jar/文件夹。导航到放置新连接器的位置,然后选择“打开”。
在“项目”选项卡中,右键单击项目。选择弹出菜单底部的“解析数据源”。单击添加连接。此时,netbeans向前跳转并假设您想要使用旧的连接器。单击“上一步”按钮返回跳过的窗口。拆下旧接头,然后添加新接头。单击“下一步”并测试连接以确保其正常工作。
作为视频参考,我发现这是有用的。对于intellij idea,我发现这很有用。

bnlyeluc

bnlyeluc10#

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

ni65a41a

ni65a41a11#

其他人已经指出了根本问题,但在我的例子中,我使用的是dbeaver,最初使用dbeaver设置mysql连接时,选择了错误的mysql驱动程序(这里的答案是:https://github.com/dbeaver/dbeaver/issues/4691#issuecomment-442173584 )
选择下图中的mysql选项会出现前面提到的错误,因为驱动程序是mysql 4+,可以在数据库信息提示中看到。

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

im9ewurl

im9ewurl12#

这可能是mysql的连接器,需要更新,因为mysql8更改了密码加密,所以旧的连接器加密不正确。
java连接器的maven repo可以在这里找到。
如果你使用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')
    }
 }

lyr7nygr

lyr7nygr13#

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

vbkedwbf

vbkedwbf14#

我使用下面的依赖关系解决了完全相同的问题:

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

我刚换到46版,一切正常。

vsikbqxv

vsikbqxv15#

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

相关问题