ORA-28040:没有匹配的身份验证协议异常


92

我试图将grails项目连接到Windows(8)系统中的Oracle数据库(Oracle 12c)。但是,每当我运行应用程序时,都会出现以下异常:

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.orafile中添加了以下代码段:

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

在这里我尝试分配(10,11,12),但它们都不起作用。

有人可以帮我吗?


您在客户端或服务器上编辑了哪个sqlnet.ora?
乔恩·海勒2014年

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)'
Aman Adhikari

2
听起来像数据库服务器的文件。这些问题可能真的很难。您可以使用SQL * Plus连接到数据库服务器吗?您是否正在使用JDBC瘦客户端,如果可以,可以尝试使用胖客户端吗?
乔恩·海勒2014年

是的,我通过SQL * plus连接
Aman Adhikari 2014年

1
我解决了这个问题:)。我删除了ojdbc14.jar文件,改用了ojdbc6.jar,它对我有用。无论如何,感谢您的回答。
Aman Adhikari 2014年

Answers:


152

我删除了ojdbc14.jar文件,改用了ojdbc6.jar,它对我有用


3
尝试从pentaho水壶连接Oracle 12c时遇到相同的问题。删除了ojdbc14.jar,它运行正常!
lourdh

17
至少简要解释为什么它应该起作用将非常方便。
尤里·克拉维斯

8
对我而言,更改为ojdbc6.jar或ojdbc7.jar仍然失败,因为我一直在进行设置:oracle.jdbc.thinLogonCapability"="o3"您不再需要针对oracle 12c进行操作。希望它可以帮助别人
James Tobin

3
在删除ojdbc14.jar并使用ojdbc6.jar之后,效果很好
Sam

1
@YuriyKravets数14ojdbc14.jar的和数6ojdbc6.jar指它们为被写的JDK的版本。如果打开ojdbc14.jar的清单文件,它将显示: Specification-Title:“用于JDK1.4的Oracle JDBC驱动程序类” 同样,ojdbc6.jar支持JDK1.6实现。
Maverick

55

这是我在experts-exchange上找到的一些文字:

错误14575666

在12.1中,SQLNET.ALLOWED_LOGON_VERSION参数的默认值已更新为11。这意味着,除非将SQLNET.ALLOWED_LOGON_VERSION参数设置为旧的默认值8,否则使用11g之前的JDBC瘦驱动程序的数据库客户端无法对12.1数据库服务器进行身份验证。

这将导致使用DBCA的10.2.0.5 Oracle RAC数据库创建失败,并出现ORA-28040:在12.1 Oracle ASM和Oracle Grid Infrastructure环境中没有匹配的身份验证协议错误。

解决方法:在oracle / network / admin / sqlnet.ora文件中设置SQLNET.ALLOWED_LOGON_VERSION = 8。


仅供参考:这对我有用

4
是的,在我的情况下,这解决了问题,但是又发生了另一个:无效的用户名/密码。顺便说一句,我试图从oracle jdeveloper 10连接到oracle数据库12c。所以这就是答案:stackoverflow.com/questions/14476875/… 最后必须:1)将SQLNET.ALLOWED_LOGON_VERSION更改为8 2)将SQLNET.AUTHENTICATION_SERVICES更改为(NONE)3)更改系统设置SEC_CASE_SENSITIVE_LOGON = FALSE 4)更改用户XX由PW识别(由于我们更改了区分大小写,因此现在重新保存密码)
hello_earth

晚了聚会,但我也确认了此修复程序。一世已经设定我的版本= 8,即使我跑JDBC 11 -没有什么比新工作8。
基思

我正在使用远程数据库服务器,我没有访问计算机的权限,我只能使用SQL Developer连接数据库(无错误),但是我的应用程序(部署在Tomcat上)抛出此错误。我已经在本地计算机上更改了设置,但无法使用。我是否需要在服务器计算机上修改设置?
Gunwant

5

我通过使用ojdbc8.jar解决了此问题。Oracle 12c与ojdbc8.jar兼容


5

除了以下内容添加到sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

如果收到“ ORA-01017:无效的用户名/密码;拒绝登录”错误,则需要重新创建密码。


如果收到“ ORA-01017:无效的用户名/密码;拒绝登录”错误,则需要重新创建密码。这是一个救生员!谢谢
Thomas VC


3

我正在使用eclipse,在尝试了所有其他答案后,它对我不起作用。最后,对我有用的ojdb7.jar是将构建路径移到顶部。当多个罐具有冲突的相同类时,会发生这种情况。

  1. 选择项目 Project Explorer
  2. 右键点击 Project -> Build Path -> Configure Build Path
  3. 转到Order and Export标签并选择ojdbc.jar
  4. 单击按钮TOP将其移到顶部


0

我的最初错误是:ORA-28040:没有匹配的身份验证协议异常

我的数据库版本是12.2(Solaris),客户端版本是11.2(Windows)。我在服务器和客户端sqlnet.ora中都添加了以下内容

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8 SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

连接时,我具有无效的用户名和密码,因此我在数据库中重新创建了密码(相同的密码),这解决了我的问题。


0

尽管在大多数情况下,替换ojdbc驱动程序jar将是解决方案,但我的情况有所不同。

如果确定使用的是正确的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。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.