在我安装了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]
答案 0 :(得分:1)
您可以安装客户端应用程序(例如HeidiSQL)来解决该问题 要么 另一个选项是,您应该将客户端选项添加到mysql-connector allowPublicKeyRetrieval = true,以允许客户端自动从服务器请求公钥。请注意,AllowPublicKeyRetrieval = True可能允许恶意代理执行MITM攻击以获取纯文本密码,因此默认情况下为False,必须明确启用。
您也可以在将其用于测试/开发目的时尝试添加useSSL = false 如下所示:
jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true&useSSL=false