MySQL 连接Java – MySQL : Public Key Retrieval is not allowed

MySQL 连接Java – MySQL : Public Key Retrieval is not allowed

在Java程序中,连接MySQL服务器可能会遇到一些问题。 “MySQL : Public Key Retrieval is not allowed” 就是其中之一。本文将介绍这个问题的原因以及如何解决它。

阅读更多:MySQL 教程

问题原因

这个问题通常是由于 MySQL 8 中的默认 SSL 设置引起的。之前,MySQL使用 “mysql_native_password” 认证插件,但从MySQL 8开始,它改为使用 “caching_sha2_password”插件。此插件要求使用 SSL 连接,而默认情况下,Java的JDBC驱动程序不支持 SSL 连接,会导致这个错误。

解决方案

解决方案是启用 SSL连接或改回 “mysql_native_password” 插件。

启用 SSL 连接

要启用 SSL 连接,可以在JDBC连接字符串中添加一些选项,例如:

String url = "jdbc:mysql://localhost:3306/mydb?useSSL=true&requireSSL=true";
Connection conn = DriverManager.getConnection(url, user, password);

在这个例子中,我们使用了 “useSSL=true” 和 “requireSSL=true”。前者告诉MySQL使用 SSL 连接,而后者强制要求使用 SSL 连接,这意味着如果SSL连接失败,将不会建立数据库连接。

改回 “mysql_native_password” 插件

如果你不需要SSL连接,另一种解决方案是修改 MySQL 的身份验证插件。要做到这一点,可以使用 MySQL的 “ALTER USER” 命令:

ALTER USER 'myuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword';

这将把 “myuser” 的身份验证插件从 “caching_sha2_password” 改为 “mysql_native_password”。使用这种方法时,连接字符串无需使用SSL选项:

String url = "jdbc:mysql://localhost:3306/mydb";
Connection conn = DriverManager.getConnection(url, user, password);

总结

在连接 MySQL 8时, “MySQL : Public Key Retrieval is not allowed” 错误是由于默认的 SSL 设置引起的。要解决这个问题,可以启用 SSL连接或改回 “mysql_native_password” 插件。在调整 MySQL 的身份验证插件时,请确保在连接字符串中删除 SSL 选项,以免出现其他问题。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程