云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

金山云_数据库比较_代金券

小七 141 0

与上一篇关于如何将SAP云平台连接到本地JDBC数据库的博文类似,我们将向您展示如何使用在SAP云平台(Cloud Foundry)环境中的Java应用程序中运行的本地JDBC数据库(在本例中是Oracle)中的数据。MySQL(但在Neo上)的类似方法如下:

https://blogs.sap.com/2018/02/06/how-to-set-up-a-jdbc-connection-using-the-cloud-connector/

如果您需要更多关于连接服务或SAP提供的SOCKS代理的技术信息或背景,请先阅读此博客文章。我们假设您具备SAP云平台的基本知识,例如,您已经知道云连接器是什么,以及它是如何配置的。

我们没有找到任何关于如何使用Cloud Foundry而不是Neo连接到Oracle数据库和/或JDBC连接的信息。因为我们不想在防火墙上钻一个洞,所以我们决定使用带有SOCKS代理的云连接器。这使我们最初的计划只是遵循MySQL博客中描述的相同架构https://blogs.sap.com/2018/02/06/how-to-set-up-a-jdbc-connection-using-the-cloud-connector/)

这个计划对我们来说很简单。结果很快,大数据应用前景,听起来很容易的事情就变得很有挑战性。我们要克服几个brig Wall,其中一些相当大。

brig Wall No.1:Oracle瘦驱动程序和JDBC–SOCKS the Oracle way

我们遇到的第一个问题挑战是Oracle驱动程序不再支持SOCKS代理。在互联网上快速搜索一下,stack overflow和其他常见的嫌疑人都得出了相同的答案:不再工作了。幸运的是,在某个Oracle支持论坛中,找到了一个解决方案。设置环境变量oracle.jdbc.javaNetNioto false关闭非阻塞IO,但打开SOCKS支持:

System.setProperty属性("oracle.jdbc.javaNetNio","false");

这个看起来很天真的设置隐藏得很好,甚至堆栈溢出都不知道它的存在。启用此属性后,我们可以在本地确认是否使用了SOCKS代理。

Brig Wall No.2:SOCKS–SAP方式

现在,有什么比激活连接服务、从环境中读取代理信息以及分别设置socksProxyHost和socksProxyPort更简单的呢?没什么好担心的,我们想。本来很简单的事情,结果(几乎)是不可能的。

我们没有提供一个标准的SOCKS5代理,而是得到了一个需要定制授权程序的东西。如何将自定义授权注入到cloudfoundry java环境或JDBC驱动程序中?以MySQL为例,这很容易。正如在相应的博客文章中所显示的那样,您可以插入一个定制的socket类。所以,物联网的,如果你是幸运儿之一,只想知道如何连接prem上的MySQL和cloudfoundry,这是一个不错的选择。其他人,请继续阅读

现在,我们做了什么使不可能成为可能?由于无法注入自定义套接字,我们添加了一个本地socks5代理服务器,其唯一目的是将请求转发到Cloud Foundry上的SAP socks5服务器

SAP提供了一些示例代码,企业软件服务,人工智能有哪些领域,说明如何对其socks5代理进行身份验证。授权方案以及示例代码,可以在这里找到:

https://help.sap.com/viewer/cca91383641e40ffbe03bdc78f00f681/Cloud/en-US/cd1583775afa43f0bb9ec69d9dbcc880.html

可以找到如何获得代币的信息此处:

https://help.sap.com/viewer/cca91383641e40ffbe03bdc78f00f681/Cloud/en-US/313b215066a8400db461b311e01bd99b.html#loio313b215066a8400db461b311e01bd99b

我们将使用ConnectionSocks5ProxySocket类。一个快速的测试表明我们确实可以用它连接到Oracle数据库。SOCKS5是一个非常简单的协议。编写一个简单的socks5代理非常容易,它不需要比connect方法更多的支持。另一种方法是使用可用的(开源)代理服务器并使用其中一个。因为我们在这篇小博客文章中已经有了一个java套接字实现,所以我们使用jsocks(https://github.com/kruton/jsocks). JSocks允许用几行代码设置一个"足够好"的socks5服务器

请确保代理服务器不能通过万维网访问,以防您将其封装在某些服务中。

现在剩下的是实现从代理服务器到SAP socks5 proxy的流量转发:JSocks提供了一种机制称为代理链接。通过代理链接,可以将流量从一个代理转发到另一个代理。因为我们的代理有一种非标准的身份验证方式,而且为了简单起见,我们已经有了一个工作的Socket类,我们只需将它注入到现有的jsocks代理中。

为了让jsocks与SAP代理一起工作,云服务器服务商,只需更改几行:jsocks的onConnect原来是这样的

这里我们可以注入ConnectivitySocks5ProxySocket。按以下方式更改代码将使jsocks连接到我们的代理:

请注意,您的所有流量现在都通过SOCKS5隧道。因此,我们需要将所有非本地流量列入白名单。这可以通过自定义代码实现,例如在ConnectivitySocks5ProxySocket中,或者通过在环境变量socksNonProxyHosts

中列出它来实现,打开socks代理的工作方式与此相同

Brig Wall No.3:Public DNS lookup–Oracle