Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在防火墙上使用JDBC以外的东西_Java_Jdbc_Firewall - Fatal编程技术网

Java 在防火墙上使用JDBC以外的东西

Java 在防火墙上使用JDBC以外的东西,java,jdbc,firewall,Java,Jdbc,Firewall,我有一个简单的服务器客户端应用程序,它使用JDBC连接到数据库,一切正常。应用程序使用JDBC连接做一些简单的事情(获取数据、插入新行和其他一些事情) 现在,我希望保留相同的应用程序,但在防火墙之外使用它——因此,我将在某些主机上放置其他东西:端口(并向外部世界打开该端口)——而不是JDBC直接打开数据库访问 我想这个问题已经被面对过很多次了,肯定有很多方法。 一种方法是在一侧执行servlet,在客户端访问它 我想,我还没有接触到Spring,另一个可能是使用POJOJava类并使用Spri

我有一个简单的服务器客户端应用程序,它使用JDBC连接到数据库,一切正常。应用程序使用JDBC连接做一些简单的事情(获取数据、插入新行和其他一些事情) 现在,我希望保留相同的应用程序,但在防火墙之外使用它——因此,我将在某些主机上放置其他东西:端口(并向外部世界打开该端口)——而不是JDBC直接打开数据库访问 我想这个问题已经被面对过很多次了,肯定有很多方法。
一种方法是在一侧执行servlet,在客户端访问它
我想,我还没有接触到Spring,另一个可能是使用POJOJava类并使用Spring将其配置为http服务。 我还听说“谣言”说Jetty在这种情况下有帮助(减少服务器端和客户端的编码) 我更喜欢:
-不复杂(简单学习路径)
-重复使用已经做过的事情。

你会推荐什么方法

谢谢你和问候,

Igor

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


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

我建议使用SSH隧道之类的方法将JDBC连接通过防火墙。在DMZ机器上的任何可以公开打开的端口上设置一个隧道,并将隧道的另一端连接到DB服务器上的相应端口

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

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


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

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

我明白你的理由,但如果没有一个框架来做这件事,那就避免构建你自己的框架吧!例如,PostgreSQL提供了一系列漂亮的选项来解决问题。例如,要求在传输级别进行基于SSL证书的身份验证(客户端必须提供服务器检查的证书),或基于IP的访问

当然,您仍然需要信任您的DBMS实现来获得基本的细节,如访问控制权(“‘不可破解’”),但在黑帽子闯入您的web代理之后,您仍然需要依赖它;)

@dtsazza:也许可以编辑你的答案,将关键词“VPN”包括在内?ssh隧道可能在私有设置之外扩展得很糟糕


沃尔克

谢谢您的回复。我同意,我不会在防火墙上使用JDBC-我探索了三层的方法…我已经看过ar Axis-似乎它开启了SOAP世界。。。像悲观锁定这样的事情——有可能以这种方式实现吗?(在数据库中锁定行,因此会话应该被“跟踪”)@Igor:您不应该创建一个在数据库中留下锁定行的API。试着让它变得“矮胖”,这样每个请求都有点独立。你永远不知道客户何时会“离开”——在这一点上你不想留下一个锁定的行。一种方法是在事务未提交时暂停。但是,是的,也许更“乐观”会更好…嗨,我不想“暴露”完整的数据库。这就是为什么我不会使用当前的2层体系结构。。。