ORA-28040: Không có ngoại lệ giao thức xác thực phù hợp


92

Tôi đang cố gắng kết nối dự án grails của mình với Oracle databse ( Oracle 12c ) trong hệ thống windows (8). Tuy nhiên, bất cứ khi nào tôi chạy ứng dụng của mình, tôi đều nhận được ngoại lệ sau:

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

Theo gợi ý trên internet, tôi cũng đã thử chỉnh sửa *.oratệp của mình nhưng nó không hoạt động.

Tôi đã thêm đoạn mã sau vào sqlnet.oratệp:

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

Ở đây tôi đã thử gán (10,11,12) nhưng cả hai đều không hoạt động.

Có ai co thể giúp tôi với điều này không ?


Bạn đã chỉnh sửa sqlnet.ora nào, trên máy khách hay máy chủ?
Jon Heller

1
Tôi không chắc vì tôi là người mới làm quen với nó. Tuy nhiên, tập tin tôi đã chỉnh sửa chỉ chứa vài dòng. Nó chứa: '# sqlnet.ora Tệp cấu hình mạng: E: \ app \ adhikariaman01 \ product \ 12.1.0 \ dbhome_1 \ network \ admin \ sqlnet.ora # Được tạo bởi các công cụ cấu hình Oracle. # Tệp này thực sự được tạo bởi netca. Nhưng nếu khách hàng chọn # cài đặt "Chỉ phần mềm", tệp này sẽ không tồn tại và không có xác thực # gốc, họ sẽ không thể kết nối với cơ sở dữ liệu trên NT. SQLNET.AUTHENTICATION_SERVICES = (NTS) NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT) '
Aman Adhikari

2
Điều đó nghe giống như tệp cho máy chủ cơ sở dữ liệu. Những vấn đề này có thể thực sự khó khăn. Bạn có thể kết nối với máy chủ cơ sở dữ liệu bằng SQL * Plus không? Bạn có đang sử dụng ứng dụng khách mỏng JDBC không, và nếu có, bạn có thể thử ứng dụng khách dày không?
Jon Heller

Vâng, tôi đang kết nối thông qua SQL * plus
Aman Adhikari

1
Tôi đã giải quyết được vấn đề :). Tôi đã xóa tệp ojdbc14.jar và sử dụng ojdbc6.jar để thay thế và nó hoạt động với tôi. Dù sao, cảm ơn vì đã trả lời.
Aman Adhikari

Câu trả lời:


152

Tôi đã xóa tệp ojdbc14.jar và sử dụng ojdbc6.jar để thay thế và nó hoạt động với tôi


3
gặp sự cố tương tự khi cố gắng kết nối Oracle 12c từ ấm đun nước pentaho. đã gỡ bỏ ojdbc14.jar và nó hoạt động hoàn hảo!
lourdh

17
Ít nhất một lời giải thích ngắn gọn tại sao điều này sẽ hoạt động sẽ khá hữu ích.
Yuriy Kravets

8
Đối với tôi, việc thay đổi thành ojdbc6.jar hoặc ojdbc7.jar vẫn không thành công vì tôi đã liên tục thiết lập: oracle.jdbc.thinLogonCapability"="o3"điều mà bạn không còn phải làm với oracle 12c nữa. Hy vọng nó có thể giúp người khác
James Tobin

3
Điều đó hoạt động hoàn hảo sau khi xóa ojdbc14.jar và sử dụng ojdbc6.jar
Sam

1
@YuriyKravets Số 14 trong ojdbc14.jar và số 6 trong ojdbc6.jar đề cập đến phiên bản JDK mà chúng được viết cho. Nếu bạn mở tệp kê khai của ojdbc14.jar , nó cho biết: Đặc tả-Tiêu đề: "Các lớp trình điều khiển Oracle JDBC để sử dụng với JDK1.4" Tương tự, ojdbc6.jar hỗ trợ triển khai JDK1.6.
Maverick

55

Đây là một số văn bản tôi tìm thấy tại trao đổi chuyên gia :

Lỗi 14575666

Trong 12.1, giá trị mặc định cho tham số SQLNET.ALLOWED_LOGON_VERSION đã được cập nhật thành 11. Điều này có nghĩa là máy khách cơ sở dữ liệu sử dụng trình điều khiển mỏng JDBC 11g trước đó không thể xác thực cho máy chủ cơ sở dữ liệu 12.1 trừ khi tham sốSQLNET.ALLOWED_LOGON_VERSION được đặt thành mặc định cũ là 8.

Điều này sẽ gây ra lỗi tạo cơ sở dữ liệu Oracle RAC 10.2.0.5 sử dụng DBCA với ORA-28040: Lỗi giao thức xác thực không khớp trong môi trường 12.1 Oracle ASM và Oracle Grid Infrastructure.

Cách giải quyết: Đặt SQLNET.ALLOWED_LOGON_VERSION = 8 trong tệp oracle / network / admin / sqlnet.ora.


Chỉ để tham khảo: Điều này làm việc cho tôi không xóa các tập tin và sử dụng ojdbc14.jar ojdbc6.jar
rageit

