ORA-28040: Tidak ada pengecualian protokol otentikasi yang cocok

92

Saya mencoba menghubungkan proyek grails saya ke Oracle databse ( Oracle 12c ) di sistem windows (8). Namun, setiap kali saya menjalankan aplikasi saya, saya mendapatkan pengecualian berikut:

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

Menurut saran internet, saya juga mencoba mengedit *.orafile saya tetapi tidak berhasil.

Saya menambahkan potongan berikut dalam sqlnet.orafile:

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

Di sini saya mencoba menetapkan (10,11,12) tetapi tidak satupun dari mereka berfungsi.

Adakah yang bisa membantu saya dengan ini?

Aman Adhikari
sumber
Sqlnet.ora mana yang Anda edit, yang ada di klien atau server?
Jon Heller
1
Saya tidak yakin karena saya pemula untuk itu. Namun, file yang saya edit hanya berisi beberapa baris. Ini Berisi: '# sqlnet.ora File Konfigurasi Jaringan: E: \ app \ adhikariaman01 \ product \ 12.1.0 \ dbhome_1 \ network \ admin \ sqlnet.ora # Dihasilkan oleh alat konfigurasi Oracle. # File ini sebenarnya dibuat oleh netca. Tetapi jika pelanggan memilih untuk # menginstal "Software Only", file ini tidak akan ada dan tanpa otentikasi # asli, mereka tidak akan dapat terhubung ke database di NT. SQLNET.AUTHENTICATION_SERVICES = (NTS) NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT) '
Aman Adhikari
2
Kedengarannya seperti file untuk server database. Masalah ini bisa sangat sulit. Bisakah Anda terhubung ke server database menggunakan SQL * Plus? Apakah Anda menggunakan klien tipis JDBC, dan jika demikian, dapatkah Anda mencoba klien tebal?
Jon Heller
Ya, saya terhubung melalui SQL * plus
Aman Adhikari
1
Saya memecahkan masalah :). Saya menghapus file ojdbc14.jar dan menggunakan ojdbc6.jar sebagai gantinya dan itu berhasil untuk saya. Pokoknya terima kasih sudah menjawab.
Aman Adhikari

Jawaban:

152

Saya menghapus file ojdbc14.jar dan menggunakan ojdbc6.jar sebagai gantinya dan itu berhasil untuk saya

Aman Adhikari
sumber
3
mengalami masalah yang sama saat mencoba menghubungkan Oracle 12c dari ketel pentaho. menghapus ojdbc14.jar dan bekerja dengan sempurna!
lourdh
17
Setidaknya penjelasan singkat mengapa ini harus berhasil akan sangat berguna.
Yuriy Kravets
8
Bagi saya, mengubah ke ojdbc6.jar atau ojdbc7.jar masih gagal karena saya terus-menerus mengatur: oracle.jdbc.thinLogonCapability"="o3"yang tidak lagi harus Anda lakukan terhadap oracle 12c. Semoga dapat membantu orang lain
James Tobin
3
Itu berfungsi sempurna setelah menghapus ojdbc14.jar dan menggunakan ojdbc6.jar
Sam
1
@YuriyKravets Angka 14 di ojdbc14.jar dan angka 6 di ojdbc6.jar mengacu pada versi JDK yang mereka buat. Jika Anda membuka file manifes ojdbc14.jar , ia mengatakan: Specification-Title: "Kelas driver Oracle JDBC untuk digunakan dengan JDK1.4" Demikian pula, ojdbc6.jar mendukung implementasi JDK1.6.
Maverick
55

Berikut beberapa teks yang saya temukan di pertukaran ahli :

Bug 14575666

Dalam 12.1, nilai default untuk parameter SQLNET.ALLOWED_LOGON_VERSION telah diperbarui ke 11. Ini berarti bahwa klien database yang menggunakan thin driver JDBC pra-11g tidak dapat mengotentikasi ke server database 12.1 kecuali parameter SQLNET.ALLOWED_LOGON_VERSION disetel ke default lama 8.

Hal ini akan menyebabkan kegagalan pembuatan database Oracle RAC 10.2.0.5 menggunakan DBCA dengan ORA-28040: Tidak ada kesalahan protokol otentikasi yang cocok di 12.1 Oracle ASM dan lingkungan Oracle Grid Infrastructure.

Solusi: Setel SQLNET.ALLOWED_LOGON_VERSION = 8 di file oracle / network / admin / sqlnet.ora.

