当前位置: 首页 > 知识库问答 >
问题:

连接Java-MySQL:不允许检索公钥

林礼骞
2023-03-14

我尝试使用连接器8.0.11将MySQL数据库与Java连接起来。一切似乎都很好,但我得到了这个例外:

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();
    }
}

共有3个答案

蓬森
2023-03-14

从DBeaver执行此操作时,我必须转到“连接设置”-

  • 取消选中“验证服务器证书”
  • 检查“允许公钥检索”

请注意,这仅适用于本地开发

吕俊才
2023-03-14

对于DBeaver用户:

>

  • 右键单击连接,选择“编辑连接”

    在“连接设置”屏幕(主屏幕)上单击“编辑驱动程序设置”

    单击“连接属性”(在最新版本中称为“驱动程序属性”)

    右键单击“用户属性”区域并选择“添加新属性”

    添加两个属性:“useSSL”和“lowPublicKeyRetrival”

    双击“值”列,将其值设置为“false”和“true”

  • 郦祯
    2023-03-14

    您应该将客户端选项添加到mysql连接器中,以允许客户端自动从服务器请求公钥。请注意,allowPublicKeyRetrieval=True可能允许恶意代理执行MITM攻击以获取明文密码,因此默认情况下为False,必须显式启用。

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

    当您将其用于测试/开发目的时,也可以尝试添加usesl=false

    示例:

    jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true&useSSL=false
    
     类似资料:
    • 问题内容: 我尝试使用连接器8.0.11将MySql数据库与Java连接。一切似乎都还可以,但是我有一个例外: 线程“主”中的异常java.sql.SQLNonTransientConnectionException: 不允许公共密钥检索 堆栈跟踪: 连接器管理器: 问题答案: 您应该将客户端选项添加到mysql- connector中,以允许客户端自动从服务器请求公共密钥。请注意,这可能允许恶意

    • 今年6月初,我运行了一个应用程序,没有出现任何问题。今天再次尝试后,控制台中出现以下错误: 有没有关于如何修复的想法? 我对此进行了研究,但没有发现任何特定于Spring Boot应用程序的内容。 应用程序中的设置。属性:

    • 我有一个连接到MySQL的spring boot应用程序,它工作得很好,除非它被停靠,当它停靠时,会抛出一个异常: 我试图将连接字符串更改为 但是没有发生任何事情,仍然导致同样的异常。 Dockerfile文件:

    • 我目前正在通过视频教程学习Servlet和Jsp,我正在尝试连接到MySql数据库,但这样做很困难,我已经按照教程中采取的所有步骤进行了操作,但仍然无法连接,起初我得到的异常是java.sql.SQLException:没有找到适合com.mysql.jdbc.驱动程序的驱动程序java.sql.DriverManager 我在网上检查了一个可能的解决方案,但没有一个对我有用,现在我将MySQL-

    • 我有一个spring boot项目在java8上运行,在我安装mysql8服务器并尝试连接之后,我发现了错误 最初我安装了mysql5,它工作正常,但是当我安装mysql8服务器时,我收到了错误消息。mysql。jdbc。例外情况。jdbc4.MySQLNonTransientConnectionException:不允许检索公钥 。 我确实使用了

    • 问题内容: 我正在尝试创建一个注册页面,它将信息添加到SQL表中。这是我执行此操作的PHP代码…谁能告诉我这是什么错误? 它给出了以下错误: 问题答案: 如果您的mysql数据库不在同一服务器(本地主机)上,则需要为该服务器的mysql用户/数据库从远程服务器授予访问权限。请参阅本文以获取一些可能对您有所帮助的步骤。听起来好像很遥远。 https://support.rackspace.com/h