ORA-28040: Нет исключения соответствующего протокола аутентификации.


92

Я пытаюсь подключить свой проект Grails к базе данных Oracle ( Oracle 12c ) в системе Windows (8). Однако всякий раз, когда я запускаю свое приложение, я получаю следующее исключение:

Caused by: org.apache.commons.dbcp.SQLNestedException: 
Cannot create PoolableConnectionFactory (ORA-28040: 
No matching authentication protocol)

Caused by: 
java.sql.SQLException: ORA-28040: 
No matching authentication protocol

Согласно интернет-предложению, я также попытался отредактировать свой *.oraфайл, но он не работает.

Я добавил в sqlnet.oraфайл следующий фрагмент :

SQLNET.ALLOWED_LOGON_VERSION=10
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=10
SQLNET.ALLOWED_LOGON_VERSION_SERVER=10

Здесь я попытался назначить (10,11,12), но ни один из них не работает.

Может ли кто-нибудь помочь мне с этим?


Какой sqlnet.ora вы редактировали, на клиенте или на сервере?
Джон Хеллер

1
Я не уверен, так как я новичок в этом. Однако файл, который я редактировал, содержал всего несколько строк. Он содержал: '# sqlnet.ora Файл конфигурации сети: E: \ app \ adhikariaman01 \ product \ 12.1.0 \ dbhome_1 \ network \ admin \ sqlnet.ora # Создан инструментами конфигурации Oracle. # Этот файл фактически создается netca. Но если клиенты # выберут установку "Только программное обеспечение", этот файл не будет существовать, и без собственной # аутентификации они не смогут подключиться к базе данных на NT. SQLNET.AUTHENTICATION_SERVICES = (NTS) NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT) '
Аман Адхикари

2
Похоже на файл для сервера базы данных. Эти проблемы могут быть очень сложными. Можете ли вы подключиться к серверу базы данных с помощью SQL * Plus? Вы используете тонкий клиент JDBC, и если да, можете ли вы попробовать толстый клиент?
Джон Хеллер

Да, я подключен через SQL * plus
Аман Адхикари

1
Решил вопрос :). Я удалил файл ojdbc14.jar и использовал вместо него ojdbc6.jar, и у меня это сработало. В любом случае спасибо за ответ.
Aman Adhikari

Ответы:


152

Я удалил ojdbc14.jar файл и использовать ojdbc6.jar вместо и он работал для меня


3
возникла такая же проблема при попытке подключить Oracle 12c из чайника pentaho. удален ojdbc14.jar, и он отлично работает!
lourdh

17
Хотя бы краткое объяснение того, почему это должно работать, было бы весьма кстати.
Юрий Кравец

8
Для меня переход на ojdbc6.jar или ojdbc7.jar все еще не удался, потому что я постоянно устанавливал: oracle.jdbc.thinLogonCapability"="o3"что вам больше не нужно делать против oracle 12c. Надеюсь, это поможет кому-то другому,
Джеймс Тобин,

3
Это отлично работает после удаления ojdbc14.jar и использования ojdbc6.jar
Сэм,

1
@YuriyKravets Число 14 в ojdbc14.jar и число 6 в ojdbc6.jar относится к версии JDK, для которой они были написаны. Если вы откроете файл манифеста ojdbc14.jar , в нем будет написано: Specification-Title: «Классы драйверов Oracle JDBC для использования с JDK1.4». Аналогично, ojdbc6.jar поддерживает реализацию JDK1.6.
Maverick

55

Вот текст, который я нашел на бирже экспертов :

Ошибка 14575666

В версии 12.1 значение по умолчанию для параметра SQLNET.ALLOWED_LOGON_VERSION было обновлено до 11. Это означает, что клиенты баз данных, использующие тонкие драйверы JDBC до 11g, не могут аутентифицироваться на серверах баз данных 12.1, если для параметраSQLNET.ALLOWED_LOGON_VERSION не установлено старое значение по умолчанию 8.

Это приведет к сбою создания базы данных Oracle RAC 10.2.0.5 с использованием DBCA с ORA-28040: Ошибка соответствующего протокола аутентификации в 12.1 Oracle ASM и Oracle Grid Infrastructure.