Simon
sumber
Hanya untuk referensi: Ini berfungsi untuk saya tidak menghapus file ojdbc14.jar dan menggunakan ojdbc6.jar
rageit
4
ya, dalam kasus saya ini menyelesaikan masalah, tetapi yang lain terjadi: nama pengguna / kata sandi tidak valid. btw saya mencoba menghubungkan dari oracle jdeveloper 10 ke oracle database 12c. jadi ini memberi jawabannya: stackoverflow.com/questions/14476875/… akhirnya harus: 1) mengubah SQLNET.ALLOWED_LOGON_VERSION menjadi 8 2) SQLNET.AUTHENTICATION_SERVICES menjadi (NONE) 3) ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE 4) ALTER USER XX DIIDENTIFIKASI OLEH PW (untuk menyimpan ulang kata sandi sekarang setelah kami mengubah sensitivitas huruf)
hello_earth
Terlambat ke pesta, tetapi saya juga telah mengonfirmasi perbaikan ini. Saya harus mengatur versi saya = 8 meskipun saya menjalankan JDBC 11 - tidak ada yang lebih baru dari 8 yang berfungsi.
Keith
Saya menggunakan server database jarak jauh, saya tidak memiliki akses ke mesin, saya hanya dapat terhubung ke database menggunakan SQL Developer (Tanpa kesalahan), tetapi aplikasi saya (digunakan di Tomcat) membuat kesalahan ini. Saya telah mengubah pengaturan di mesin lokal saya, itu tidak berfungsi. Apakah saya harus mengubah pengaturan pada mesin server?
Gunwant
5

Saya menyelesaikan masalah ini dengan menggunakan ojdbc8.jar. Oracle 12c kompatibel dengan ojdbc8.jar

Shardendu
sumber
5

Ini kecuali untuk menambahkan berikut ini ke sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

Jika Anda mendapatkan kesalahan "ORA-01017: username / password tidak valid; logon ditolak", maka Anda perlu membuat ulang password Anda.

CodeArt
sumber
Jika Anda mendapatkan kesalahan "ORA-01017: username / password tidak valid; logon ditolak", maka Anda perlu membuat ulang password Anda. Ini adalah penyelamat hidup !! Terima kasih
Thomas VC
3

Kecuali untuk menambahkan berikut ini ke sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

Saya juga menambahkan yang berikut ini ke Klien dan Server, yang menyelesaikan masalah saya

SQLNET.AUTHENTICATION_SERVICES = (NONE)

Lihat juga posting ORA-28040: Tidak ada protokol otentikasi yang cocok

Werner Bisschoff
sumber
3

Saya menggunakan eclipse dan setelah mencoba semua jawaban lainnya, itu tidak berhasil untuk saya. Pada akhirnya, yang berhasil bagi saya adalah pindah ojdb7.jarke puncak di Build Path. Ini terjadi ketika beberapa toples memiliki kelas yang sama berkonflik.

  1. Pilih proyek di Project Explorer
  2. Klik kanan Project -> Build Path -> Configure Build Path
  3. Buka Order and Exporttab dan pilihojdbc.jar
  4. Klik tombol TOPuntuk memindahkannya ke atas
Sandesh Gupta
sumber
1

Menambahkan

SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

adalah solusi sempurna direktori sql.ora .. \ product \ 12.1.0 \ dbhome_1 \ NETWORK \ ADMIN

Birhan Nega
sumber
1

Pertanyaan yang sangat lama tetapi memberikan beberapa informasi tambahan yang dapat membantu orang lain. Saya juga mengalami kesalahan yang sama dan saya menggunakan ojdbc14.jar dengan 12.1.0.2 Oracle Database. Pada halaman web resmi Oracle, informasi ini terdaftar versi mana yang mendukung driver database mana. Berikut ini tautannya dan tampaknya dengan Oracle 12c dan Java 7 atau 8 versi yang benar adalah ojdbc7.jar.

Dalam ojdbc6.jar adalah untuk 11.2.0.4.

Karan
sumber
0

Kesalahan awal saya adalah: ORA-28040: Tidak ada pengecualian protokol otentikasi yang cocok

Versi DB saya adalah 12.2 (Solaris) dan versi klien adalah 11.2 (windows). Saya telah menambahkan di bawah ini di server dan klien sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8 SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

saat menghubungkan, saya mendapatkan nama pengguna dan kata sandi yang tidak valid sehingga saya telah membuat ulang kata sandi (kata sandi yang sama) dalam database yang menyelesaikan masalah saya.

Arumugaraj Kuthalingam
sumber
0

Sementara untuk kebanyakan kasus mengganti jar driver ojdbc akan menjadi solusinya, kasus saya berbeda.

Jika Anda yakin Anda menggunakan driver ojdbc yang benar. Periksa kembali apakah Anda benar-benar terhubung ke database yang Anda pikirkan. Dalam kasus saya konfigurasi jdbc (di Tomcat / conf) menunjuk ke database yang berbeda yang memiliki versi Oracle yang berbeda.

pengguna435421
sumber
-1

cukup instal ojdbc-full, yang berisi rilis 12.1.0.1.

Ali Mhamad Slim
sumber