【问题标题】:Use something else than JDBC over firewall在防火墙上使用 JDBC 以外的其他东西
【发布时间】:2009-02-05 11:54:26
【问题描述】:

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

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

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

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

你会推荐什么方法?

谢谢你,
伊戈尔

【问题讨论】:

    标签: java jdbc firewall


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。我同意,我不会在防火墙上使用 JDBC - 我探索 3 层的方法......
    • 我看过 Axis - 似乎它开启了 SOAP 世界......像悲观锁定之类的东西 - 有可能以这种方式实现吗? (数据库中的锁定行 - 因此 - 会话应该被“跟踪”)。
    • @Igor:您不应该创建在数据库中留下锁定行的 API。试着让它“矮胖”,这样每个请求都是独立的。你永远不知道客户什么时候会“走开”——此时你不想留下一个锁定的行。
    • 如果事务未提交,一种方法可以是超时。但是,是的,也许更多的“乐观”会更好......
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      沃尔克

      【讨论】:

      • 嗨,我不想“公开”完整的数据库。这就是为什么我不会使用当前的 2tier 架构...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多