Я пытаюсь подключиться к серверу Db2 через среду Kerberos. Я использую 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();

Ниже приводится трассировка стека для ошибки, которую я получаю при попытке установить соединение.

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. После предоставления, я все еще получаю ту же ошибку. Я был бы очень признателен за любую помощь по этому вопросу.

0