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 від чайника пентахо. видалено 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.

Це призведе до помилки створення бази даних 10.2.0.5 Oracle RAC за допомогою 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 на (NONE) 3) ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE XX) ALALSE = FALSE XX) ІДЕНТИФІКОВАНО 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

Я використовував затемнення, і після спробування всіх інших відповідей у ​​мене це не спрацювало. Врешті-решт, для мене спрацювало переміщення 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


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.


0

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

В ojdbc6.jar - це 11.2.0.4.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.