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 个不同的应用程序时遇到了同样的错误:
- a Java 7 Tomcat 7 上的应用程序使用 odbc6.jar 和 Oracle 12 c 数据库。
- 带有 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.jar
和 OJDBC8.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 为我工作的开发人员。
我们已将 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 个不同的应用程序时遇到了同样的错误:
- a Java 7 Tomcat 7 上的应用程序使用 odbc6.jar 和 Oracle 12 c 数据库。
- 带有 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.jar
和 OJDBC8.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 为我工作的开发人员。