4
vâng, trong trường hợp của tôi, điều này đã giải quyết được vấn đề, nhưng một sự cố khác đã xảy ra: tên người dùng / mật khẩu không hợp lệ. btw tôi đã cố gắng kết nối từ oracle jdeveloper 10 với cơ sở dữ liệu oracle 12c. vì vậy đây là câu trả lời: stackoverflow.com/questions/14476875/… cuối cùng đã phải: 1) thay đổi SQLNET.ALLOWED_LOGON_VERSION thành 8 2) SQLNET.AUTHENTICATION_SERVICES thành (NONE) 3) ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE 4) ALTER USER XX ĐƯỢC XÁC NHẬN BỞI PW (để lưu lại mật khẩu bây giờ chúng tôi đã thay đổi phân biệt chữ hoa chữ thường)
hello_earth

Đến muộn, nhưng tôi cũng đã xác nhận bản sửa lỗi này. Tôi đã phải đặt phiên bản của mình = 8 mặc dù tôi đang chạy JDBC 11 - không có gì mới hơn 8 hoạt động.
Keith

Tôi đang sử dụng máy chủ cơ sở dữ liệu từ xa, tôi không có quyền truy cập vào máy, tôi chỉ có thể kết nối với cơ sở dữ liệu bằng SQL Developer (Không có lỗi), nhưng ứng dụng của tôi (được triển khai trên Tomcat) gặp lỗi này. Tôi đã thay đổi cài đặt tại máy cục bộ của mình, nó không hoạt động. Tôi có phải sửa đổi cài đặt trên máy chủ không?
Gunwant

5

Tôi đã giải quyết vấn đề này bằng cách sử dụng ojdbc8.jar. Oracle 12c tương thích với ojdbc8.jar


5

Điều này ngoại trừ việc thêm phần sau vào sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

Nếu bạn gặp lỗi "ORA-01017: tên người dùng / mật khẩu không hợp lệ; đăng nhập bị từ chối", thì bạn cần tạo lại mật khẩu của mình.


Nếu bạn gặp lỗi "ORA-01017: tên người dùng / mật khẩu không hợp lệ; đăng nhập bị từ chối", thì bạn cần tạo lại mật khẩu của mình. Đây là một cuộc sống tiết kiệm !! Cảm ơn bạn
Thomas VC

3

Ngoại trừ việc thêm phần sau vào sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

Tôi cũng đã thêm phần sau vào cả Máy khách và Máy chủ, điều này đã giải quyết được sự cố của tôi

SQLNET.AUTHENTICATION_SERVICES = (NONE)

Cũng xem bài đăng ORA-28040: Không có giao thức xác thực phù hợp


3

Tôi đang sử dụng nhật thực và sau khi thử tất cả các câu trả lời khác, nó không hoạt động với tôi. Cuối cùng, những gì hiệu quả với tôi là chuyển ojdb7.jarlên đầu trong Đường dẫn xây dựng. Điều này xảy ra khi nhiều lọ có các lớp giống nhau xung đột.

  1. Chọn dự án trong Project Explorer
  2. Nhấp chuột phải vào Project -> Build Path -> Configure Build Path
  3. Đi tới Order and Exporttab và chọnojdbc.jar
  4. Nhấp vào nút TOPđể di chuyển nó lên đầu

1

Thêm

SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

là giải pháp hoàn hảo cho thư mục sql.ora .. \ product \ 12.1.0 \ dbhome_1 \ NETWORK \ ADMIN


1

Câu hỏi rất cũ nhưng cung cấp một số thông tin bổ sung có thể giúp ích cho người khác. Tôi cũng gặp phải lỗi tương tự và tôi đang sử dụng ojdbc14.jar với Cơ sở dữ liệu Oracle 12.1.0.2. Trên trang web chính thức của Oracle, thông tin này được liệt kê rằng phiên bản nào hỗ trợ trình điều khiển cơ sở dữ liệu nào. Đây là liên kết và có vẻ như với Oracle 12c và Java 7 hoặc 8, phiên bản chính xác là ojdbc7.jar.

Trong ojdbc6.jar là cho 11.2.0.4.


0

Lỗi ban đầu của tôi là: ORA-28040: Không có ngoại lệ giao thức xác thực phù hợp

Phiên bản DB của tôi là 12.2 (Solaris) và phiên bản máy khách là 11.2 (windows). Tôi đã thêm bên dưới trong cả máy chủ và máy khách sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8 SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

trong khi kết nối, tôi đã nhận được tên người dùng và mật khẩu không hợp lệ do đó tôi đã tạo lại mật khẩu (cùng một mật khẩu) trong cơ sở dữ liệu để giải quyết vấn đề của tôi.


0

Trong khi đối với hầu hết các trường hợp, thay thế jar trình điều khiển ojdbc sẽ là giải pháp, trường hợp của tôi thì khác.

Nếu bạn chắc chắn rằng bạn đang sử dụng đúng trình điều khiển ojdbc. Kiểm tra kỹ xem bạn có đang thực sự kết nối với cơ sở dữ liệu mà bạn đang nghĩ hay không. Trong trường hợp của tôi, cấu hình jdbc (trong Tomcat / conf) đã trỏ đến cơ sở dữ liệu khác nhau có phiên bản Oracle khác nhau.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.