在防火墙上使用除JDBC之外的其他内容

时间:2009-02-05 11:54:26

标签: java jdbc firewall

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

现在,我想保留相同的应用程序,但在防火墙之外使用它 - 所以,我会在某些主机上添加其他内容:端口(并打开该端口到外部世界) - 而不是JDBC直接打开数据库访问。

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

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

您会推荐什么方法?

谢谢你,问候,
伊戈尔

3 个答案:

答案 0 :(得分:4)

正常的方法是实现一个Web服务,这对Axis等来说非常容易。

您真的不希望通过HTTP隧道直接向防火墙外的客户端打开JDBC ...服务器应该严格控制与数据库进行何种交互。

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:1)

我认为这只是一种不必要的复杂问题。您的DBMS(通常)带来访问控制和传输层安全性。如果您介绍自己的图层,您确定可以使它比直接连接到DB更安全吗?

我看到了你的理由,但如果没有这样做的框架,请避免建立自己的框架!例如,PostgreSQL带有一堆漂亮的选项可以解决问题。例如,在传输级别上要求基于SSL证书的身份验证(客户端必须提供服务器检查的证书)或基于IP的访问。

当然,你仍然需要相信你的DBMS实现来获取访问控制权等基本细节(=“不可破解”),但是在黑帽子进入你的网络代理之后你还是需要依赖它;)

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

沃尔克