ORA-28040: brak odpowiedniego wyjątku protokołu uwierzytelniania

92

Próbuję połączyć mój projekt Grails z bazą danych Oracle ( Oracle 12c ) w systemie Windows (8). Jednak za każdym razem, gdy uruchamiam moją aplikację, otrzymuję następujący wyjątek:

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

Zgodnie z sugestiami internetowymi próbowałem też edytować *.oraplik, ale nie działa.

Dodałem następujący fragment w sqlnet.orapliku:

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

Tutaj próbowałem przypisać (10,11,12), ale żaden z nich nie działa.

Czy ktoś może mi w tym pomóc?

Aman Adhikari
źródło
Który plik sqlnet.ora edytowałeś, ten na kliencie czy na serwerze?
Jon Heller
1
Nie jestem pewien, ponieważ jestem nowicjuszem. Jednak edytowany przeze mnie plik zawierał tylko kilka wierszy. Zawierał: '# sqlnet.ora Plik konfiguracji sieci: E: \ app \ adhikariaman01 \ product \ 12.1.0 \ dbhome_1 \ network \ admin \ sqlnet.ora # Wygenerowany przez narzędzia konfiguracyjne Oracle. # Ten plik jest faktycznie generowany przez netca. Ale jeśli klienci zdecydują się # zainstalować „Tylko oprogramowanie”, ten plik nie będzie istniał i bez natywnego # uwierzytelnienia nie będą mogli połączyć się z bazą danych w systemie NT. SQLNET.AUTHENTICATION_SERVICES = (NTS) NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT) '
Aman Adhikari
2
To brzmi jak plik dla serwera bazy danych. Te problemy mogą być naprawdę trudne. Czy możesz połączyć się z serwerem bazy danych za pomocą SQL * Plus? Czy używasz cienkiego klienta JDBC, a jeśli tak, czy możesz wypróbować grubego klienta?
Jon Heller
Tak, mam połączenie przez SQL * plus
Aman Adhikari,
1
Rozwiązałem problem :). Usunąłem plik ojdbc14.jar i zamiast niego użyłem ojdbc6.jar i to zadziałało. W każdym razie dziękuję za odpowiedź.
Aman Adhikari,

Odpowiedzi:

152

Usunąłem ojdbc14.jar plik i używane ojdbc6.jar zamiast i pracował dla mnie

Aman Adhikari
źródło
3
napotkał ten sam problem podczas próby podłączenia Oracle 12c z czajnika pentaho. usunięty ojdbc14.jar i działa doskonale!
lourdh
17
Przynajmniej krótkie wyjaśnienie, dlaczego to powinno zadziałać, byłoby bardzo przydatne.
Yuriy Kravets
8
Dla mnie zmiana na ojdbc6.jar lub ojdbc7.jar nadal nie powiodła się, ponieważ ciągle ustawiałem: oracle.jdbc.thinLogonCapability"="o3"czego nie musisz już robić w stosunku do Oracle 12c. Mam nadzieję, że pomoże to komuś innemu
James Tobin
3
Działa to doskonale po usunięciu ojdbc14.jar i użyciu ojdbc6.jar
Sam
1
@YuriyKravets Liczba 14 w ojdbc14.jar i 6 w ojdbc6.jar odnosi się do wersji JDK, dla której zostały napisane. Jeśli otworzysz plik manifestu ojdbc14.jar, zobaczysz : Specification-Title: "Klasy sterownika Oracle JDBC do użytku z JDK1.4" Podobnie ojdbc6.jar obsługuje implementację JDK1.6.
Maverick,
55

Oto tekst, który znalazłem na giełdzie ekspertów :

Błąd 14575666

W wersji 12.1 domyślna wartość parametru SQLNET.ALLOWED_LOGON_VERSION została zaktualizowana do 11. Oznacza to, że klienci baz danych korzystający z cienkich sterowników JDBC w wersji starszej niż 11g nie mogą uwierzytelniać się na serwerach baz danych 12.1, chyba że parametr SQLNET.ALLOWED_LOGON_VERSION jest ustawiony na starą wartość domyślną 8.

Spowoduje to, że utworzenie bazy danych Oracle RAC 10.2.0.5 przy użyciu DBCA zakończy się niepowodzeniem z ORA-28040: Błąd dopasowania protokołu uwierzytelniania w środowiskach 12.1 Oracle ASM i Oracle Grid Infrastructure.

Obejście: Ustaw SQLNET.ALLOWED_LOGON_VERSION = 8 w pliku oracle / network / admin / sqlnet.ora.