Обходной путь: установите SQLNET.ALLOWED_LOGON_VERSION = 8 в файле oracle / network / admin / sqlnet.ora.


Просто для справки: это сработало для меня, не удаляя файл ojdbc14.jar и используя ojdbc6.jar
rageit

4
да, в моем случае это решило проблему, но произошло другое: неверное имя пользователя / пароль. Кстати, я пытался подключиться от oracle jdeveloper 10 к базе данных oracle 12c. так что это дало ответ: stackoverflow.com/questions/14476875/… наконец пришлось: 1) изменить SQLNET.ALLOWED_LOGON_VERSION на 8 2) SQLNET.AUTHENTICATION_SERVICES на (НЕТ) 3) ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE 4) ALTER US ИДЕНТИФИЦИРОВАНО PW (чтобы заново сохранить пароль теперь, когда мы изменили чувствительность к регистру)
hello_earth

Поздно к вечеринке, но я также подтвердил это исправление. Мне пришлось установить мою версию = 8, хотя я работал с JDBC 11 - ничего новее 8 не работало.
Кейт

Я использую удаленный сервер базы данных, у меня нет доступа к машине, я могу просто подключиться к базе данных с помощью SQL Developer (без ошибок), но мое приложение (развернутое на Tomcat) выдает эту ошибку. Я изменил настройки на своем локальном компьютере, он не работает. Нужно ли мне изменять настройки на сервере?
Gunwant


5

За исключением добавления в sqlnet.ora следующего

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

Если вы получаете сообщение об ошибке «ORA-01017: неверное имя пользователя / пароль; вход в систему запрещен», вам необходимо повторно создать свой пароль.


Если вы получаете сообщение об ошибке «ORA-01017: неверное имя пользователя / пароль; вход в систему запрещен», вам необходимо повторно создать свой пароль. Это спасло жизнь !! Спасибо
Thomas VC

3

За исключением добавления следующего в sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

Я также добавил следующее к клиенту и серверу, что решило мою проблему

SQLNET.AUTHENTICATION_SERVICES = (NONE)

Также см. Сообщение ORA-28040: Нет подходящего протокола аутентификации.


3

Я использовал eclipse, и после того, как я попробовал все другие ответы, у меня это не сработало. В конце концов, у меня сработало перемещение на ojdb7.jarвершину Пути сборки. Это происходит, когда несколько банок имеют конфликтующие одинаковые классы.

  1. Выбрать проект в Project Explorer
  2. Щелкните правой кнопкой мыши на Project -> Build Path -> Configure Build Path
  3. Перейдите на Order and Exportвкладку и выберитеojdbc.jar
  4. Нажмите кнопку, TOPчтобы переместить его наверх

1

Добавление

SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

это идеальное решение для каталога sql.ora .. \ product \ 12.1.0 \ dbhome_1 \ NETWORK \ ADMIN


1

Очень старый вопрос, но он дает дополнительную информацию, которая может помочь кому-то другому. Я также столкнулся с той же ошибкой, и я использовал ojdbc14.jar с 12.1.0.2 Oracle Database. На официальной веб-странице Oracle указана информация о том, какая версия поддерживает какие драйверы базы данных. Вот ссылка, и похоже, что для Oracle 12c и Java 7 или 8 правильная версия - ojdbc7.jar.

В ojdbc6.jar используется версия 11.2.0.4.


0

Моя начальная ошибка: ORA-28040: нет исключения соответствующего протокола аутентификации.

Моя версия БД - 12.2 (Solaris), а версия клиента - 11.2 (Windows). Я добавил ниже как в серверный, так и в клиентский sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8 SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

при подключении у меня недействительное имя пользователя и пароль, поэтому я воссоздал пароль (тот же пароль) в базе данных, что решило мою проблему.


0

В то время как в большинстве случаев решением будет замена jar-файла драйвера ojdbc, в моем случае все было иначе.

Если вы уверены, что используете правильный драйвер ojdbc. Дважды проверьте, действительно ли вы подключаетесь к базе данных, о которой думаете. В моем случае конфигурация jdbc (в Tomcat / conf) указывала на другую базу данных с другой версией Oracle.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.