sábado, 26 de noviembre de 2016

Oracle Database 12c R2: ALLOWED_LOGON_VERSION_SERVER conexión con clientes de 10g o superior

Tengan en cuenta que a partir del Release 2 de Oracle Database 12c, el parámetro ALLOWED_LOGON_VERSION_SERVER tiene como valor numérico predeterminado 12.

Este valor predeterminado corresponde a un modo exclusivo como sigue: SQLNET.ALLOWED_LOGON_VERSION_SERVER = 12

Este cambio en el modo de autenticación predeterminado del servidor hace que el antiguo "O3LOGON Hash" de la contraseña ( referido como la versión de la contraseña 10G ) no sea generado de facto para utilizarse para la autenticación.

En particular, los clientes sin la O5L_NP, modo de autenticación en 12c, pueden obtener el siguiente error al conectarse a la versión de Oracle Database 12c R2 (12.2) o posterior:

ORA-28040 "Sin protocolo de autenticación coincidente."

Para resolver esta situación existen dos formas de hacerlo:
  1. Puedes buscar el PSU al cliente en donde exista para añadir el indicador de capacidad O5L_NP.
  2. Cambiar el valor del parámetro en el archivo SQLNET.ORA a un valor compatible más bajo, para permitir la conexión.
Con respecto al punto 2, es necesario tener en cuenta, que a los usuarios ya previamente creados, deberás actualizar la contraseña, para activar el modo de autenticación  O3LOGON.

Veamos una ilustración de cada caso:

Verificamos inicialmente la información del tipo de autentificación registrada para un usuario particular. En este caso utilicemos el usuario de pruebas HR.


SQL> connect sys@pdb1 as sysdba
Enter password:
Connected.
SQL> SELECT PASSWORD_VERSIONS FROM DBA_USERS WHERE USERNAME='HR';

PASSWORD_VER
------------
11G 12C

Como pueden observar, el método registrado para este usuario reconoce sólo los métodos de autentificación para 11g y 12c, ya que no se han hecho cambios en el valor del archivo SQLNET.ORA.

Vamos a crear un nuevo usuario, para verificar este comportamiento.

SQL> create user test identified by test;

User created.

SQL> SELECT PASSWORD_VERSIONS FROM DBA_USERS WHERE USERNAME='TEST';

PASSWORD_VER
------------
11G 12C

SQL> grant create session to test;

Grant succeeded.

SQL> connect test@pdb1
Enter password:
Connected.

SQL> exit

Ahora hagamos los cambios en la configuración del archivo de protocolo de comunicación.

[oracle@lab3 ~]$ cd $ORACLE_HOME
[oracle@lab3 dbhome_1]$ cd network
[oracle@lab3 network]$ cd admin
[oracle@lab3 admin]$ ls -la
total 28
drwxr-xr-x.  3 oracle oinstall 4096 Nov 12 12:06 .
drwxr-xr-x. 10 oracle oinstall 4096 Sep 23 13:48 ..
-rw-r--r--.  1 oracle oinstall  332 Sep 23 13:58 listener.ora
drwxr-xr-x.  2 oracle oinstall 4096 Sep 23 13:40 samples
-rw-r--r--.  1 oracle oinstall 1441 Aug 28  2015 shrept.lst
-rw-r--r--.  1 oracle oinstall  195 Sep 23 13:58 sqlnet.ora
-rw-r-----.  1 oracle oinstall 1061 Nov 12 12:06 tnsnames.ora

[oracle@lab3 admin]$ more sqlnet.ora
# sqlnet.ora Network Configuration File: /opt/app/oracle/product/12.2.0/dbhome_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

[oracle@lab3 admin]$ vi sqlnet.ora

[oracle@lab3 admin]$ more sqlnet.ora
# sqlnet.ora Network Configuration File: /opt/app/oracle/product/12.2.0/dbhome_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.ALLOWED_LOGON_VERSION_SERVER=10

En cursiva y negrita, tenemos la nueva línea que hemos agregado al archivo SQLNET.ORA. Ahora vamos a validar el comportamiento de este parámetro, recreado el usuario "test".

[oracle@lab3 admin]$ sqlplus sys@pdb1 as sysdba

SQL*Plus: Release 12.2.0.0.2 Beta on Fri Nov 25 00:17:39 2016

Copyright (c) 1982, 2015, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.0.2 - 64bit Beta
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> SELECT PASSWORD_VERSIONS FROM DBA_USERS WHERE USERNAME='TEST';

PASSWORD_VER
------------
11G 12C

SQL> drop user test;

User dropped.

SQL> create user test identified by test;

User created.

SQL> SELECT PASSWORD_VERSIONS FROM DBA_USERS WHERE USERNAME='TEST';

PASSWORD_VER
------------
10G 11G 12C

Listo ahora pueden ver como registra las opciones de autentificación O3LOGON y OL5_NP para nuestro usuario de pruebas.

Vamos a remover la línea de configuración del archivo SQLNET.ORA y actualizamos el password de nuestro usuario "test", para ver que sucede.

[oracle@lab3 ~]$ cd /opt/app/oracle/product/12.2.0/dbhome_1/network/admin/
[oracle@lab3 admin]$ ls -la
total 28
drwxr-xr-x.  3 oracle oinstall 4096 Nov 25 06:37 .
drwxr-xr-x. 10 oracle oinstall 4096 Sep 23 13:48 ..
-rw-r--r--.  1 oracle oinstall  332 Sep 23 13:58 listener.ora
drwxr-xr-x.  2 oracle oinstall 4096 Sep 23 13:40 samples
-rw-r--r--.  1 oracle oinstall 1441 Aug 28  2015 shrept.lst
-rw-r--r--.  1 oracle oinstall  234 Nov 25 03:10 sqlnet.ora
-rw-r-----.  1 oracle oinstall 1075 Nov 25 06:36 tnsnames.ora

Vamos a hacer los cambios en el archivo de configuración.

[oracle@lab3 admin]$ vi sqlnet.ora
[oracle@lab3 admin]$ more sqlnet.ora
# sqlnet.ora Network Configuration File: /opt/app/oracle/product/12.2.0/dbhome_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
# SQLNET.ALLOWED_LOGON_VERSION_SERVER=10

[oracle@lab3 admin]$ sqlplus sys@pdb1 as sysdba

SQL> SELECT PASSWORD_VERSIONS FROM DBA_USERS WHERE USERNAME='TEST';

PASSWORD_VER
------------
10G 11G 12C

Reasignamos nuevamente la clave de autentificación al usuario y vemos el resultado. Con esto terminamos el tema de manejo de conexiones a la base de datos con sistemas de autentificación distintos a los de facto en 12c.

SQL> alter user test identified by test;

User altered.

SQL> SELECT PASSWORD_VERSIONS FROM DBA_USERS WHERE USERNAME='TEST';

PASSWORD_VER
------------
11G 12C





No hay comentarios:

Publicar un comentario en la entrada

Te agradezco tus comentarios. Te esperamos de vuelta.