2

我有一个简单的服务器-客户端应用程序,它使用 JDBC 连接到数据库,一切正常。应用程序使用 JDBC 连接做一些简单的事情(获取数据、插入新行和其他一些事情)。

现在,我想保留相同的应用程序,但在防火墙之外使用它 - 所以,我会在一些主机上放置其他东西:端口(并将该端口开放给外界) - 而不是 JDBC 直接打开数据库访问。

我想这个问题已经多次面临,并且肯定有很多方法。
一种方法是在一侧执行 servlet,在客户端访问它。
我想,我还没有接触过 Spring,也许另一个是做 POJO Java 类并使用 Spring 将其配置为 http 服务。我还听说 Jetty 在这种情况下可以提供帮助的“谣言”(以最小化服务器和客户端的编码)

我更喜欢这样的东西:
- 不复杂(简单的学习路径)
- 重用已经完成的东西。

你会推荐什么方法?

谢谢你和问候,
伊戈尔

4

3 回答 3

4

正常的方法是实现一个 Web 服务,现在使用 Axis 等非常容易。

您真的不想通过 HTTP 隧道向防火墙外的客户端打开直接 JDBC ......服务器应该严格控制与数据库发生的交互类型。

于 2009-02-05T12:00:17.627 回答
1

我建议使用 SSH 隧道之类的东西来通过防火墙传输 JDBC 连接。在 DMZ 机器上的任何公共开放端口上设置隧道,并将隧道的另一端连接到数据库服务器上的适当端口。

然后只需更改您的 JDBC 连接设置以连接到隧道机器的公共端口,它将像往常一样透明地与数据库通信,同时通过接受的端口通过防火墙。

如果这是一个 IT 政策问题,因为他们不允许您直接访问数据库,那么您需要弄清楚您可以做什么并尽可能地使用它。在这种情况下,IT 策略不太可能接受将 JDBC 更改为另一种访问方法。

编辑:阅读乔恩的回答后,他可能是对的。我假设问题是您的服务器/webapp 和数据库服务器之间的连接。如果您谈论的是客户端创建与数据库的直接 JDBC 连接,那么是 - 防火墙或否,这是非常糟糕的做法。客户端应该与您的服务器交谈以询问它想要什么,并且您的服务器应该根据需要执行数据库查询以获取信息。

于 2009-02-05T12:02:37.140 回答
1

我认为这只是一个不必要的并发症。您的 DBMS(通常)会带来访问控制和传输层安全性。如果您引入自己的层,您确定可以使其比直接连接到数据库更安全吗?

我明白你的理由,但如果没有框架可以做到这一点,请避免构建自己的!例如,PostgreSQL 提供了一堆漂亮的选项来约束事情。例如,需要在传输级别基于 SSL 证书的身份验证(客户端必须提供服务器检查的证书),或基于 IP 的访问。

当然,您仍然必须信任您的 DBMS 实现才能获得访问控制权(=“不可破解”)等基本细节,但是在黑帽入侵您的网络代理后,您仍然需要依赖它;)

@dtsazza:也许编辑您的答案以包含关键字“VPN”?ssh 隧道在私有设置之外可能会严重扩展。

沃尔克

于 2009-02-05T12:40:03.833 回答