ORACLE 12C連線時報ORA28040和ORA01017的錯誤

wzq609發表於2018-01-30

【一】環境說明

1.1 Oracle服務端版本:12.2.0.1
1.2 Oracle客戶端版本:11.2.0.1

【二】問題說明

2.1 客戶端連線服務端的時候報ORA-28040的錯誤。
2.2 客戶端連線的時候報ORA-01017的錯誤。

【三】解決方法

3.1  ORA-28040錯誤的解決方法:
在資料庫伺服器上的oracle/network/admin/sqlnet.ora,增加如下
 然後重啟監聽即可
3.2 客戶端連線的時候報ORA-01017的錯誤的解決方法:
在上一步的基礎上面,修改使用者名稱密碼即可; 

【四】原因分析

4.1 關於ORA-28040的錯誤原因,轉發個連結:http://blog.itpub.net/28612416/viewspace-2138896/
簡單可以理解:sqlnet值沒設定的情況下ORACLE 12C的服務端只執行12C的客戶端進行連線,所以透過11版本的客戶端連線的時候就會報ORA-28040的錯誤。透過增加以上引數就可以讓ORACLE12C的服務端執行較低的客戶端進行連線;

4.2 關於密碼報ORA-01017錯誤的分析如下:
  • 資料庫的密碼是經過加密的,資料庫經過幾個版本的更新每個版本的加密方法其實都是不一樣的。
  • dba_users有儲存一個PASSWORD_VERSIONS的資訊,PASSWORD_VERSIONS的資訊說明資料庫保留密碼解析的版本種類。
  • 使用者登入的時候就會根據Client端的版本判斷用哪種的解析方法進行解密
  • 客戶端的版本和PASSWORD_VERSIONS的版本匹配能解析,否則就解析不了;
4.3 PASSWORD_VERSIONS版本又是怎麼產生的了?
PASSWORD_VERSIONS的生跟上面的sqlnet.ora的一個引數:SQLNET.ALLOWED_LOGON_VERSION_SERVER。SQLNET.ALLOWED_LOGON_VERSION_SERVER設定不同值,就產生對應的password_versions。
所以當SQLNET.ALLOWED_LOGON_VERSION_SERVER=8時,PASSWORD_VERSIONS對應的值就是10G 11G 12C
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8,PASSWORD_VERSIONS對應的值就是11G 12C

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12679300/viewspace-2150667/,如需轉載,請註明出處,否則將追究法律責任。

相關文章