ORA-28040: 没有匹配的身份验证协议:Oracle 12c 升级

ORA-28040: No matching authentication protocol : Oracle 12c Upgrade

我们已将 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>

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

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

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

中提到的第二种解决方案 same post you referred to - 对我们来说效果很好。

Workaround: Set SQLNET.ALLOWED_LOGON_VERSION=8 in the oracle/network/admin/sqlnet.ora file.

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

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

非常感谢

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

我遇到了同样的错误。

Got it resolved by without removing ojdbc14.jar.

第 1 步:set SQLNET.ALLOWED_LOGON_VERSION=8

第 2 步:更改

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

to

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

它会起作用的!

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

我在 Sqldeveloper(版本 1.5.5)中为所有连接获取 ORA-28040。我设置 SQLNET.ALLOWED_LOGON_VERSION=8 但错误并没有消失。然后我在 Tools->Preferences->Database->Advanced Parameters 下启用 "Use OCI/Thick driver"。成功了。

The main problem is that the JDBC thin client of the 10g uses the SHA-1 authentication protocol, this protocol is not allowed in the 12c, so it gives the error.

在我的 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

最后,我重启了数据库。

This should only be a workaround

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