逆向工程 JDBC Oracle 连接字符串

Posted

技术标签:

【中文标题】逆向工程 JDBC Oracle 连接字符串【英文标题】:Reverse Engineer JDBC Oracle Connection String 【发布时间】:2019-08-24 23:09:50 【问题描述】:

通过我的研究,我找不到这个问题的重复项(these answers 中的任何一个都没有包含类似的格式),但如果它已经存在,请标记它。

我有以下 JDBC 连接字符串来连接到我试图反向工程连接到其他地方的 Oracle 数据库,但我不知道哪些组件是服务器,哪些是数据库。

jdbc:oracle:thin:@word1://word2:port/word3,cn=word4,dc=word5,dc=word6

这用于作为 Sqoop 作业的一部分进行连接。用户名和密码是分开提供的,所以我不相信这些组件中的任何一个是用户名或密码。有人可以帮我映射这些词以及它们的用例吗?

这些都是数据库吗?

【问题讨论】:

看起来像LDAP语法:见razorsql.com/articles/oracle_ldap_jdbc_connect.html和docs.oracle.com/cd/B28359_01/java.111/b31224/urls.htm,相信你的数据库名称在这个例子中是word3,word 2是你的LDAP上下文/OID,cn代表“Common Name” , 和 dc 表示“域组件”。 这里的是数据库的名字吗?还是数据库服务有什么不同? Oracle 的数据库肯定不是我的专长,但我想是这样(也就是说,word3 将是示例中的数据库名称)。 Oracle 网站上的这个帖子似乎表明:community.oracle.com/thread/1042180 【参考方案1】:

要对该 URL 进行反向工程,请以 @word1 开头。

根据 Oracle 文档(参见下面的参考资料),jdbc:oracle:thin: 之后的 URL 部分是数据源。有多种不同的数据源类型,下一个第一个组件的语法(包括@,如果存在)将确定类型。该文档列出了以下数据源类型:

Oracle 网络连接描述符 - @(...) 精简式服务名称 - name@ LDAP 语法 - @ldap 遗赠语法 - oci:path/@ TMSNames 别名 - @name

如果没有更多上下文,您只需阅读文档以根据数据源类型解码 URL 的其余部分。

但是你发现URL中有cndc参数。这使得这实际上是一个 @ldap 数据源的可能性为 99.9%。

带有 LDAP 数据源的 JDBC URL 的结构是:

jdbc:oracle:thin:@ldap://<host>:<port>/<name>,<ldap context param>...

其中&lt;host&gt;&lt;port&gt; 用于LDAP 服务,ldap 上下文参数是名称=值对列表,其中应包括cn=OracleContext

这告诉 JDBC 驱动程序在给定上下文的 LDAP 服务器中查找 &lt;name&gt;,然后使用相关信息建立数据库连接。我找不到关于 &lt;name&gt; 实际上是什么的明确参考。 Oracle 文档只是给出了一个例子。

我能找到的最好的是:

数据库服务名称:数据库服务名称告诉驱动程序连接到哪个数据库。例如,如果数据库名为“dmart”,则应输入 dmart 作为数据库服务名称。

(来源:https://razorsql.com/articles/oracle_ldap_jdbc_connect.html)

“@ldap”可以替换为“ldaps:”,表示基于 SSL 的 LDAP。

参考资料:

Database JDBC Developer's Guide and Reference, Data Sources and URLs

【讨论】:

以上是关于逆向工程 JDBC Oracle 连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

jdbc连接oracle数据库字符串

Oracle 中的 JDBC 瘦连接字符串同时使用冒号和正斜杠

jdbc连接oracle

JDBC中Oracle的SID和ServiceName两种方式的连接字符串格式

JDBC连接各种数据库的字符串

JAVA怎么连接oracle数据库,只要求怎么连接就可以了