解決方法認証プラグインを読み込めない「caching_sha2_password」の問題


109

私がアプリケーションを起動したときの日食で、私はこれを手に入れました-使用する方言を見つけることができませんでした。java.sql.SQLException:認証プラグイン 'caching_sha2_password'を読み込めません。

java.sql.SQLExceptionで:認証プラグイン「caching_sha2_password」をロードできません。at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:868)at 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)atcom.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 at com.mysql.jdbc .JDBC4Connection。(JDBC4Connection.java:47)atsun.reflect.NativeConstructorAccessorImpl。

回答:


166

MySQL 8.0.4以降、MySQLサーバーのデフォルトの認証プラグインがmysql_native_passwordからcaching_sha2_passwordに変更さました

以下のコマンドを実行して、問題を解決できます。

サンプルのユーザー名/パスワード=>学生/ pass123

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

詳細については、公式ページを参照してください:MySQLリファレンスマニュアル


8
これは機能しますが、MySQL Connector / Jバージョンをアップグレードすることをお勧めします(他の回答のいくつかで示唆されているように)。これにより、より安全なsha2_caching認証プラグインを使用できるようになります。
Mark Rotteveel 2018年

@MarkRotteveelはい!私もそれに同意します。
Gaurav 2018年

@MarkRotteveelどうやって?
theonlygusti

4
@theonlygusti MySQL Connector / Jを少なくとも5.1.46に、または-より良い-8.0.14に更新する必要があります。
MarkRotteveel19年

@MarkRotteveelどうすればいいですか?stackoverflow.com/questions/54413365/...
theonlygusti

64

他の人は根本的な問題を指摘していますが、私の場合、私はdbeaverを使用していて、最初にdbeaverとのmysql接続をセットアップするときに、間違ったmysqlドライバーを選択していました(回答はここにクレジット:https//github.com/dbeaver/dbeaver/ issues / 4691#issuecomment-442173584

次の図でMySQLを選択すると、ドライバーがmysql 4+であるため、データベース情報のヒントに記載されているエラーが発生します。


このエラーの場合、この図で上位のmysql 4+を選択すると、この質問に記載されているエラーが発生します。


次の図に示すように、MySQLドライバーを選択するのではなく、MySQL8 +ドライバーを選択します。


ここに画像の説明を入力してください


6
おかげで、これはまさに私の問題でした。その後、「公開鍵の取得は許可されていません」という別のエラーが発生しましたか?
トマーシュZato -復活モニカ

興味深いことに、上記の後ではなく、dbeaverがテーブルをロードしました。
ポール

3
ありがとうございました。これは私を大いに助けました。DBeaverで「PublicKetRetrievalは許可されていません」というエラーがまだ発生している場合は、これを解決するリンクをここで見つけました。
jpisty

2
Public key retrieval is not allowed
aderchox

43

以下のようにmysql-connector "libパッケージをmysqlバージョンにアップグレードします。8.0.13バージョンを使用しており、pomでバージョンを変更しました。

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

この後、私の問題は解決しました。


1
有益な回答をありがとう。その他の場合、最新バージョンを見つけるには、このリンクを使用してください。mvnrepository.com/artifact/mysql/mysql-connector-java
ユスフ

31

間違ったmysql_connectorを使用している可能性があります。

同じmysqlバージョンのコネクタを使用する


16

あるSpringBootアプリでこのエラーが発生しましたが、別のアプリでは発生しませんでした。最後に、動作していないもののSpring Bootバージョンは2.0.0.RELEASEであり、動作していたものは2.0.1.RELEASEであることがわかりました。これにより、MySQLコネクタに違いが生じました-5.1.45と5.1.46。起動時にこのエラーをスローしていたアプリのSpringBootバージョンを更新しましたが、動作するようになりました。


これは私を助けました!
Anand Varkey Philips 2018

私のために働いた!バージョン1.5.8.RELEASEを使用していました。
Ionuț Ciuta 2018

15

古いコネクタを削除して新しいバージョンをダウンロードするだけです(mysql-connector-java-5.1.46)


出来た。私はこの解決策を見つけるのにほぼ2日を無駄にしました。ありがとう。
Hemant Nagpal 2018

11

私はmysql8.0.12を使用しており、mysqlコネクタをmysql-connector-java-8.0.12に更新すると問題が解決しました。

それが誰かを助けることを願っています。


少なくとも5.1.46にアップグレードするか、今日のような最新バージョンに8.0.18をアップグレードします。これは問題の解決に役立ちます。
アトゥール

9

上記の返信で述べたように:

MySQL 8.0.4以降、MySQLチームはMySQLサーバーのデフォルトの認証プラグインをmysql_native_passwordからcaching_sha2_passwordに変更しました。

したがって、この問題を解決するには3つの方法があります。

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

8

これは、MySQL8がパスワードの暗号化を変更したため、更新が必要なMySQLのコネクタである可能性があります。そのため、古いコネクタはパスワードを誤って暗号化しています。

JavaコネクタのMavenリポジトリはここにあります
flywayプラグインを使用している場合は、それも更新することを検討する必要があります

次に、次のコマンドでMavenPOMを更新できます。

<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')
    }
 }

