Flying Feather: Cuando se utiliza una herramienta escrita por otra persona para conectarse a la base de datos, aparece el error ORA-28040. Después de modificarlo de acuerdo con el método en línea, aparece el error de contraseña ORA-01017. Finalmente, fue resuelto por el original. Blogger. Muchas gracias., Sin el permiso del blogger, ¡pero el artículo es muy bueno! ¡Muchos beneficios! ¡estudiar juntos!
2018-08-31 15: 1510696 1 Original Oracle 18c
Enlace a este artículo: https://www.cnblogs.com/scoluo/p/13864672.html
El ciclo de vida de Oracle 11g ha terminado y 18c se ha lanzado oficialmente. Después de instalar Oracle 18c, si un cliente con una versión anterior se conecta a 18c, se informarán los siguientes dos errores:
ORA-28040: No matching authentication protocol
ORA-01017: invalid username/password; logon denied
Aparecerán uno tras otro, y cuando se resuelva el error ORA-28040, aparecerá el error ORA-01017. Aquí para reproducir el error y dar una solución.
1. Reproduce el problema
Versión del servidor de base de datos:
[[email protected] dbs]$ 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
Cliente 11.2.0.4, la conexión es normal:
C:/Users/Dave>sqlplus system/[email protected]: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>
Pero 11.2.0.1 no funciona:
D:/instantclient_11>sqlplus system/[email protected]: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. Manejo de errores ORA-28040
Según el documento MOS (ID 755605.1), el error ORA-28040 debe agregarse en el archivo sqlnet.ora del usuario de Oracle (usuario que no es de la red):
SQLNET.ALLOWED_LOGON_VERSION = 8
o usar una versión superior del cliente.
Pero, de hecho, de acuerdo con el documento MOS (ID 2111876.1), en Oracle 12c y versiones posteriores, el
parámetro SQLNET.ALLOWED_LOGON_VERSION ha quedado obsoleto y los siguientes dos parámetros deben usarse en su lugar:
SQLNET.ALLOWED_LOGON_VERSION_SERVER = n
SQLNET.ALLOWED_LOGON_CLIENT = nVERSION = n
Aquí n tiene el valor predeterminado de 11. El primer parámetro se activa cuando el cliente se conecta al servidor, y el segundo es se activa cuando el cliente se conecta a otras bases de datos. Por ejemplo, cree un enlace de base de datos.
Otros valores opcionales son los siguientes:
12a | para Oracle Database 12c versión 1 (12.1) versión 12.1.0.2 o posterior |
12 | para las actualizaciones de parches críticos CPUOct2012 y protocolos de autenticación Oracle Database 11g posteriores (recomendado) |
11 | para protocolos de autenticación Oracle Database 11g (predeterminado) |
10 | para protocolos de autenticación Oracle Database 10g |
8 | para el protocolo de autenticación Oracle8i |
Modificado aquí como sigue:
[[email protected] admin]$ 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
[[email protected] admin]$
La modificación entrará en vigor y se informará el siguiente error en la conexión:
C:/Users/Dave>sqlplus system/[email protected]: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. Manejo del error ORA-01017
Desde el mensaje de error, el nombre de usuario o la contraseña son incorrectos, de hecho, no hay ningún problema con el nombre de usuario y la contraseña. El problema aquí es que la sqlnet que configuramos no entra en vigencia para las cuentas que ya existían antes, y aún mantienen la compatibilidad anterior.
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
La solución aquí es modificar la contraseña del usuario:
SQL> alter user sys identified by oracle;
User altered.
SQL> alter user system identified by oracle;
User altered.
Ver versión de contraseña:
SQL> select username,password_versions from dba_users;
USERNAME PASSWORD_VERSIONS
------------------------------ ----------------------------------
SYS 11G 12C
SYSTEM 10G 11G 12C
Tenga en cuenta que aunque SYS no ha cambiado, se ha agregado 10G a la versión de SYSTEM. De hecho, ambos usuarios ahora pueden conectarse:
C:/Users/Dave>sqlplus system/[email protected]: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/[email protected]: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>
Según la declaración oficial de Oracle, esto es un error, por lo que si se conecta a 18c con una versión inferior del cliente, debe prestar especial atención a estos dos errores.