【问题标题】:ORA-28040: No matching authentication protocol : Oracle 12c UpgradeORA-28040: 没有匹配的身份验证协议:Oracle 12c 升级
【发布时间】:2015-06-30 14:41:31
【问题描述】:

我们已将 Oracle 数据库从 11g 迁移到 12c。 我们有一个在 Java 1.5 中运行并使用 ojdbc14.jar 的遗留应用程序。

我们的应用程序无法创建与数据库的连接错误提示:

java.sql.SQLException: ORA-28040: No matching authentication protocol

我推荐回答ORA-28040: No matching authentication protocol exception,并尝试将我的ojdbc14.jar升级到ojdbc6.jar。

我现在收到一条不同的错误消息:

  error: OracleCallableStatement is not public in oracle.jdbc.driver; cannot be accessed from outside package
import oracle.jdbc.driver.OracleCallableStatement;
                          ^
error: OracleTypes is not public in oracle.jdbc.driver; cannot be accessed from outside package
            cstmt.registerOutParameter(3,oracle.jdbc.driver.OracleTypes.CURSOR);
                                           ^

Ant 构建文件:

<javac srcdir="${src}" destdir="${classes}" source="1.5" target="1.5">
            <classpath refid="cpath" />
</javac>

不确定我们应该做些什么才能让应用程序正常工作。

【问题讨论】:

    标签: oracle11g struts-1 oracle12c ojdbc java-5


    【解决方案1】:

    我最近在使用 2 个不同的应用程序时遇到了同样的错误:

    1. Tomcat 7 上的 Java 7 应用程序,使用 odbc6.jar 和 Oracle 12 c 数据库。
    2. 带有 Oracle 12 c 数据库的旧版 ASP 应用程序。

    中提到的第二种解决方案 same post you referred to - 很适合我们。

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

    我们与 DBA 合作,在数据库服务器上的 sqlnet.ora 上设置上述选项。这解决了我们的问题。我希望它可以帮助某人。

    【讨论】:

      【解决方案2】:

      我遇到了同样的错误。

      在不删除 ojdbc14.jar 的情况下解决了问题。

      第 1 步:set SQLNET.ALLOWED_LOGON_VERSION=8

      第二步:改变

      Connection conn = (Connection) DriverManager.getConnection("jdbc:oracle:thin:@server:port:sid", "username", "passwrd");
      

      java.sql.Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@@server:port:sid", "username", "passwrd");
      

      它会起作用的!

      【讨论】:

        【解决方案3】:

        Oracle 11 迁移到Oracle 12. 之后 在我的例子中,lib 目录同时具有 OJDBC14.jarOJDBC8.jar删除旧的 OJDBC14.jar 后它对我有用。

        【讨论】:

          【解决方案4】:

          迁移到 ORACLE 12c 后,我在连接数据库时遇到问题。 错误是:java.sql.SQLException:ORA-28040:没有匹配的身份验证协议。 设置了这个参数 SQLNET.ALLOWED_LOGON_VERSION=8 后就解决了。

          非常感谢

          【讨论】:

            【解决方案5】:

            如果您将应用程序迁移到 ojdbc6,一个可能的原因是您的旧类(与旧 ojdbc 版本兼容)可能没有获得类 OracleTypes。最简单的方法是 从 import oracle.jdbc.driver.OracleTypes 更改 import 语句;从出现错误的类中导入 oracle.jdbc.OracleTypes;

            【讨论】:

              【解决方案6】:

              我在 Sqldeveloper(版本 1.5.5)中为所有连接获取 ORA-28040。我设置了 SQLNET.ALLOWED_LOGON_VERSION=8 但错误并没有消失。然后我在工具->首选项->数据库->高级参数下启用了“使用 OCI/Thick 驱动程序”。成功了。

              【讨论】:

                【解决方案7】:

                主要问题是10g的JDBC瘦客户端使用了 SHA-1 认证协议,该协议不允许在 12c,所以它给出了错误。

                在我的 Oracle 中,我找不到 sqlnet.ora 文件,所以我必须使用以下命令创建它:

                vi $ORACLE_HOME/network/admin/sqlnet.ora
                

                我添加了以下内容:

                SQLNET.ALLOWED_LOGON_VERSION=10
                SQLNET.ALLOWED_LOGON_VERSION_CLIENT=10
                SQLNET.ALLOWED_LOGON_VERSION_SERVER=10
                SQLNET.ALLOWED_LOGON_VERSION=8
                SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
                SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
                SQLNET.AUTHENTICATION_SERVICES = (NONE)
                

                所以我不得不停止并启动监听器:

                lsnrctl stop
                lsnrctl start
                

                最后,我重新启动数据库。

                这应该只是一种解决方法

                【讨论】:

                  【解决方案8】:

                  当我们从 11g 迁移到 12c 时出现此错误,我能够通过 tnsping "servername" 获得正确的响应(这是我们需要通过 cmd 检查的第一步)。 在此之后,我们意识到数据库服务器只能处理 64 位请求(在我的情况下,我使用的是 WinSQL,它总是检查 32 位)。 因此,要纠正这个问题,请让您的管理员也为 32 位请求启用服务器,或者您可以转移到对我有用的 SQL 开发人员。

                  【讨论】:

                    猜你喜欢
                    • 2023-03-18
                    • 1970-01-01
                    • 1970-01-01
                    • 2018-02-16
                    • 1970-01-01
                    • 2021-08-29
                    • 2021-01-03
                    • 2016-03-02
                    相关资源
                    最近更新 更多