4

我正在开发一个 Swing GUI 应用程序,除其他外,该应用程序用作读取和写入 MySQL 数据库的数据库客户端。目前我使用 JDBC 实现了与数据库的交互(如下所示:http ://www.kitebird.com/articles/jdbc.html ),它通过指定显式数据库主机名(IP 地址)直接连接到数据库。

只要我在作为组织本地网络一部分的 PC 上运行 GUI 客户端应用程序,它就可以正常工作,因此我可以通过指定部署它的机器的 IP 地址来访问 MySQL 数据库。

但是我想知道如果 GUI 客户端应用程序要在组织网络之外的计算机上运行(通过 Internet 通信),那么实现与数据库交互的正确方法是什么?

我能想到的两种方法是:

  1. 将数据库服务器机器配置为在 Internet 上的 MySQL 的默认端口 (3306) 上可用,然后我将能够通过指定数据库服务器的 IP 地址继续从 GUI 客户端应用程序连接到数据库。

  2. 创建一个 Web 服务(可能基于 REST API),它将在数据库服务器机器上运行,并充当 GUI 客户端和 MySQL 数据库之间的中间人。

我怀疑正确的方法是第二种选择,使用网络服务,但我没有任何实施经验。

所以我的底线问题是:

通过 Internet 与数据库进行通信的正确方法是什么,如果涉及使用 Web 服务,我应该从哪里开始?用于实现此类事情的常用库或框架有哪些?

非常感谢有耐心阅读所有这些的人。

4

2 回答 2

0

听起来像是一项艰巨的任务,我不确定是否有任何简单的答案。您当然不应该与您的数据库的连接公开到 Internet,因为这对于潜在的攻击者来说是一个强大的载体。

Web 服务将是一个很好的解决方案。RESTful Web 服务的 Java 标准是JCR (JSR-170),其参考实现是 Apache Jackrabbit (http://jackrabbit.apache.org/). 它很容易设置,并且有多种选项可以保护此类服务。

编辑:没有错!我的意思是 JAX-RS 和 Jersey (http://jersey.java.net/)。对不起!

于 2012-11-20T10:02:44.893 回答
0

最简单的解决方案是设置一个 VPN,允许您的远程客户端连接到同一个数据库。这会考虑到安全性和基础架构方面的考虑,并且不需要对您的应用程序进行任何更改。

基于服务的方法是第二受欢迎的——它是对应用程序的基本重新构建,通常会带来很多棘手的性能和可伸缩性问题。我建议阅读 Martin Fowler 的企业集成模式以获取建议 - 这是一个更复杂的问题,您可以期望在 SO 上回答。

不要向更广泛的互联网开放您的 MySQL 数据库——安全风险太大了。

于 2012-11-20T14:40:11.703 回答