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

发布时间 2023-07-06 11:26:01作者: 一品堂.技术学习笔记
原文地址:https://www.likecs.com/ask-1465648.html
oracle21c oracle21c
【问题标题】:ORA-28040: No matching authentication protocol exceptionORA-28040: 没有匹配的身份验证协议异常
【发布时间】:2021-08-29 00:07:43
【问题描述】:

我正在尝试将我的 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.ora 文件中添加了以下 sn-p :

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

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

谁能帮我解决这个问题?

【问题讨论】:

    标签: oracle oracle12c


    【解决方案1】:

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

    【讨论】:

    • 在尝试从 pentaho 水壶连接 Oracle 12c 时遇到同样的问题。删除了 ojdbc14.jar 及其完美的工作!
    • 至少简要说明为什么这应该会很方便。
    • 对我来说,更改为 ojdbc6.jar 或 ojdbc7.jar 仍然失败,因为我一直在不断设置:oracle.jdbc.thinLogonCapability"="o3",您不再需要针对 oracle 12c 执行此操作。希望它可以帮助别人
    • 删除 ojdbc14.jar 并使用 ojdbc6.jar 后效果很好
    • @YuriyKravets ojdbc14.jar 中的数字 14  ojdbc6.jar 中的数字 6 b> 指的是为它们编写的 JDK 版本。如果您打开 ojdbc14.jar 的 清单文件,它会显示:Specification-Title: "Oracle JDBC driver classes for use with JDK1.4" 同样,ojdbc6.jar 支持 JDK1 .6 实施。
    【解决方案2】:

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

    错误 14575666

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

    这将导致使用 DBCA 创建 10.2.0.5 Oracle RAC 数据库 失败并出现 ORA-28040: No matching authentication protocol 错误 12.1 Oracle ASM 和 Oracle Grid Infrastructure 环境。

    解决方法:在 oracle/network/admin/sqlnet.ora 文件。

    【讨论】:

    • 仅供参考:这对我有用,不删除 ojdbc14.jar 文件并使用 ojdbc6.jar
    • 是的,在我的情况下,这解决了问题,但发生了另一个问题:用户名/密码无效。顺便说一句,我试图从 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 4) ALTER USER XX IDENTIFIED BY PW (重新保存现在我们更改了区分大小写的密码)
    • 迟到了,但我也确认了这个修复。我必须设置我的版本 = 8,即使我运行的是 JDBC 11——没有比 8 更新的版本。
    • 我正在使用远程数据库服务器,我无法访问机器,我只能使用 SQL Developer 连接到数据库(没有错误),但我的应用程序(部署在 Tomcat 上)抛出此错误。我已更改本地计算机上的设置,但它无法正常工作。我必须修改服务器机器上的设置吗?
    【解决方案3】:

    这除了在sqlnet.ora中添加以下内容

    SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8
    SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8
    

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

    【讨论】:

    • 如果您收到“ORA-01017:用户名/密码无效;登录被拒绝”错误,那么您需要重新创建密码。这是一个救生员!谢谢
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

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

        SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8
        SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8
        

        我还在客户端和服务器中添加了以下内容,这解决了我的问题

        SQLNET.AUTHENTICATION_SERVICES = (NONE)
        

        另见帖子 ORA-28040: No matching authentication protocol

        【讨论】:

          【解决方案7】:

          非常老的问题,但提供了一些可能对其他人有帮助的附加信息。我也遇到了同样的错误,我将 ojdbc14.jar 与 12.1.0.2 Oracle 数据库一起使用。在 Oracle 官方网页上,此信息列出了哪个版本支持哪些数据库驱动程序。 Here is the link 看来,对于 Oracle 12c 和 Java 7 或 8,正确的版本是 ojdbc7.jar。

          在 ojdbc6.jar 中用于 11.2.0.4。

          【讨论】:

            【解决方案8】:

            添加

            SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8
            

            是完美的解决方案 sql.ora 目录 ..\product\12.1.0\dbhome_1\NETWORK\ADMIN

            【讨论】:

              【解决方案9】:

              我的初始错误是:ORA-28040: No matching authentication protocol exception

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

              SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8 SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

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

              【讨论】:

                【解决方案10】:

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

                如果您确定您使用的是正确的 ojdbc 驱动程序。仔细检查您是否真的连接到您认为的数据库。在我的情况下,jdbc 配置(在 Tomcat/conf 中)指向具有不同 Oracle 版本的不同数据库。

                【讨论】:

                  【解决方案11】:

                  只需安装 ojdbc-full,它包含 12.1.0.1 版本。

                  【讨论】: