Ошибка при подключении: "ORA-28040: No matching authentication protocol exception"
Пробую подключить Grails проект к Oracle БД 12c. Но когда запускаю приложение, то получаю исключение:
Caused by: org.apache.commons.dbcp.SQLNestedException:
Cannot create PoolableConnectionFactory (ORA-28040:
No matching authentication protocol)
Нашёл предлоаемое решение и попробовал отредактировать .ora файл, но безуспешно.
Добавил следующее в sqlnet.ora и пробовал установливать значения 10,11,12:
SQLNET.ALLOWED_LOGON_VERSION=10
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=10
SQLNET.ALLOWED_LOGON_VERSION_SERVER=10
, но с никаким из них не заработало.
Может кто-то помочь с этой проблемой?
Свободный перевод ORA-28040: No matching authentication protocol exception от участника @Aman Adhikari
Ответы (2 шт):
Удалил ojdbc14.jar и установил ojdbc6.jar вместо него. У меня заработало.
Свободный перевод ответа от участника @Aman Adhikari
Решил проблему установив ojdbc8.jar драйвер, он совместим с Oracle 12c.
Похожий ответ от участника @shardendu
В оф. документации эта ошибка упомянута в контексте Oracle RAC, но решение действительно так же для некластерной БД:
Bug 14575666
In 12.1, the default value for the SQLNET.ALLOWED_LOGON_VERSION parameter has been updated to 11. This means that database clients using pre-11g JDBC thin drivers cannot authenticate to 12.1 database servers unless the SQLNET.ALLOWED_LOGON_VERSION parameter is set to the old default of 8.This will cause a 10.2.0.5 Oracle RAC database creation using DBCA to fail with the ORA-28040: No matching authentication protocol error in 12.1 Oracle ASM and Oracle Grid Infrastructure environments.
Workaround:
Set SQLNET.ALLOWED_LOGON_VERSION=8 in the $crs_home/network/admin/sqlnet.ora file.
Предложенное решение: установить SQLNET.ALLOWED_LOGON_VERSION=8 на сервере БД.
В этом ответе ссылка на фэйк QA, поэтому перенёс только полезный комментарий под ним.
Комментарий:
Да, в моём случае это решило проблему, но возникла другая: invalid username/password, когда пытался подключится в JDeveloper 10 к Oracle БД 12c.
В итоге решил так:
SQLNET.ALLOWED_LOGON_VERSION=8SQLNET.AUTHENTICATION_SERVICES (NONE)ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSEALTER USER XY IDENTIFIED BY Pass(так как меняется регистро-чуствительность)