gpt4 book ai didi

java - JDBC 远程 MySQL 连接

转载 作者:行者123 更新时间:2023-11-29 02:23:07 25 4
gpt4 key购买 nike

我正在开发一个基于 Java Swing 的应用程序,它使用 JDBC 连接到 MySQL 数据库。因此,该软件可以从恰好运行的任何计算机上直接远程访问数据库。此外,该应用程序使用准备好的语句来查询数据库,并且该数据库托管在共享的 CPanel 托管帐户上(如果重要的话)。

我用来连接数据库的代码片段如下(我认为是相当标准的连接代码,所有大写的字符串都包含正确的内容):

String url = "jdbc:mysql://URL:PORT/DB_NAME?connectTimeout=3000";
Connection conn = DriverManager.getConnection(url, USERNAME, PASSWORD);

我只在一个 IP 上成功使用过该应用程序。在我从 IP 使用该应用程序之前,我必须通过将 IP 添加为允许的远程 MySQL 访问主机来手动将该 IP 列入白名单。如果我不将 IP 添加为允许的访问主机,服务器将拒绝我的连接,并且我会得到结果错误:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

然后,如果我将一个 IP 列入白名单并尝试从该 IP 进行连接,我不会收到该错误并且应用程序会正确连接到数据库。

如果该应用仅用于一个 IP,则此系统还可以,但它需要在任何 IP 上运行,因为我无法预测谁会下载和使用它。我看到的唯一解决方案是在允许的 MySQL 访问主机区域中对所有 IP 进行全局白名单。然而,这似乎有很多缺点,例如不安全,因为任何拥有正确密码的人都可以登录(因此容易受到暴力攻击)。 This似乎证实了该方法不安全的假设。因此,我希望有一个独立于 IP 的应用程序和数据库之间的通信系统(不需要将所有 IP 列入白名单)。

此外(我不知道这是否有意义或重要),但我相信我希望该应用程序用于阻止某些协议(protocol)的某些区域。因此,(我认为)如果所选的通信方法仅使用 HTTP 或其他一些广泛使用的协议(protocol),我会喜欢它。

我对这个问题做了一些研究,我的努力使我找到了数据库通信的 2 层和 n 层模型。也许我可以做一些事情,比如制作一个 PHP 页面,它接受一个语句和一系列参数(加上一个密码来获得入口),执行语句,然后将结果作为 JSON 返回。然而,这似乎是另一种不太理想的方法,因为它似乎也存在安全问题。

我敢肯定,比我更有经验和知识的人已经遇到了这个问题并制定了解决方案。

因此,我的问题是:以独立于 IP 的方式从 Java 应用程序连接到 MySQL 数据库的首选方法是什么?

非常感谢您抽出宝贵时间。

最佳答案

你在正确的轨道上:

1) 如果您希望任意客户端直接连接到您的数据库,并且客户端可以有任意 IP 地址...那么您可能必须有效地禁用 IP 安全将所有可能的客户端 IP 地址列入白名单。

2) 另一方面,如果您只允许本地访问 mySql(目前最常见的情况),那么您可以创建一个 Web 应用程序来连接您的客户端和 mySql。

建议:考虑创建一个您的客户可以与之交谈的“REST”Web 服务。

这里有一个很好的教程,可以帮助您入门:

REST with Java (JAX-RS) using Jersey - Tutorial

问:您的 Swing 应用程序真的需要发出“原始 SQL”吗?或者它可以进行“高级”查询吗? REST 非常适合后者。

附言:

这是另一个简短的示例,可能有助于为您推荐一些使用 REST、mySQL 和 Java 的设计替代方案:

http://www.9lessons.info/2012/09/restful-web-services-api-using-java-and.html

关于java - JDBC 远程 MySQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28056857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com