Подключение к Db2 в z/OS через JDBC с использованием IBM JDK и OpenJDK

Я могу подключиться к Db2 на z/OS с помощью файла универсального драйвера JDBC IBM db2jcc4.jar, используя IBM JDK 1.8, который входит в состав WebSphere 9. Все работает нормально, и я могу просматривать каталог и выполнять запросы. Я использовал Squirrel SQL версии 4.0.0.

Но когда я переключаю свой JDK на Open JDK 8 или 12, сохраняя при этом все остальное, я получаю следующую ошибку. Что нужно сделать, чтобы исправить эту ошибку? В чем разница между IBM JDK и Open JDK, из-за которой соединение DB2 работает с одним JDK и не работает с другим?

ошибка при использовании Open JDK 12


person Rahul Khimasia    schedule 04.12.2019    source источник
comment
Использует ли база данных z/OS DATA_ENCRYPT? Это прямое подключение или через Db2 Connect?   -  person kkuduk    schedule 04.12.2019
comment
Этот вопрос больше касается конфигурации, чем программирования. Убедитесь, что в openjdk включена неограниченная длина криптографического ключа. Убедитесь, что необходимые поставщики безопасности включены в файле java.security. Не скрывайте коды ошибок/сообщения об ошибках в графическом виде, они не доступны для поиска, вместо этого скопируйте и вставьте в свой вопрос как обычный текст.   -  person mao    schedule 04.12.2019
comment
Вероятно, сертификат сервера отсутствует в хранилищах ключей, поставляемых с пакетами JDK сторонних производителей.   -  person mustaccio    schedule 04.12.2019
comment
@kkuduk: я этого не знаю. Поскольку у меня по крайней мере есть способ подключиться к базе данных с помощью IBM JDK и Squirrel SQL; Есть ли способ узнать, является ли это DATA_ENCRYPT?   -  person Rahul Khimasia    schedule 05.12.2019


Ответы (2)


Вот одна из подходящих статей по вашему делу:
Приложение JDBC может получить ошибку "Механизм безопасности не поддерживается"
https://www.ibm.com/support/pages/jdbc-application-may-receive-error-security-mechanism-not-supported

Решение проблемы

Задайте следующее свойство:

securityMechanism = ENCRYPTED_USER_PASSWORD_AND_DATA_SECURITY (13)

В качестве альтернативы вы можете установить для свойства retryWithAlternativeSecurityMechanism значение YES(1).

Надеюсь это поможет.

person hidehy    schedule 09.12.2019
comment
Я попробовал оба свойства. Но ни один из них не решает мою проблему подключения к Db2 в z/OS с помощью OpenJDK. - person Rahul Khimasia; 09.12.2019
comment
Грустные новости. Теперь проблема может быть связана с OpenJDK, поэтому рекомендуется использовать IBM JDK. - person hidehy; 10.12.2019

Согласно документации IBM для их драйвера IBM Data Server для JDBC и SQLJ, код ошибки -4214 является ошибкой «Ошибка авторизации» — и вы это знаете. Но вы можете получить более конкретную информацию о проблеме, если вызовете SQLException.getMessage. Я думаю, что вы, возможно, уже сделали это, но это не совсем ясно.

Мое полуобразованное предположение состоит в том, что вы еще не выполнили шаги по настройке в документации по драйверу IBM в разделе «Настройка среды выполнения Java для использования SSL»:

https://www.ibm.com/support/knowledgecenter/SSEPGG_11.5.0/com.ibm.db2.luw.apdv.java.doc/src/tpc/imjcc_t0054066.html

Вам придется применить некоторые знания здравого смысла к этим инструкциям, чтобы адаптировать их для OpenJDK, и это может не поддерживаться IBM в зависимости от того, что/как вы это делаете. Если бы вы могли каким-то образом использовать IBMJSSE2 Provider, было бы неплохо.

Я думаю, что Мао и Мустаччио, вероятно, имеют правильные идеи, и, вероятно, вам просто не хватает сертификата сервера в вашем доверенном хранилище. Приведенные выше инструкции помогут вам настроить это.

person Timothy Sipples    schedule 12.02.2020