Я могу подключиться к 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 и не работает с другим?

error when using Open JDK 12

0
Rahul Khimasia 4 Дек 2019 в 05:53
Использует ли база данных z / OS DATA_ENCRYPT? Это прямое подключение или через Db2 Connect?
 – 
kkuduk
4 Дек 2019 в 12:28
Этот вопрос больше касается конфигурации, чем программирования. Убедитесь, что в openjdk включена неограниченная длина криптографического ключа. Убедитесь, что необходимые поставщики безопасности включены в java.security. Не скрывайте коды ошибок / сообщения об ошибках в графике, они не доступны для поиска, вместо этого скопируйте и вставьте как обычный текст в свой вопрос.
 – 
mao
4 Дек 2019 в 15:05
Вероятно, сертификат сервера отсутствует в хранилищах ключей, поставляемых с JDK сторонних производителей.
 – 
mustaccio
4 Дек 2019 в 23:59
: Я не знаю, что. Поскольку у меня, по крайней мере, есть способ подключиться к базе данных с помощью IBM JDK и Squirrel SQL; Есть ли способ узнать, является ли это DATA_ENCRYPT?
 – 
Rahul Khimasia
5 Дек 2019 в 16:30

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).

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

0
hidehy 9 Дек 2019 в 11:11
Я пробовал оба свойства. Но ни один из них не решает мою проблему подключения к Db2 на z / OS с помощью OpenJDK.
 – 
Rahul Khimasia
9 Дек 2019 в 17:49
Грустные новости. Теперь проблема может быть связана с OpenJDK, поэтому рекомендуется использовать IBM JDK.
 – 
hidehy
10 Дек 2019 в 05:01

Согласно документации 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.

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

0
Timothy Sipples 12 Фев 2020 в 11:05