jdbc 可以通过 SOCKS 代理连接到 Oracle 数据库吗?

Can ojdbc connect to an Oracle database via a SOCKS proxy?

我正在尝试通过 SOCKS 代理使用 ojdbc 驱动程序连接到 oracle 数据库。我无法在网上找到关于这是否有效的明确答案。

似乎建议 18.1 版本应该添加 SOCKS 代理支持,但是,使用 ojdbc8-18.3,驱动程序似乎不支持代理设置,最新文档也没有提及它。

这是与我尝试过的代码类似的代码(已编辑数据库详细信息)。

System.setProperty("socksProxyHost", "myProxy");
System.setProperty("socksProxyPort", "1080");
Class.forName("oracle.jdbc.driver.OracleDriver");

try (
    Connection con = DriverManager.getConnection(
        "jdbc:oracle:thin:@myServer:1521/mySID", "myUser", "myPwd"
    );
)
{
    Statement stmt=con.createStatement();

    ResultSet rs=stmt.executeQuery(" select * from my_table ");
    while(rs.next())
        System.out.println(rs.getString(1)+"  "+rs.getString(2)+"  "+rs.getInt(3));
​
} 
catch (Exception e)
{
            System.out.println(e);
}

本例是连接成功,但是我用Wireshark查看出站流量时,可以看到直接连接上了。我可以通过将代理设置更改为...

来进一步验证这一点
System.setProperty("socksproxyHost", "should not resolve");
System.setProperty("socksproxyPort", "1080");

...并观察到仍然建立连接并返回数据。

当用 Microsoft SQL 服务器驱动程序做同样的事情时,我看到以下错误:

SQLServerException: The TCP/IP connection to the host , port 1433 has failed. Error: "Can't connect to SOCKS proxy:shouldnotresolve.

这显然是 SQL 服务器特有的,但我希望在 Oracle 中看到类似的东西。

seems to suggest that the 18.1 release should have added SOCKS proxy support

我不明白你是怎么理解的,因为它说:

No the Oracle JDBC driver doesn't support SOCKS5 proxy. In the soon to be release 18.1 version of the thin driver there will be support for HTTPS proxy and websocket.


the latest documentation makes no mention of it

当然可以,请参阅 Oracle® Database, JDBC Developer's Guide, Release 18c
具体 8.2.2 Support for HTTPS Proxy Configuration.

部分

要在 oracle JDBC 驱动程序中启用 socks 代理支持,您需要将 -Doracle.jdbc.javaNetNio=false 传递给 JVM 或在您的代码中相应地设置 属性。