web-dev-qa-db-ja.com

接続Java-MySql:公開キーの取得は許可されていません

コネクタ8.0.11を使用して、MySQLデータベースをJavaに接続しようとしました。すべては大丈夫のようですが、私はこの例外があります:

スレッド「main」の例外Java.sql.SQLNonTransientConnectionException:公開鍵の取得は許可されていません

スタックトレース:

    Exception in thread "main" Java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.Java:108) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.Java:95) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.Java:122) at 
 com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.Java:862) at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.Java:444) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.Java:230) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.Java:226) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.Java:438) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.Java:146) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.Java:119) at ConnectionManager.getConnection(ConnectionManager.Java:28) at Main.main(Main.Java:8)

コネクタマネージャ:

public class ConnectionManager {

    public static final String serverTimeZone = "UTC";
    public static final String serverName = "localhost";
    public static final String databaseName ="biblioteka";
    public static final int portNumber = 3306;
    public static final String user = "anyroot";
    public static final String password = "anyroot";

    public static Connection getConnection() throws SQLException {

        MysqlDataSource dataSource = new MysqlDataSource();

        dataSource.setUseSSL( false );
        dataSource.setServerTimezone( serverTimeZone );
        dataSource.setServerName( serverName );
        dataSource.setDatabaseName( databaseName );
        dataSource.setPortNumber( portNumber );
        dataSource.setUser( user );
        dataSource.setPassword( password );

        return dataSource.getConnection();
    }
}
53
danny

Mysql-connectorにクライアントオプションを追加する必要がありますallowPublicKeyRetrieval=true

https://mysql-net.github.io/MySqlConnector/connection-options/

useSSL=falseの追加にも役立ちます

117
jtomaszk

jdbc urlを次のように使用します。

jdbc:mysql://localhost:3306/Database_dbName?allowPublicKeyRetrieval=true&useSSL=false;

PortNo: 3306は構成によって異なる場合があります

15
susan097

推奨される回答の代わりに、caching_sha2_password認証プラグインの代わりにmysql_native_password認証プラグインを使用して試すこともできます。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password_here'; 
6
Torsten Ojaperv

私はスプリングブートフレームワークで以下の構成を使用してこの問題を解決します

spring.datasource.url=jdbc:mysql://localhost:3306/db-name?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
3
shellhub

私の場合、上記のエラーは実際にはユーザー名とパスワードが間違っていたためです。問題の解決:1.行DriverManager.getConnection( "jdbc:mysql:// localhost:3306 /?useSSL = false"、 "username"、 "password");に移動します。ユーザー名とパスワードのフィールドが間違っている可能性があります。 mysqlクライアントの起動に使用するユーザー名とパスワードを入力します。ユーザー名は通常ルートで、パスワードはこれに似た画面が表示されたときに入力する文字列です mysqlの起動画面

注:ポート名3306は、ケースによって異なる場合があります。

1
HARSHIT KUMAR

私の場合、それはユーザーエラーでした。無効なパスワードを持つrootユーザーを使用していました。なぜ認証エラーを受け取らなかったのかはわかりませんが、代わりにこの不可解なメッセージを受け取りました。

1
juice

このソリューションはMacOS Sierraで機能し、MySQLバージョン8.0.11を実行しています。ビルドパスに追加したドライバーを確認してください-「外部jarの追加」はSQLバージョンと一致する必要があります。

String url = "jdbc:mysql://localhost:3306/syscharacterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true";
0
surendrapanday

接続URLをjdbc:mysql:// localhost:3306/hb_student_tracker?allowPublicKeyRetrieval = true&useSSL = false&serverTimezone = UTCとして指定します

0
samit tiwary

昨日データベースとやり取りすることができたため、この問題にイライラしていましたが、今朝戻った後、このエラーが発生し始めました。

allowPublicKeyRetrieval=trueフラグを追加しようとしましたが、エラーが発生し続けました。

私にとってそれを修正したのは、Project->CleanをEclipseで、CleanをTomcatサーバーで実行することでした。それらの1つ(または両方)が修正しました。

Mavenを使用してプロジェクトをビルドし、コードを変更するたびにサーバーを再起動しているため、理由がわかりません。とても刺激的...

0
Cameron Hudson

Mysql(mysqlを実行しているローカルまたはmysqlコンテナ)の接続中に次のエラーが発生した場合:

Java.sql.SQLNonTransientConnectionException:公開キーの取得は許可されていません

解決策:データベースサービスに次の行を追加します。

command: --default-authentication-plugin=mysql_native_password
0