あなたが本当にする必要があるすべて(build.gradleの例)


5

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

こんにちは、3行目の「your_db_name。*」の意味*は何を表していますか
SarathMohan18年

ユーザーがアクセスを取得することを想定しているデータベース名。または、問題を解決する最後のALTERステートメントのみを使用することもできます。ALTERでは、ユーザー名をすべて渡す必要があります

your_db_name。*のすべての特権を「your_user_password」で識別される「your_user_name」@「%」に付与します。
サラスモハン

さて、あなたはDBに接続しているときに問題に直面していますよね?接続文字列にDB名も指定しているということは、your_db_nameの代わりに同じDBを追加する必要があるということです。クリアしてください

4

からの既製のプロジェクトで作業しているときに、NetBeansでこの問題に遭遇しました このMurachJSPブックの。この問題は、MySQL8.0.13データベースで5.1.23コネクタJを使用したことが原因で発生しました。古いドライバーを新しいドライバーに交換する必要がありました。Connector Jをダウンロードした後、これには3つの手順が必要でした。

NetBeansプロジェクトコネクタJを置き換える方法:

  1. ここから現在のコネクタJをダウンロードします。次に、それをOSにコピーします。

  2. NetBeansで、「プロジェクト」タブの横にある「ファイル」タブをクリックします。mysql-connector-java-5.1.23.jarまたはお持ちの古いコネクタを見つけます。この古いコネクタを削除します。新しいコネクタに貼り付けます。

  3. [プロジェクト]タブをクリックします。Librariesフォルダーに移動します。古いmysqlコネクタを削除します。ライブラリフォルダを右クリックします。Add Jar / Folderを選択します。新しいコネクタを配置する場所に移動し、[開く]を選択します。

  4. [プロジェクト]タブで、プロジェクトを右クリックします。ポップアップメニューの下部にある[データソースの解決]を選択します。[接続の追加]をクリックします。この時点で、NetBeansは先にスキップし、古いコネクタを使用することを想定しています。スキップしたウィンドウに戻るには、[戻る]ボタンをクリックします。古いコネクタを取り外し、新しいコネクタを追加します。[次へ]と[接続のテスト]をクリックして、機能することを確認します。

ビデオの参考として、これが便利だと思いました。IntelliJ IDEAの場合、これが役立つことがわかりました。


私の答えは完全に関連しているわけではないことを理解しています。自分の質問がこの質問の重複としてマークされているため、NetBeansの回答をここに投稿しました。
ジャックJ

4

以下の依存関係を使用して、まったく同じ問題を実行しました。

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

バージョン46に変更するだけで、すべてが機能します。


3

データベースをさらに安全にできるように、「mysql-connector」libパッケージを更新する方が良いと思います。

バージョン8.0.12のmysqlを使用しています。mysql-connector-javaをバージョン8.0.11に更新すると、問題は解消されました。


2

コネクタをMySQL8の新しい認証プラグインをサポートするバージョンに更新できる場合は、それを実行します。何らかの理由でそれが選択できない場合は、データベースユーザーのデフォルトの認証方法をネイティブに変更してください。


0

複数バージョンのコネクタjarファイルを追加した場合は、connect.jarファイルを削除します。SQLバージョンと一致するコネクタjarファイルのみを追加します。


0

別の原因は、間違ったポートを指しているという事実である可能性があります。

実際に正しいSQLサーバーを指していることを確認してください。MySQLのデフォルトインストールが3306で実行されている場合がありますが、実際には別のMySQLインスタンスが必要な場合があります。

ポートを確認し、データベースに対してクエリを実行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.