DB2 JDBC Windows 身份验证

Posted

技术标签:

【中文标题】DB2 JDBC Windows 身份验证【英文标题】:DB2 JDBC Windows Authentication 【发布时间】:2020-11-17 17:19:10 【问题描述】:

寻找使用 Windows 身份验证在 DB2 数据库上使用 JDBC 的示例,最好使用 db2jcc4.jar 驱动程序。似乎是一个足够常见的场景,但我很难找到一个例子。

【问题讨论】:

不清楚的问题。您的 Db2 服务器是否也在 MS-Windows 上运行?或者您的 Db2 服务器是否在 Linux 上运行但配置为通过 Active-Directory 使用身份验证?用于 Db2 的 IBM jdbc 示例位于三个位置,因此请仔细查看,它们位于 (1) 您的 Db2 服务器 SAMPLES/jdbc 目录 (2) 位于 Db2-Knowledge-Centre 在线文档中,以及 (3) 位于 Github 上。 澄清一下,DB2 服务器在 Windows 上运行。我看到了 JDBC 示例。他们中的大多数似乎使用相同的 Util 类进行连接:ibm.com/support/knowledgecenter/SSEPGG_11.1.0/…。所以有几个问题:1. 如果我想进行 Windows 身份验证,我需要使用哪个特定的驱动程序(即,使用运行客户端的帐户进行身份验证,而不是显式传递用户名/密码),2. 是 DLL除了驱动程序本身还需要? 3. 建立这种连接的 URL 和属性是什么样的? 想象一下,我问过同样的问题,但是关于 MS-SQL 而不是 DB2,会有很长的答案列表。所以我真的在寻找等效的 DB2 答案。 【参考方案1】:

您最初的问题太模糊了,直到您通过评论澄清它,询问如何在没有用户 ID/密码的情况下通过 jdbc 连接到本地 Db2 数据库。因此,您真正的问题似乎是“如何在 MS-Windows 上实现对本地 Db2 数据库的无密码身份验证?”,这可能是一个常见问题解答。

Db2-server 将身份验证委托给运行 Db2-server 的底层操作系统服务。请记住,Db2-server 可以在几个截然不同的操作系统上运行,其中只有一个是 MS-Windows。

是的,您可以使用 IBM 提供的 jdbc 驱动程序通过 JDBC 连接到 MS-Windows 上的 本地 Db2 数据库,而无需指定用户 ID/密码。

您还可以通过 CLI/ODBC 和命令行连接到 MS-Windows 上的 本地 Db2 数据库,而无需指定用户 ID/密码。如果未指定用户 ID/密码,则身份验证 ID 是当前运行会话的身份(登录的身份或 runas 身份)。

如果您有一个本地 Db2-server 和一个在 MS-Windows 上运行的本地数据库,那么所有必要的软件都已经安装(如果使用默认值)来实现上述目标。

重要的是要了解,如果 Db2 数据库远离客户端,那么身份验证将需要某种形式的凭据。此类凭证可以是证书的形式(如果 Db2 数据库位于 Z/OS 上),或者是用户 ID/密码的形式,或者是 kerberos 票证的形式,或者是使用的令牌的形式用于基于云的 Db2 等。

对于到 Db2 数据库的无密码本地 jdbc 连接,您可以使用 URL 格式 "jdbc:db2:your_database_name"

com.ibm.db2.jcc.DB2Driver 类(在当前支持的db2jcc4.jar 版本中提供)支持使用该 URL 模式的无密码连接。

本地数据库名称 = 示例的示例。

try
 
    Connection con = DriverManager.getConnection("jdbc:db2:sample");
    ...

catch (Exception e)

   ...

Db2 知识中心提供了可用 jdbc 属性的所有详细信息 这里

https://www.ibm.com/support/knowledgecenter/SSEPGG_11.5.0/com.ibm.db2.luw.apdv.java.doc/src/tpc/imjcc_r0052038.html

其他页面显示特定于 Z/OS 数据源、云数据库、i 系列数据源或 informix 源等的附加属性。

【讨论】:

澄清:DB2 数据库不是本地的。我的 Java 应用程序在机器 M 上运行; DB2 在机器 N 上运行。两者都是 Windows 服务器。在我的 Java 代码中,当我连接到数据库时,我不会指定用户名/密码。相反,我的期望是我将使用运行我的应用程序的帐户对 DB2 数据库进行身份验证。我只需要 db2jcc4.jar 吗?设置连接时,我是否需要指定一个属性,如 IntegratedSecurity=true(就像我对 MS-SQL 所做的那样)。

以上是关于DB2 JDBC Windows 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

远程连接到 MSSQL,使用 Windows 身份验证,JAVA

登录失败。该登录名来自不受信任的域,不能与 Windows 身份验证一起使用。

具有 JDBC 身份验证和 TOTP 的 CAS Server 3.51

为啥 OAuth2 身份验证服务器使用 jdbc 数据源返回 401 错误?

java Spring安全性JDBC身份验证

jdbc kerberos oracle 身份验证