Oracle 低版本客戶端連線 18c 報ORA-28040 和 ORA-01017 錯誤的解決方法
Oracle 11g 的生命週期已經 ,18c 也已經正式釋出,那麼在安裝Oracle 18c 之後,如果已低版本的客戶端來連線18c ,就會報如下兩個錯誤:
ORA-28040: No matching authentication protocol ORA-01017: invalid username/password; logon denied
他們會先後出現,當解決ORA-28040錯誤後,就會出現ORA-01017錯誤。 這裡重現一下錯誤並提供解決方法。
1. 問題重現
資料庫服務端版本:
[oracle@]$ sqlplus / as sysdba SQL*Plus: Release 18.0.0.0.0 - Production on Mon Aug 27 06:42:49 2018 Version 18.3.0.0.0 Copyright (c) 1982, 2018, Oracle. All rights reserved. Connected to: Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production Version 18.3.0.0.0
客戶端11.2.0.4,連線正常:
C:/Users/Dave>sqlplus system/oracle@192.168.56.168:1522/dave SQL*Plus: Release 11.2.0.4.0 Production on Fri Aug 31 09:24:53 2018 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production SQL>
但是11.2.0.1不行:
D:/instantclient_11>sqlplus system/oracle@192.168.56.168:1522/dave SQL*Plus: Release 11.2.0.1.0 Production on 星期五 8月 31 10:51:52 2018 Copyright (c) 1982, 2010, Oracle. All rights reserved. ERROR: ORA-28040: No matching authentication protocol
2. 處理ORA-28040錯誤
根據MOS文件 (ID 755605.1),ORA-28040的錯誤需要在Oracle 使用者(非grid使用者)的sqlnet.ora 檔案中新增:
SQLNET.ALLOWED_LOGON_VERSION=8
或者使用更高版本的客戶端。
但實際上,根據MOS文件(ID 2111876.1), 在Oracle 12c 以後的版本,
SQLNET.ALLOWED_LOGON_VERSION 引數已經棄用了,應該使用以下2個引數代替:
SQLNET.ALLOWED_LOGON_VERSION_SERVER = n
SQLNET.ALLOWED_LOGON_VERSION_CLIENT = n
這裡的n預設為11. 第一個引數是客戶端連線到伺服器的時候啟作用,第二個是做為客戶端去連線其它資料庫的時候啟作用。例如建立db link。
其他可選值如下:
|
|
---|---|
12a | for Oracle Database 12c Release 1 (12.1) release 12.1.0.2 or later |
12 | for the critical patch updates CPUOct2012 and later Oracle Database 11g authentication protocols (recommended) |
11 | for Oracle Database 11g authentication protocols (default) |
10 | for Oracle Database 10g authentication protocols |
8 | for Oracle8i authentication protocol |
這裡修改如下:
[oracle@]$ cat sqlnet.ora # sqlnet.ora Network Configuration File: /u01/app/oracle/product/18.3.0/db_1/network/admin/sqlnet.ora # Generated by Oracle configuration tools. NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT) SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8 SQLNET.ALLOWED_LOGON_VERSION_SERVER=8 [oracle@]$
修改後即可生效,在連線報錯如下:
C:/Users/Dave>sqlplus system/oracle@192.168.56.168:1522/dave SQL*Plus: Release 11.2.0.1.0 Production on 星期五 8月 31 14:49:53 2018 Copyright (c) 1982, 2010, Oracle. All rights reserved. ERROR: ORA-01017: invalid username/password; logon denied
3. 處理ORA-01017錯誤
從錯誤提示看是使用者名稱或者密碼錯誤,實際上這裡使用者名稱和密碼沒有問題。 這裡的問題是我們配置的sqlnet對之前已經存在的帳號並沒有生效,他們還保持在之前的相容性。
SQL> set pages 100 SQL> select username,password_versions from dba_users; USERNAME PASSWORD_VERSIONS ------------------------------ ---------------------------------- SYS 11G 12C SYSTEM 11G 12C OUTLN 11G 12C SYS$UMF 11G 12C DBSNMP 11G 12C APPQOSSYS 11G 12C DBSFWUSER 11G 12C GGSYS 11G 12C
這裡的解決方法就是對使用者修改下密碼:
SQL> alter user sys identified by oracle; User altered. SQL> alter user system identified by oracle; User altered.
檢視密碼版本:
SQL> select username,password_versions from dba_users; USERNAME PASSWORD_VERSIONS ------------------------------ ---------------------------------- SYS 11G 12C SYSTEM 10G 11G 12C
注意這裡雖然SYS並沒有改變,但是SYSTEM的版本已經加上了10G。 實際上,現在這2個使用者都可以連線了:
C:/Users/Dave>sqlplus system/oracle@192.168.56.168:1522/dave SQL*Plus: Release 11.2.0.1.0 Production on 星期五 8月 31 14:58:35 2018 Copyright (c) 1982, 2010, Oracle. All rights reserved. 連線到: Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production SQL> C:/Users/Dave>sqlplus sys/oracle@192.168.56.168:1522/dave as sysdba SQL*Plus: Release 11.2.0.1.0 Production on 星期五 8月 31 14:58:54 2018 Copyright (c) 1982, 2010, Oracle. All rights reserved. 連線到: Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production SQL>
據Oracle 官方的說法,這裡是bug,所以如果以低版本的客戶端連線18c,需要特別留意這2個錯誤。
source:
本文連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27036311/viewspace-2672517/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 低版本客戶端連線高版本資料庫報錯ORA-28040、ORA-01017客戶端資料庫
- PLSQL通過Oracle 11g客戶端連線Oracle 12c伺服器錯誤 ORA-28040SQLOracle客戶端伺服器
- 使用11g客戶端或pl/sql developer連線高版本Oracle 19c ORA-28040 ORA-01017客戶端SQLDeveloperOracle
- Go-Micro客戶端請求報500錯誤的解決方法Go客戶端
- 解決navicat遠端連線資料庫報2059錯誤的方法資料庫
- Oracle 19c中連線RMAN客戶端的連線方法Oracle客戶端
- 使用PLSQL客戶端登入ORACLE時報ORA-12502和ORA-12545錯誤的解決方案SQL客戶端Oracle
- 客戶端登入Oracle 12.2伺服器報ORA-01017的解惑客戶端Oracle伺服器
- SQLyog連線MySQL8.0報2058錯誤的完美解決方法MySql
- Oracle建立dblink報錯:ORA-01017、ORA-02063解決Oracle
- 資料庫連線錯誤的原因及解決方法資料庫
- impala客戶端連線客戶端
- navicat連線MySQL8.0.11報2059錯誤的解決方案MySql
- Java 客戶端 Jedis和JedisPool 連線池Java客戶端
- Oracle 客戶端生成AWR方法Oracle客戶端
- ORACLE匯入遇到ORACLE錯誤959解決方法Oracle
- dbfread報錯ValueError錯誤解決方法Error
- 教你解決win10遠端桌面連線出現了內部錯誤的方法Win10
- Win7寬頻連線錯誤678如何解決?Win7系統寬頻連線錯誤678的解決方法Win7
- 錯誤720寬頻連線解決辦法 寬頻連線錯誤程式碼720怎麼解決
- db2 遠端連線伺服器 解決-668 錯誤DB2伺服器
- 以客戶端為中心的錯誤處理客戶端
- mysql、redis 客戶端連線池MySqlRedis客戶端
- Redis客戶端連線數DevOpsRedis客戶端dev
- BlueHost SSH連線常見錯誤和解決方法
- ORACLE RAC中連線ScanIP報錯ORA-12545的問題解決Oracle
- Linux下ODBC連線HGDB報Could not SQLConnect錯解決方法LinuxSQL
- 多年客戶金幣計算錯誤解決過程
- 解決使用jedis連線是報DENIED Redis is running in protected mode錯誤Redis
- TCP協議服務端和客戶端的連線與通訊TCP協議服務端客戶端
- Nginx報504 gateway timeout錯誤的解決方法NginxGateway
- Mysql出現連線錯誤解決辦法MySql
- 客戶端專案管理的挑戰及解決方法客戶端專案管理
- 遠端連線 Mysql 失敗的解決方法MySql
- 0039-如何使用PythonImpyla客戶端連線Hive和ImpalaPython客戶端Hive
- Qt TCP通訊客戶端斷開連線有哪些方法QTTCP客戶端
- win10印表機未能連線錯誤0x00000002的解決方法Win10
- Linux系統中KafKa安裝和使用方法 java客戶端連線kafkaLinuxKafkaJava客戶端