ฉันกำลังพยายามเชื่อมต่อกับเซิร์ฟเวอร์ Db2 ผ่าน Kerberos Environment ฉันกำลังใช้ DB2SimpleDataSource ในรหัสของฉันเพื่อรับการเชื่อมต่อกับเซิร์ฟเวอร์ DB2 ของฉัน ตามความเข้าใจปัจจุบันของฉันถ้าฉันมี kerberos tgt ฉันแค่ต้องเพิ่มคุณสมบัติสองอย่างใน Datasource, SecurityMechanism และ kerberosServerPrincipal ต่อไปนี้เป็นรหัส:
public static DB2BaseDataSource getDataSource() throws Exception {
DB2SimpleDataSource ds = new DB2SimpleDataSource();
ds.setPortNumber(port);
ds.setDatabaseName(dbname);
ds.setServerName(server);
ds.setSecurityMechanism(DB2BaseDataSource.KERBEROS_SECURITY);
ds.setKerberosServerPrincipal("user/server@REALM.COM");
ds.setDriverType(4);
return ds;
}
จากนั้นรหัสต่อไปนี้เพื่อรับการเชื่อมต่อ:
DataSource ds = (DataSource) getDataSource();
Connection con = ds.getConnection();
ต่อไปนี้เป็น stacktrace สำหรับข้อผิดพลาดที่ฉันได้รับเมื่อพยายามเชื่อมต่อ
Exception in thread "main" com.ibm.db2.jcc.am.SqlException: [jcc][t4][10262][11223][3.71.22] Unexpected Throwable caught: empty realm part not allowed. ERRORCODE=-4228, SQLSTATE=null
at com.ibm.db2.jcc.am.gd.a(gd.java:797)
at com.ibm.db2.jcc.am.gd.a(gd.java:66)
at com.ibm.db2.jcc.am.gd.a(gd.java:98)
at com.ibm.db2.jcc.t4.b.b(b.java:926)
at com.ibm.db2.jcc.t4.b.a(b.java:784)
at com.ibm.db2.jcc.t4.b.a(b.java:430)
at com.ibm.db2.jcc.t4.b.a(b.java:403)
at com.ibm.db2.jcc.t4.b.<init>(b.java:341)
at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:233)
at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:199)
at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:181)
at com.test.KerberosTest.main(KerberosTest.java:16)
Caused by: java.lang.IllegalArgumentException: empty realm part not allowed
at sun.security.krb5.Realm.parseRealmAtSeparator(Realm.java:133)
at sun.security.krb5.PrincipalName.<init>(PrincipalName.java:399)
at sun.security.krb5.PrincipalName.<init>(PrincipalName.java:471)
at sun.security.jgss.krb5.Krb5NameElement.getInstance(Krb5NameElement.java:114)
at sun.security.jgss.krb5.Krb5MechFactory.getNameElement(Krb5MechFactory.java:95)
at sun.security.jgss.GSSManagerImpl.getNameElement(GSSManagerImpl.java:203)
at sun.security.jgss.GSSNameImpl.getElement(GSSNameImpl.java:477)
at sun.security.jgss.GSSNameImpl.init(GSSNameImpl.java:201)
at sun.security.jgss.GSSNameImpl.<init>(GSSNameImpl.java:170)
at sun.security.jgss.GSSManagerImpl.createName(GSSManagerImpl.java:138)
at com.ibm.db2.jcc.am.je.b(je.java:133)
at com.ibm.db2.jcc.am.je.a(je.java:165)
at com.ibm.db2.jcc.t4.b.a(b.java:6578)
at com.ibm.db2.jcc.t4.b.b(b.java:868)
... 8 more
ถ้าฉันใช้ชื่อผู้ใช้และรหัสผ่านในคุณสมบัติแหล่งข้อมูลจากนั้นจะถามไฟล์การกำหนดค่า jaas หลังจากระบุว่าฉันยังได้รับข้อผิดพลาดเดิมอีก ฉันขอขอบคุณความช่วยเหลือใด ๆ เกี่ยวกับปัญหานี้
user/...
ๆ หรือคุณพยายามใส่ชื่อผู้ใช้ในนั้นหรือไม่?