我当前试图使用Kerberos身份验证在DB2数据库中设置数据源连接。我已经阅读了几个具有不同方法的线程,现在感到很困惑。

问题描述 投票:0回答:1
Edit: 我正在使用com.ibm.db2.jcc.db2simpledatasource,版本为4.19.49(谢谢@mao)

Edit12.01.2024:

代码块

DB2SimpleDataSource dataSource = new DB2SimpleDataSource(); dataSource.setDriverType(4); dataSource.setServerName("server"); dataSource.setPortNumber(portnumber); dataSource.setDatabaseName("database name"); dataSource.setSslConnection(true); dataSource.setClientProgramName("program name"); dataSource.setRetrieveMessagesFromServerOnGetMessage(true); dataSource.setSecurityMechanism(dataSource.KERBEROS_SECURITY);

eRROR消息

com.ibm.db2.jcc.am.SqlException: [jcc][t4][10262][11223][4.19.49] Unexpected Throwable caught: class com.ibm.db2.jcc.am.le (in unnamed module @0x49097b5d) cannot access class sun.security.action.GetPropertyAction (in module java.base) because module java.base does not export sun.security.action to unnamed module @0x49097b5d. ERRORCODE=-4228, SQLSTATE=null at com.ibm.db2.jcc.am.kd.a(Unknown Source) at com.ibm.db2.jcc.am.kd.a(Unknown Source) at com.ibm.db2.jcc.am.kd.a(Unknown Source) at com.ibm.db2.jcc.t4.b.b(Unknown Source) at com.ibm.db2.jcc.t4.b.a(Unknown Source) at com.ibm.db2.jcc.t4.b.a(Unknown Source) at com.ibm.db2.jcc.t4.b.a(Unknown Source) at com.ibm.db2.jcc.t4.b.<init>(Unknown Source) at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(Unknown Source) at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(Unknown Source) at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(Unknown Source) at test.connection.TestDbConnectionDataSource.main(TestDbConnectionDataSource.java:81) Caused by: java.lang.IllegalAccessError: class com.ibm.db2.jcc.am.le (in unnamed module @0x49097b5d) cannot access class sun.security.action.GetPropertyAction (in module java.base) because module java.base does not export sun.security.action to unnamed module @0x49097b5d at com.ibm.db2.jcc.am.le.a(Unknown Source) at com.ibm.db2.jcc.am.le.a(Unknown Source) at com.ibm.db2.jcc.t4.b.a(Unknown Source) IBM文档阅读

dataSource.setKerberosServerPrincipal("sample/[email protected]");

我必须用我的kerberos.conf文件替换@srvlsj.sj.ibm.com。但是,如果我使用许多

realm

,该怎么办

PS1.

我使用了

System.setProperty("java.security.krb5.conf", "path\krb5.conf");PS2.上述错误,如果我在VM参数中使用此错误,则可以解决该错误:--add-exports java.base/sun.security.action=ALL-UNNAMED。但是,我想在VM参数中仍然没有工作。

当寻求DB2帮助时,请始终说明您的DB2服务器版本+FixPack和DB2-Server平台,因为答案的每个平台可能会有所不同,有时也会有时每个版本。 to以您仔细研究IBM文档页面Herey

,该页面显示了与JDBC 4型驱动程序的Kerberos样品片段。您已经在使用(db2jcc4.jar)。
您选择是使用drivermanager界面还是com.ibm.db2.jcc.db2simpledatasource接口。

有助于自我教育自己的kerberos/jdbc的要求,这些要求记录了

Here。 这些假定您的DB2服务器已经正确配置为支持Kerberos身份验证。 IT有助于证明它是通过首先使用不同的JDBC产品进行测试,该产品支持使用db2使用Kerberos身份验证。 一个这样的工具就是IBM数据工作室,尽管您需要使用最新的数据研究版本,并且还需要安装数据模型的最新修复程序(FIXPACK)。 Data-studio支持Kerberos无密码的身份验证,这是一个大型的Java/JDBC应用程序。 JDBC的其他一些前端工具要么不支持DB2-LUW的Kerberos身份验证,要么部分支持它。


作者通过评论的问题有一个解决方案,对我来说,使用Java>1.8
java db2 datasource kerberos dbconnection
1个回答
0
投票
--add-opens=java.base/sun.security.action=ALL-UNNAMED

如果您使用Java> 1.8。

错误 Caused by: java.lang.IllegalAccessError: class com.ibm.db2.jcc.am.le (in unnamed module @0x49097b5d) cannot access class sun.security.action.GetPropertyAction (in module java.base) because module java.base does not export sun.security.action to unnamed module @0x49097b5d at com.ibm.db2.jcc.am.le.a(Unknown Source) at com.ibm.db2.jcc.am.le.a(Unknown Source) at com.ibm.db2.jcc.t4.b.a(Unknown Source)

指出您的DB2 JDBC驱动程序(JCC)正在尝试访问Interion Java类(Sun.Security.Action.getPropertyaction),这些类并未由Java的模块系统导出(Java 9中引入)。

当在Java 11+上运行DB2 JCC驱动程序而不是Java 8时,这个问题通常发生。

如果您想使用Java> 1.8,则必须通过传递上述其他VM参数来使用解决方法。否则,您将切换回Java 1.8,而您无需添加上述VM参数。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.