使用 kerberos 身份验证的 Oracle 19c 中的 Oracle UCP 异常 (ORA-12631)

问题描述 投票:0回答:1

我在 Linux 上有一个 Oracle 19c 系统,并使用 Windows AD KDC 启用了 krb5 身份验证。 sqlplus 和 jdbc 访问都工作正常。当我尝试使用 ucp(ucp11.jar、ojdbc11.jar)进行测试时,仅当我设置 initialPoolSize > 2 时,才会遇到 ORA-12631。

PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();
pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
pds.set(url);
pds.setUser(null);              // for krb5 auth
pds.setPassword(null);          // for krb5 auth
pds.setInitializePoolSize(3);   // failed with ORA-12631
pds.setMinPoolSize(3);
pds.setMaxPoolSize(20);
pds.setTimeoutCheckInterval(120);
pds.setInactiveConnectionTimeout(300);
pds.setConnectionProperties(krbProperties);  // krb5 properties like KRB5_CC_NAME

当我调用 pds.getConnection() 时,抛出 ORA-12631,且initialPoolSize > 2。为什么它不适用于更大的initialPoolSize?使用 krb5 auth,没有用户/密码。为什么抛出ORA-12631?

如果我将initialPoolSize 设置为1 或2,我就可以获取连接并查询数据库。如果我关闭 krb5 auth,它也有效。

java kerberos oracle19c ucp
1个回答
0
投票

将初始大小设置为 3 时,用于创建 3 个连接的 UCP 后台线程可能会遇到竞争条件,其中第一个线程正在启动 TGT/TGS,而另一个线程在 TGS 不可用时被告知 TGS 可用。还没有。

您可以在启动池之前使用 Kerberos 创建和关闭独立的 JDBC 连接来验证这一点。此初始连接将创建 TGT/TGS,后台线程将在 UCP 启动时使用该 TGT/TGS。

© www.soinside.com 2019 - 2024. All rights reserved.