Szymon
źródło
Tylko w celach informacyjnych: to zadziałało, nie usuwając pliku ojdbc14.jar i używając ojdbc6.jar
rageit
4
tak, w moim przypadku rozwiązało to problem, ale wystąpił inny: nieprawidłowa nazwa użytkownika / hasło. btw próbowałem połączyć się z Oracle JDeveloper 10 do bazy danych Oracle 12c. więc to dało odpowiedź: stackoverflow.com/questions/14476875/ ... w końcu musiałem: 1) zmienić SQLNET.ALLOWED_LOGON_VERSION na 8 2) SQLNET.AUTHENTICATION_SERVICES na (NONE) 3) ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE 4) ALTER USER XX ZIDENTYFIKOWANE PRZEZ PW (aby ponownie zapisać hasło teraz, gdy zmieniliśmy rozróżnianie wielkości liter)
hello_earth
Spóźniony na imprezę, ale potwierdziłem też tę poprawkę. I miał ustawić mój version = 8 chociaż biegałam JDBC 11 - nic nowszego niż 8 działało.
Keith
Używam zdalnego serwera bazy danych, nie mam dostępu do komputera, mogę po prostu połączyć się z bazą danych za pomocą SQL Developer (bez błędów), ale moja aplikacja (wdrożona na Tomcat) zgłasza ten błąd. Zmieniłem ustawienia na moim komputerze lokalnym, nie działa. Czy muszę modyfikować ustawienia na serwerze?
Gunwant
5

Rozwiązałem ten problem, używając ojdbc8.jar. Oracle 12c jest kompatybilny z ojdbc8.jar

Shardendu
źródło
5

Z wyjątkiem dodawania następujących elementów do sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

Jeśli pojawi się błąd „ORA-01017: nieprawidłowa nazwa użytkownika / hasło; odmowa logowania”, musisz ponownie utworzyć hasło.

Kod Art
źródło
Jeśli pojawi się błąd „ORA-01017: nieprawidłowa nazwa użytkownika / hasło; odmowa logowania”, musisz ponownie utworzyć hasło. To był ratunek dla życia !! Dziękuję
Thomas VC
3

Z wyjątkiem dodania następujących elementów do sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

Dodałem również następujące elementy do klienta i serwera, co rozwiązało mój problem

SQLNET.AUTHENTICATION_SERVICES = (NONE)

Zobacz także post ORA-28040: Brak zgodnego protokołu uwierzytelniania

Werner Bisschoff
źródło
3

Używałem zaćmienia i po wypróbowaniu wszystkich innych odpowiedzi nie zadziałało. W końcu to, co zadziałało, to przesunięcie na ojdb7.jargórę ścieżki budowania. Dzieje się tak, gdy wiele słoików ma sprzeczne te same klasy.

  1. Wybierz projekt w Project Explorer
  2. Kliknij prawym przyciskiem myszy Project -> Build Path -> Configure Build Path
  3. Przejdź do Order and Exportzakładki i wybierzojdbc.jar
  4. Kliknij przycisk, TOPaby przenieść go na górę
Sandesh Gupta
źródło
1

Dodawanie

SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

to idealne rozwiązanie katalog sql.ora .. \ product \ 12.1.0 \ dbhome_1 \ NETWORK \ ADMIN

Birhan Nega
źródło
1

Bardzo stare pytanie, ale zawiera dodatkowe informacje, które mogą pomóc komuś innemu. Napotkałem również ten sam błąd i korzystałem z ojdbc14.jar z 12.1.0.2 Oracle Database. Na oficjalnej stronie internetowej Oracle podana jest informacja, która wersja obsługuje które sterowniki bazy danych. Oto link i wygląda na to, że w przypadku Oracle 12c i Java 7 lub 8 poprawna wersja to ojdbc7.jar.

W ojdbc6.jar jest dla 11.2.0.4.

Karan
źródło
0

Mój początkowy błąd to: ORA-28040: Brak pasującego wyjątku protokołu uwierzytelniania

Moja wersja DB to 12.2 (Solaris), a wersja klienta to 11.2 (Windows). Dodałem poniżej na serwerze i kliencie sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8 SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

podczas łączenia mam nieprawidłową nazwę użytkownika i hasło, dlatego odtworzyłem hasło (to samo hasło) w bazie danych, co rozwiązało mój problem.

Arumugaraj Kuthalingam
źródło
0

O ile w większości przypadków zastąpienie jar sterownika ojdbc będzie rozwiązaniem, o tyle mój przypadek był inny.

Jeśli jesteś pewien, że używasz prawidłowego sterownika ojdbc. Dokładnie sprawdź, czy faktycznie łączysz się z bazą danych, o której myślisz. W moim przypadku konfiguracja jdbc (w Tomcat / conf) wskazywała na inną bazę danych, która miała inną wersję Oracle.

user435421
źródło
-1

po prostu zainstaluj ojdbc-full, który zawiera wydanie 12.1.0.1.

Ali Mhamad Slim
źródło