連接數據庫時報錯:ORA-28040:No matching authentication protocol 解決方案


問題說明:

我的電腦配置說明:

Windows7 64的系統,

JDK 1.8.0_251

Oracle 12c 64的客戶端,

PLSQL Developer 12  64的管理工具

在配置本地連接數據庫時出現ORA-28040: No matching authentication protocol  錯誤,這個錯誤的意思是沒有匹配的認證協議;

原因分析:

網上查了主要是說我電腦上orcale的客戶端版本和訪問的oracle服務端的版本不一致,但我連接的是本地數據庫,應該不存在該問題。保險起見,我先在網上找了相關問題的討論,大家提出的常用解決方案是修改$ORACLE_HOME/network/admin/sqlnet.ora文件里的參數配置,對於該方法跟我的問題的適配性,先持懷疑態度吧。

解決方案:

  • 方法一:

方法一的官方解釋是:

This issue is caused by the default setting for allowed logon version in the 12 database.
Note that the SQLNET.ALLOWED_LOGON_VERSION parameter has been deprecated in 12c.
That parameter has been replaced by these:

SQLNET.ALLOWED_LOGON_VERSION_SERVER=n
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=n

The default setting for the new parameters is 11.  Any client that attempts to connect must 
be at version 11 or higher unless these parameters are explicitly set in the server side sqlnet.ora file.

這段話的意思是,(SQLNET.ALLOWED_LOGON_VERSION)參數在12c中已經被棄用了,被另外兩個參數所取代(SQLNET.ALLOWED_LOGON_SERVER,SQLNET.ALLOWED_LOGON_CLIENT)。該參數用來限制可以連接到數據庫服務器上的最小客戶端版本,12c中這兩個新參數的默認值為11,即11g及以上客戶端版本可以連接到數據庫服務器上。

兩個參數區別如下:

SQLNET.ALLOWED_LOGON_VERSION_SERVER:控制可以連接到12c數據庫的客戶端版本(client --->orace 12c db)

SQLNET.ALLOWED_LOGON_VERSION_CLIENT:控制12c數據庫可以連到哪些版本的數據庫(orace 12c db  --->其它版本的oracle db),例如:控制通過DB LINK可連接到哪些版本的oracle庫。

具體解決辦法:

在Oracle用戶下,將%ORACLE_HOME%/network/admin/sqlnet.ora文件(如果沒有sqlnet.ora文件,那么就創建一個)最后添加如下的行:

SQLNET.ALLOWED_LOGON_VERSION_SERVER=8

SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8

重啟應用,報錯仍然存在,這個方法可能對我的問題來說並不適用

 

  •  方法二:

連接數據庫方式不動還是JDBC,然后也不改變sqlnet.ora里的對應的版本配置,復制Oracle路徑下的%ORACLE_HOME%\jdbc\lib下的ojdbc7.jar,添加到tomcat路徑下的%CATALINA_HOME%\lib文件。
說明一下,我電腦上裝的是JDK 8,ojdbc7.jar 是基於JDK 7和JDK 8的驅動,添加時要注意對應的版本 , oracle的jdbc的版本與jdk對應關系可參考另一位博主的文章:https://www.cnblogs.com/zhuitian/p/11581607.html
之后,重啟應用,就不再有報錯了,完美解決!
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM