ส่วน realm ที่ว่างเปล่าไม่ได้รับอนุญาตให้ใช้ Kerberos Authentication ผ่าน DB2


0

ฉันกำลังพยายามเชื่อมต่อกับเซิร์ฟเวอร์ 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/...ๆ หรือคุณพยายามใส่ชื่อผู้ใช้ในนั้นหรือไม่?
grawity

มันเป็นชื่อผู้ใช้ของลูกค้า บริการหลักของฉันคืออะไรเช่น <db2 instance name> /domain@REALMNAME.COM ฉันพยายามเชื่อมต่อกับรูปแบบเช่น "domain@REALMNAME.COM" เช่นกัน แต่ยังคงประสบปัญหาเดียวกันอยู่
Jitender Raghuvanshi

@JitenderRaghuvanshi คุณแก้ไขปัญหานี้หรือไม่? กรุณาให้รายละเอียดถ้าคุณสามารถ
เหมา

สวัสดีเหมาฉันขอโทษที่รอช้า วิธีแก้ไขคือการตั้งค่าคุณสมบัติ DB2_KRB5_PRINCIPAL ในตัวแปรสภาพแวดล้อมของเครื่อง kerberos
Jitender Raghuvanshi

คำตอบ:


0

ฉันขอโทษสำหรับความล่าช้าในการโพสต์วิธีแก้ปัญหาสำหรับแบบสอบถามนี้ เราแก้ไขได้โดยการตั้งค่าตัวแปรสภาพแวดล้อม DB2_KRB5_PRINCIPAL ที่เครื่อง Kerberos

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.