java - 如何解決無法加載身份驗證插件'caching_sha2_password'的問題




mysql eclipse (10)

從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參考手冊

在eclipse中,當我開始我的應用程序時,我得到了這個 - 無法發現要使用的方言。 java.sql.SQLException:無法加載身份驗證插件'caching_sha2_password'。

在java.sql.SQLException:無法加載身份驗證插件'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 java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source)at at java.lang.Thread.run(Unknown Source)


使用你的mysql版本升級你的mysql-connector“lib包,我正在使用8.0.13版本,並在pom中更改了版本:

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

此後我的問題解決了。


另一個原因可能是您指向錯誤的端口。

確保您實際上指向正確的SQL服務器。 您可能在3306上運行默認的MySQL安裝,但實際上您可能需要不同的MySQL實例。

檢查端口並對db運行一些查詢。


可能是你使用了錯誤的mysql_connector。

使用相同mysql版本的連接器


您只需刪除舊連接器並下載新版本(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;

我在一個Spring Boot應用程序中遇到此錯誤,但在另一個應用程序中沒有。 最後,我發現一個不工作的Spring Boot版本是2.0.0.RELEASE,正在運行的版本是2.0.1.RELEASE。 這導致MySQL連接器的差異 - 5.1.45與5.1.46。 我更新了在啟動時拋出此錯誤的應用程序的Spring Boot版本,現在它可以工作了。


我正在使用mysql 8.0.12並將mysql連接器更新為mysql-connector-java-8.0.12為我解決了這個問題。

希望它對某人有幫助。


正如上面提到的那樣:

從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';

當我使用 Murach JSP手冊中 的現成項目時,我在NetBeans上遇到了這個問題。 該問題是由使用5.1.23 Connector J和MySQL 8.0.13數據庫引起的。 我需要用新的驅動程序替換舊的驅動程序。 下載連接器J後,這需要三個步驟。

如何替換NetBeans項目連接器J:

  1. here 下載當前的連接器J. 然後在您的操作系統中復制它。

  2. 在NetBeans中,單擊“項目”選項卡旁邊的“文件”選項卡。 找到mysql-connector-java-5.1.23.jar或者你擁有的任何舊連接器。 刪除此舊連接器。 粘貼在新連接器中。

  3. 單擊“項目”選項卡。 導航到Libraries文件夾。 刪除舊的mysql連接器。 右鍵單擊Libraries文件夾。 選擇添加Jar /文件夾。 導航到放置新連接器的位置,然後選擇打開。

  4. 在“項目”選項卡中,右鍵單擊項目。 選擇彈出菜單底部的Resolve Data Sources。 單擊“添加連接”。 此時,NetBeans會向前跳過並假設您要使用舊連接器。 單擊“後退”按鈕返回跳過的窗口。 刪除舊連接器,然後添加新連接器。 單擊“下一步”和“測試連接”以確保其有效。

對於視頻參考,我發現 this 很有用。 對於IntelliJ IDEA,我發現 this 很有用。