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

好久不见. 提交于 2019-11-27 07:07:10

问题


We have migrated our Oracle database to 12c from 11g. We have a legacy application running in Java 1.5 and using ojdbc14.jar.

Our application is not able to create connection to database error saying :

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

I reffered to answer ORA-28040: No matching authentication protocol exception, and tried to upgrade my ojdbc14.jar to ojdbc6.jar.

I now have a different error message saying :

  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 build file :

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

Not sure what exactly we should do to get the application working.


回答1:


I had the same error with 2 different applications recently:

  1. a Java 7 app on Tomcat 7 using odbc6.jar with Oracle 12 c database.
  2. a legacy ASP application with Oracle 12 c database.

The second solution mentioned in the same post you referred to - worked well for us.

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

We worked with our DBAs to set the above option on the sqlnet.ora on the database server. This resolved our issue. I hope it helps someone.




回答2:


I faced the same error.

Got it resolved by without removing ojdbc14.jar.

step 1 : set SQLNET.ALLOWED_LOGON_VERSION=8

Step 2 : change

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");

It will works!




回答3:


After migrating from Oracle 11 to Oracle 12. In my case lib directory had both OJDBC14.jar & OJDBC8.jar. After removing older OJDBC14.jar it worked for me.




回答4:


I had a problem connecting to DB after migration to ORACLE 12c. The error was:java.sql.SQLException: ORA-28040: No matching authentication protocol. After setting this parametar SQLNET.ALLOWED_LOGON_VERSION=8 it was solved.

Thank you very much




回答5:


If you are migrating your application to ojdbc6, one probable reason would be your old classes (compatible to old ojdbc version) might not be getting the class OracleTypes. Easiest way would be changing import statement from import oracle.jdbc.driver.OracleTypes; to import oracle.jdbc.OracleTypes; from the classes where you are getting the error.




回答6:


I was getting ORA-28040 in Sqldeveloper (ver. 1.5.5) for all connections. I set SQLNET.ALLOWED_LOGON_VERSION=8 but the error didn't go away. Then I enabled "Use OCI/Thick driver" under Tools->Preferences->Database->Advanced Parameters. That did the trick.




回答7:


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.

In my Oracle I could not find the sqlnet.ora file so I had to create it with the command:

vi $ORACLE_HOME/network/admin/sqlnet.ora

And I added the following:

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)

So I had to stop and start the listener:

lsnrctl stop
lsnrctl start

Finally, I restart the database.

This should only be a workarround



来源:https://stackoverflow.com/questions/31141392/ora-28040-no-matching-authentication-protocol-oracle-12c-upgrade

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!