com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:不允许公共密钥检索

时间:2019-02-07 13:07:18

标签: mysql maven spring-boot java-8 mysql-8.0

在我安装了mysql8服务器并尝试连接后,我在java8上运行了一个spring boot项目,并尝试获取错误

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieval is not allowed.

最初,我安装了mysql5,并且工作正常,但是当我安装mysql8服务器时,出现错误com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieval is not allowed.

我确实使用过&allowPublicKeyRetrieval=true,但并没有太大帮助。我只是无法继续进行,也无法连接到数据库。我也无法再次将MySql降级到5。

我正在使用idea intelliJ作为IDE。我还尝试添加以下依赖项:

<artifactId>mysql-connector-java</artifactId>
<version>8.0.14</version>

但是,这些解决方案均无效。

下面的错误是我从8.0.14版本还原mysql-connector-java时得到的错误,但是我得到了类似的错误 我也使用8.0.14版本时出现错误。 即使更改为 MYSQL8InnoDBDialect ,问题仍然存在。

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieval is not allowed
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_181]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_181]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_181]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_181]
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.47.jar:5.1.47]
        at com.mysql.jdbc.Util.getInstance(Util.java:408) ~[mysql-connector-java-5.1.47.jar:5.1.47]
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919) ~[mysql-connector-java-5.1.47.jar:5.1.47]
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898) ~[mysql-connector-java-5.1.47.jar:5.1.47]
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887) ~[mysql-connector-java-5.1.47.jar:5.1.47]
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:861) ~[mysql-connector-java-5.1.47.jar:5.1.47]
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:878) ~[mysql-connector-java-5.1.47.jar:5.1.47]
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:874) ~[mysql-connector-java-5.1.47.jar:5.1.47]
        at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1777) ~[mysql-connector-java-5.1.47.jar:5.1.47]
        at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1224) ~[mysql-connector-java-5.1.47.jar:5.1.47]
        at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2199) ~[mysql-connector-java-5.1.47.jar:5.1.47]
        at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2230) ~[mysql-connector-java-5.1.47.jar:5.1.47]

1 个答案:

答案 0 :(得分:1)

您可以安装客户端应用程序(例如HeidiSQL)来解决该问题 要么 另一个选项是,您应该将客户端选项添加到mysql-connector allowPublicKeyRetrieval = true,以允许客户端自动从服务器请求公钥。请注意,AllowPublicKeyRetrieval = True可能允许恶意代理执行MITM攻击以获取纯文本密码,因此默认情况下为False,必须明确启用。

您也可以在将其用于测试/开发目的时尝试添加useSSL = false 如下所示:

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