domingo, 26 de abril de 2020

Consultas en SQL: En que orden se ejecutan?

Los motores de bases de datos en realidad no ejecutan consultas literalmente en este orden porque implementan un montón de optimizaciones para hacer que las consultas se ejecuten más rápido. 

El motor de base de datos también hace un montón de comprobaciones para asegurarse de que lo que pones en el SELECT y GROUP BY tiene sentido antes de comenzar a ejecutar la consulta, por lo que tiene que mirar la consulta en su conjunto antes de que comience a elaborar un plan de ejecución. 

Nuevamente la pregunta: Las consultas no se ejecutan realmente en este orden. Porque.?

La respuesta es OPTIMIZACIONES.

En la práctica, los motores de bases de datos no ejecutan consultas uniéndose, luego filtrando y luego agrupando, porque implementan un montón de optimizaciones que reordenan las cosas para que la consulta se ejecute más rápido, siempre que reordenar las cosas no cambie los resultados de la consulta. 

Creando orden 

El orden de ejecución de SQL define el orden en que se evalúan las cláusulas de una consulta. 

Algunos de los desafíos de las consultas más comunes con los que se puede encontrar, podrían evitarse fácilmente con una comprensión más clara del orden de ejecución de SQL, a veces llamado el orden de las operaciones.

Recuerde nuevamente, que podrían haber discrepancias entre el orden de las operaciones y el orden obtenido a la hora de generar un EXPLAIN PLAN.

Comprender el orden de las consultas puede ayudarlo a diagnosticar: 
1. por qué una consulta no se ejecutará, e
2. incluso con más frecuencia lo ayudará a optimizar sus consultas para que se ejecuten más rápido. 
En el mundo moderno, los planificadores de consultas SQL pueden hacer todo tipo de trucos para hacer que las consultas se ejecuten de manera más eficiente, pero siempre llegan a la misma respuesta final, una consulta se ejecuta por el orden estándar de ejecución. 

Este orden es:



Inicio talleres mes de mayo 2020: Administración de base de datos Oracle y Seguridad

Talleres abiertos para iniciar en el mes de mayo del 2020
No te pierdas esta oportunidad de ampliar tus conocimientos a nivel de seguridad y Administración de Base de Datos.

PROMO: Matriculando ambos talleres, te ahorras $75,00 USA
o sea costo por ambos talleres $275,00

Recomendables para Desarrolladores, DBA's, Personal de Seguridad Informática y Auditores

Inicio: 06 de mayo 2020, Horario Miércoles y Jueves de las 8:00PM-10:00PM GMT-6
Administración de Seguridad en una Base de Datos Oracle


Horas: 12 horas / 6 sesiones de 2 horas
Qué comprenderás.?
Gestión de Usuarios
Administración de Privilegios a nivel de Sistema y Objetos
Disociación de Datos ( Encriptación de datos a nivel de almacenamiento y a nivel lógico )
Manejo de Perfiles
Aplicación y gestión de DBSAT ( Oracle Database Security Assessment Tool )
Aplicación de CPUs / PSU
Hacking Ético para DBAs.
Costo del Taller: $175,00  USA + IVA 13%.
Cupo Limitado.
Impartido en modalidad virtual con grabación de la sesión y entrega del video y solo audio
VM en Linux para prácticas
Aplicado a 12c/18c/19c
+Info: ronald.vargas.quesada@gmail.com

Administración de Base de Datos Oracle 12c/19c

Inicio: 09 de mayo 2020, Horario Sábados de las 8:00PM-11:00PM GMT-6
Horas: 18 horas / 6 sesiones de 3 horas
1. Explorando la arquitectura de la base de datos
2. Administración de instancias
3. Creación de PDBs
4. Aspectos de configuracion de red
5. Administración básica en creación y otorgamiento de privilegios de usuarios
6. Creación y Administración de Tablespaces
7. Administración de Espacio
8. Administración de datos de UNDO y nivel transaccional REDOLOGS
9. Creación de respaldos y recuperación con Oracle Data Pump
10. Aplicación de PSU, CPU y RU
Impartido en modalidad virtual con grabación de la sesión y entrega del video y solo audio
VM en Linux para prácticas
Aplicado a 12c/18c/19c
Costo del Taller: $175,00 USA + IVA 13%.

Métodos de pago: Transferencia bancaria para residentes en el territorio de Costa Rica y mediante PayPal para participantes del resto de la región Latinoamericana.


+Info: ronald.vargas.quesada@gmail.com

domingo, 19 de abril de 2020

Diálogos de Derecho Digital: Resiliencia Digital en Tiempos de Covid-19

Roberto Lemaître Picado nos invita para el día de mañana lunes 20 de abril a las 5:00 pm hora de Costa Rica, en la 3a edición de "Diálogos de Derecho Digital" organizado por la Academia Mexicana de Derecho Informático, A.C. en su participación sobre tema de la "Resiliencia Digital en Tiempos de Covid-19". Sintonízanos en https://linkr.in/AMDImx


miércoles, 15 de abril de 2020

Oracle Critical Patch Update for April 2020


April 14, 2020
Oracle Critical Patch Update for April 2020

Dear Oracle Customer,

The Critical Patch Update for April 2020 was released on April 14th, 2020.
Oracle strongly recommends applying the patches as soon as possible.

If you are new to this process, please review Oracle's Security Fixing Policies and the Critical Patch Update Advisory. After reviewing these resources, if you are unable to determine if you require a software update, or how to apply it, please contact Oracle Support.

The Critical Patch Update Advisory is the starting point for relevant information.
It includes the list of products affected, pointers to obtain the patches, a summary of the security vulnerabilities for each product suite, and links to other important documents. Supported products that are not listed in the "Affected Products and Components" section of the advisory do not require new patches to be applied.

Also, it is essential to review the Critical Patch Update supporting documentation referenced in the Advisory before applying patches, as this is where you can find important pertinent information.

Critical Patch Update Advisories are available at the following location:

Oracle Technology Network: https://www.oracle.com/security-alerts/

Oracle Cloud Customers should review:
https://www.oracle.com/security-alerts/#cloud

The Critical Patch Update Advisory for April 2020 is available at the following location:

Oracle Technology Network:
https://www.oracle.com/security-alerts/cpuapr2020.html

Important information can also be found at:
https://blogs.oracle.com/security/

Oracle's Security Fixing Policies are available at the following location:

https://www.oracle.com/corporate/security-practices/assurance/vulnerability/security-fixing.html

The next four dates for Critical Patch Updates are:

July 14, 2020
October 20, 2020
January 19, 2021
April 20, 2021

sábado, 11 de abril de 2020

Porque en estos momentos, es bueno un poco de buena vibra y esperanza


Filarmonica de Costa Rica Somos una orquesta de 5 millones de costarricenses que separados somos más fuertes, porque mañana estaremos más unidos que nunca. Ya tendremos tiempo para abrazarnos y recuperar los Momentos que estuvimos distanciados. Pero hoy, cuidémonos desde casa para que mañana no falte ninguno. Quédate en casa, en armonía con nuestro país, sonamos mejor. Por tus hijos, tus abuelos, tus amigos, tus nietos, por vos. Nuestro Mayor legado será recordar que una vez, nos distanciamos para volver a estar juntos.

viernes, 10 de abril de 2020

Oracle Database 20c en Always Free Services: Nuevas características Mejoras SET y Multi SET


La versión de base de datos Oracle 20c, presenta el nuevo operador EXCEPT/EXCEPT ALL

EXCEPT es un estándar ANSI.

Oracle 20c agrega soporte para la opción "ALL" para operadores de conjuntos INTERSECT y MINUS

EXCEPT el operador del conjunto elimina las filas del primer conjunto que también aparecen en el segundo conjunto –con eliminación duplicada– sinónimo de MINUS y tiene exactamente la misma semántica

EXCEPT ALL devuelve filas presentes en el primer conjunto pero no en el segundo. –Puede haber duplicados en el resultado final.

Veamos su funcionamiento, a partir de la creación de un par de tablas con algunos pocos registros.

[oracle@oracledbacr ~]$ sqlplus aprendizaje/ORacle_20_21@lab2

SQL*Plus: Release 20.0.0.0.0 - Production on Sat Apr 11 00:48:42 2020
Version 20.2.0.0.0

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

Last Successful login time: Fri Apr 10 2020 23:51:24 +00:00

Connected to:
Oracle Database 20c EE Extreme Perf Release 20.0.0.0.0 - Production
Version 20.2.0.0.0

SQL> show user
USER is "APRENDIZAJE"

SQL> connect system/ORacle_20_21@lab2;
Connected.

SQL>  create table t1( x number, y number);

Table created.

SQL> insert into t1 values (&v_x, &v_y);
Enter value for v_x: 1
Enter value for v_y: 2
old   1: insert into t1 values (&v_x, &v_y)
new   1: insert into t1 values (1, 2)

1 row created.

SQL> /
Enter value for v_x: 3
Enter value for v_y: NULL
old   1: insert into t1 values (&v_x, &v_y)
new   1: insert into t1 values (3, NULL)

1 row created.

SQL> /
Enter value for v_x: NULL
Enter value for v_y: 4
old   1: insert into t1 values (&v_x, &v_y)
new   1: insert into t1 values (NULL, 4)

1 row created.

SQL> /
Enter value for v_x: NULL
Enter value for v_y: ^C

SQL> select * from t1;

         X          Y
---------- ----------
         1          2
         3
                    4

SQL> insert into t1 values (&v_x, &v_y);
Enter value for v_x: 3
Enter value for v_y: 3
old   1: insert into t1 values (&v_x, &v_y)
new   1: insert into t1 values (3, 3)

1 row created.

SQL> /
Enter value for v_x: 5
Enter value for v_y: 5
old   1: insert into t1 values (&v_x, &v_y)
new   1: insert into t1 values (5, 5)

1 row created.

SQL> /
Enter value for v_x: NULL
Enter value for v_y: 5
old   1: insert into t1 values (&v_x, &v_y)
new   1: insert into t1 values (NULL, 5)

1 row created.

SQL> commit;

Commit complete.

SQL> select * from t1;

         X          Y
---------- ----------
         1          2
         3
                    4
         3          3
         5          5
                    5

6 rows selected.

SQL> create table t2( x number, y number);

Table created.

SQL> insert into t2  values (&v_x, &v_y);
Enter value for v_x: 3
Enter value for v_y: 3
old   1: insert into t2  values (&v_x, &v_y)
new   1: insert into t2  values (3, 3)

1 row created.

SQL> /
Enter value for v_x: 3
Enter value for v_y: 3
old   1: insert into t2  values (&v_x, &v_y)
new   1: insert into t2  values (3, 3)

1 row created.

SQL> /
Enter value for v_x: 4
Enter value for v_y: 4
old   1: insert into t2  values (&v_x, &v_y)
new   1: insert into t2  values (4, 4)

1 row created.

SQL> /
Enter value for v_x: 5
Enter value for v_y: 5
old   1: insert into t2  values (&v_x, &v_y)
new   1: insert into t2  values (5, 5)

1 row created.

SQL> /
Enter value for v_x: NULL
Enter value for v_y: 4
old   1: insert into t2  values (&v_x, &v_y)
new   1: insert into t2  values (NULL, 4)

1 row created.

SQL> commit;

Commit complete.

SQL> select * from t1;

         X          Y
---------- ----------
         1          2
         3
                    4
         3          3
         5          5
                    5

6 rows selected.

SQL> select * from t2;

         X          Y
---------- ----------
         3          3
         3          3
         4          4
         5          5
                    4


SQL> select x from t1
  2  except
  3  select x from t2;

         X
----------
         1

SQL> select y from t1
  2  except
  3  select y from t2;

         Y
----------
         2

SQL> set null 'NULL'

SQL> select y from t1
  2  except
  3  select y from t2;

         Y
----------
         2
NULL

SQL> select x from t1
  2  except all
  3  select x from t2;

         X
----------
         1
NULL

SQL> select y from t1
  2  except all
  3  select y from t2;

         Y
----------
         2
         5
NULL

SQL>

Oracle Database 20c- En ambiente "Always Free Services", primeras inexperiencias

Bueno, bien claro lo dice la nota introductoria, esta versión no debe ser puesta en ambiente productivos.

A partir de la disponibilidad para hacer despliegue en la plataforma de "Always Free Services" de Oracle, de la nueva versión de base de datos Oracle 20c, he empezado a tener las primeras desaventuras
Mi laboratorio inicia con la creación de una VM en el área de Hardware dedicado, VM y Exadata del servicio Cloud de Oracle.


El despliegue del servicio, fue muy rápido para tratarse de una plataforma gratuita.
El tema de conexión vía PUTTY, no tuve ningún inconveniente en especial.

Como cualquier servicio de Oracle Cloud, es necesario conectarse con el usuario OPC, para luego hacer un sudo al usuario "root" y cambiar la contraseña del usuario "oracle".

Hasta aquí nada especial. Verificamos y tenemos configurado de antemano ( de facto ), las variables de ambiente de Oracle.

Reviso el estado del servicio LISTENER y el mismo me presenta la siguiente información:

[oracle@oracledbacr admin]$ lsnrctl status

LSNRCTL for Linux: Version 20.0.0.0.0 - Production on 10-APR-2020 23:40:04

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)
(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 20.0.0.0.0 - Production
Start Date                10-APR-2020 22:42:31
Uptime                    0 days 0 hr. 57 min. 33 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/homes/OraDB20Home1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/oracledbacr/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(
   ORT=5500))(Security=(my_wallet_directory=/u01/app/oracle/homes/OraDB20Home1/admin/DB20c_iad12j/xdb_wallet))
  (Presentation=HTTP)(Session=RAW))
Services Summary...
Service "9d45645c541e0b7fe0530206f40ae9e9.sub04081356520.vncoracledbacr.oraclevcn.com" has 1 instance(s).
  Instance "DB20c", status READY, has 1 handler(s) for this service...
Service "DB20cXDB.sub04081356520.vncoracledbacr.oraclevcn.com" has 1 instance(s).
  Instance "DB20c", status READY, has 1 handler(s) for this service...
Service "DB20c_iad12j.sub04081356520.vncoracledbacr.oraclevcn.com" has 1 instance(s).
  Instance "DB20c", status READY, has 1 handler(s) for this service...
Service "lab2.sub04081356520.vncoracledbacr.oraclevcn.com" has 1 instance(s).
  Instance "DB20c", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@oracledbacr admin]$

Noten que he puesto una ruta de configuración del LISTENER resaltada en negrita, esto es de nuestro interés para más adelante.

Revisando el contenido del archivo "oratab", me muestra la información del servicio DB20c, configurado, apuntando al directorio: "/u01/app/oracle/product/20.0.0/dbhome_1"

Para mí en este momento, me es de nada o muy poca importancia esto, pero luego lo voy a pagar más adelante.

[oracle@oracledbacr admin]$ more /etc/oratab
DB20c:/u01/app/oracle/product/20.0.0/dbhome_1:Y
[oracle@oracledbacr admin]$ . oraenv
ORACLE_SID = [DB20c] ? DB20c
The Oracle base remains unchanged with value /u01/app/oracle

Verifico las variables de ambiente configuradas en el sistema, por curiosidad nada más.

[oracle@oracledbacr admin]$ env|grep ORACLE
ORACLE_UNQNAME=DB20c_iad12j
ORACLE_SID=DB20c
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/20.0.0/dbhome_1

Casi siempre me conecto como SYSDBA para verificar que realmente la instancia del contenedor esta arriba y los servicios acoplados disponibles para ser utilizados.

[oracle@oracledbacr admin]$ sqlplus /nolog

SQL*Plus: Release 20.0.0.0.0 - Production on Fri Apr 10 23:41:22 2020
Version 20.2.0.0.0

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

SQL> connect / as sysdba
Connected.
SQL> desc v$version
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------
 BANNER                                             VARCHAR2(80)
 BANNER_FULL                                        VARCHAR2(160)
 BANNER_LEGACY                                      VARCHAR2(80)
 CON_ID                                             NUMBER

SQL> select BANNER_FULL from v$version;

BANNER_FULL
--------------------------------------------------------------------
Oracle Database 20c EE Extreme Perf Release 20.0.0.0.0 - Production
Version 20.2.0.0.0

SQL> col name format a30

SQL> select con_id, name, open_mode from v$pdbs;

    CON_ID NAME                           OPEN_MODE
---------- ------------------------------ ----------
         2 PDB$SEED                       READ ONLY
         3 LAB2                           READ WRITE

Como observan, no hay nada especial, todo parece estar bien.

Me traslado en el sistema operativo al directorio "network/admin", en la ruta del $ORACLE_HOME, para crear el archivo de configuración de conexiones de la base de datos.

[oracle@oracledbacr admin]$ more tnsnames.ora
lab2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = lab2.sub04081356520.vncoracledbacr.oraclevcn.com)
    )
)

cdb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = DB20c_iad12j.sub04081356520.vncoracledbacr.oraclevcn.com)
    )
)

Este archivo lo he creado a partir de la información que me muestra el servicio LISTENER que se encuentra arriba.

Procedo a realizar la prueba de conexión a las cadenas definidas de servicio.

[oracle@oracledbacr admin]$ tnsping cdb

TNS Ping Utility for Linux: Version 20.0.0.0.0 - Production on 10-APR-2020 23:06:38

Copyright (c) 1997, 2019, Oracle.  All rights reserved.

Used parameter files:
/u01/app/oracle/homes/OraDB20Home1/network/admin/sqlnet.ora


TNS-03505: Failed to resolve name

Demonios algo no esta funcionando correctamente. Reviso una y otra vez la configuración del tnsnames.ora y no veo nada malo en el archivo. Que cambió en la sintaxis de configuración del tnsnames, me pregunto.?

Claro, una de las nuevas características de Oracle Database 20c, en el proceso de instalación; todos los Oracle Homes a partir de esta versión, son en modo READ-ONLY de facto.

Vuelvo a revisar el contenido del servicio LISTENER y recién percato, que la ruta de configuración del archivo del servicio, esta en una ruta distinta a la del $ORACLE_HOME

Vaya sorpresa, lo que hace la costumbre. Por eso es tan importante el proceso de estudio, las cosas cambian y en Oracle, con cada versión, hay cambios significativos, que nos pueden volver locos.

Me voy al directorio indicado en el estado del LISTENER y EUREKA, me encuentro con los archivos de configuración de listener, el sqlnet y el tnsnames. En la ruta del $ORACLE_HOME/network/admin, el directorio estaba vacío.

[oracle@oracledbacr admin]$ pwd
/u01/app/oracle/homes/OraDB20Home1/network/admin
[oracle@oracledbacr admin]$ ls -la
total 20
drwxr-xr-x. 2 oracle oinstall 4096 Apr 10 23:37 .
drwxr-xr-x. 5 oracle oinstall 4096 Jan 29 09:21 ..
-rw-r-----  1 oracle oinstall  378 Apr  9 23:18 listener.ora
-rw-r-----  1 oracle oinstall  666 Apr  9 23:22 sqlnet.ora
-rw-r-----  1 oracle oinstall  809 Apr 10 23:37 tnsnames.ora

Vuelvo a crear las cadenas de conexión con la información que me muestra en la primera entrada el tnsnames.

[oracle@oracledbacr admin]$ more tnsnames.ora

LISTENER_DB20C=(ADDRESS=(PROTOCOL=TCP)(HOST=oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521))
DB20c_iad12j=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521))
(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME
=DB20c_iad12j.sub04081356520.vncoracledbacr.oraclevcn.com)))

CDB=
        (DESCRIPTION=
                (ADDRESS=(PROTOCOL=TCP)(HOST=oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521))
                (CONNECT_DATA=(SERVER=DEDICATED)
                (SERVICE_NAME=DB20c_iad12j.sub04081356520.vncoracledbacr.oraclevcn.com)
                )
        )
LAB2=
        (DESCRIPTION=
                (ADDRESS=(PROTOCOL=TCP)(HOST=oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521))
                (CONNECT_DATA=(SERVER=DEDICATED)
                (SERVICE_NAME=lab2.sub04081356520.vncoracledbacr.oraclevcn.com)
                )
        )

Ahora si, vamos a probar la conexión a los servicios y veremos que pasa.

[oracle@oracledbacr admin]$ tnsping cdb

TNS Ping Utility for Linux: Version 20.0.0.0.0 - Production on 10-APR-2020 23:46:20

Copyright (c) 1997, 2019, Oracle.  All rights reserved.

Used parameter files:
/u01/app/oracle/homes/OraDB20Home1/network/admin/sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521)) 
(CONNECT_DATA=(SERVER=DEDICATED) (SERVICE_NAME=DB20c_iad12j.sub04081356520.vncoracledbacr.oraclevcn.com)))
OK (0 msec)
[oracle@oracledbacr admin]$ tnsping lab2

TNS Ping Utility for Linux: Version 20.0.0.0.0 - Production on 10-APR-2020 23:46:25

Copyright (c) 1997, 2019, Oracle.  All rights reserved.

Used parameter files:
/u01/app/oracle/homes/OraDB20Home1/network/admin/sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=oracledbacr.sub04081356520.vncoracledbacr.oraclevcn.com)(PORT=1521)) 
(CONNECT_DATA=(SERVER=DEDICATED) (SERVICE_NAME=lab2.sub04081356520.vncoracledbacr.oraclevcn.com)))
OK (0 msec)

Listo, hemos superado el primer problema encontrado.

Vamos ahora con la conexión de forma directa a los servicios con la herramienta SQL*Plus.

Si SQL*Plus, aun existe en esta versión, a pesar de los rumores de su desaparición.

[oracle@oracledbacr admin]$ sqlplus /nolog

SQL*Plus: Release 20.0.0.0.0 - Production on Fri Apr 10 23:41:22 2020
Version 20.2.0.0.0

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

SQL> connect / as sysdba
Connected.
SQL> desc v$version
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------
 BANNER                                             VARCHAR2(80)
 BANNER_FULL                                        VARCHAR2(160)
 BANNER_LEGACY                                      VARCHAR2(80)
 CON_ID                                             NUMBER

SQL> select BANNER_FULL from v$version;

BANNER_FULL
--------------------------------------------------------------------
Oracle Database 20c EE Extreme Perf Release 20.0.0.0.0 - Production
Version 20.2.0.0.0

SQL> col name format a30

SQL> select con_id, name, open_mode from v$pdbs;

    CON_ID NAME                           OPEN_MODE
---------- ------------------------------ ----------
         2 PDB$SEED                       READ ONLY
         3 LAB2                           READ WRITE

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 LAB2                           READ WRITE NO
SQL>


Como ven, tenemos el servicio LAB2 que es una instancia de base de datos acoplada o PDB (Pluggable Database), la cuál quiero utilizar para realizar algunas pruebas.

Así que vamos a crear un vulgar y simple usuario, como lo hemos hecho en los últimos 8 años en una base de datos de CONTENEDOR de Oracle.


SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 LAB2                           READ WRITE NO

SQL> alter session set container=LAB2;
Session altered.

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
DB20c

SQL> create user aprendizaje identified by oracle;
create user aprendizaje identified by oracle
*
ERROR at line 1:
ORA-28003: password verification for the specified password failed
ORA-20000: password length less than 9 characters

SQL> create user aprendizaje identified by Oracle$2020;
create user aprendizaje identified by Oracle$2020
*
ERROR at line 1:
ORA-28003: password verification for the specified password failed
ORA-20000: password must contain 2 or more uppercase characters

SQL> create user aprendizaje identified by ORacle;
create user aprendizaje identified by ORacle
*
ERROR at line 1:
ORA-28003: password verification for the specified password failed
ORA-20000: password length less than 9 characters

SQL> create user aprendizaje identified by ORacle$20_20;
User created.

Como observan, tuvimos algunos inconvenientes para la definición de la contraseña del usuario. El PROFILE de facto y las reglas establecidas para control de contraseñas, pide más de lo que estamos acostumbrados a configurar para un ambiente de pruebas.

Sigamos y brindemos algunos privilegios a nivel de sistema, para poder crear tablas y conectarnos a la base de datos con nuestro usuario nuevo "APRENDIZAJE".

SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS

SQL> create tablespace TBS_DATA;
Tablespace created.

SQL> alter user aprendizaje quota unlimited on TBS_DATA;
User altered.

SQL> grant create table to aprendizaje;
Grant succeeded.

SQL> grant create session to aprendizaje;

Grant succeeded.

Todo listo entonces, vamos a conectarnos a la instancia PDB.

[oracle@oracledbacr admin]$ sqlplus aprendizaje/ORacle$20_20@lab2

SQL*Plus: Release 20.0.0.0.0 - Production on Fri Apr 10 23:47:35 2020
Version 20.2.0.0.0

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

ERROR:
ORA-01017: invalid username/password; logon denied


Enter user-name: ^C

Diablos, por las barbas de mercurio, que esto. me da error de clave o usuario inválido al conectarme y si lo hago con el usuario SYSTEM, también.

[oracle@oracledbacr admin]$ sqlplus system/ORacle$20_20@lab2

SQL*Plus: Release 20.0.0.0.0 - Production on Fri Apr 10 23:48:32 2020
Version 20.2.0.0.0

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

ERROR:
ORA-01017: invalid username/password; logon denied


Enter user-name: ^C

Algo hice mal, puede ser que escribí mal la contraseña. Voy a cambiarla y probar nuevamente la conexión.

[oracle@oracledbacr admin]$ sqlplus /nolog

SQL*Plus: Release 20.0.0.0.0 - Production on Fri Apr 10 23:48:41 2020
Version 20.2.0.0.0

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

SQL> connect / as sysdba
Connected.
SQL> alter user system identified by ORacle$20_20;
alter user system identified by ORacle$20_20
*
ERROR at line 1:
ORA-28007: the password cannot be reused
Disconnected from Oracle Database 20c EE Extreme Perf Release 20.0.0.0.0 - Production
Version 20.2.0.0.0

Demonios, a la hora de querer cambiar la contraseña, me dice que esa contraseña no puede ser reutilizada.

Entonces la contraseña esta bien. Debo estarme volviendo loco. Probemos nuevamente.

[oracle@oracledbacr admin]$ sqlplus system/ORacle$20_20@cdb

SQL*Plus: Release 20.0.0.0.0 - Production on Fri Apr 10 23:49:20 2020
Version 20.2.0.0.0

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

ERROR:
ORA-01017: invalid username/password; logon denied

Nada, no tiene sentido, será que ...
Algo me acuerdo de haber leído por ahí, sobre una dependencia de asignar claves a usuarios dentro del contexto del Contenedor o del PDB.

Voy a probar cambiando la clave a SYSTEM y agregando ahora la cláusula que sea para el contenedor y todos los PDBs creados en el contenedor.

[oracle@oracledbacr admin]$ sqlplus /nolog

SQL*Plus: Release 20.0.0.0.0 - Production on Fri Apr 10 23:49:36 2020
Version 20.2.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
SQL> connect / as sysdba
Connected.

SQL> alter user system identified by ORacle_20_21 container=all;
User altered.

Voy a probar inicialmente que pueda conectar al contenedor con la clave.

SQL> connect system/ORacle_20_21
Connected.
SQL> show user
USER is "SYSTEM"

Ahora pruebo utilizando la cadena de conexión definida en el tnsnames.

SQL> connect system/ORacle_20_21@lab2
Connected.
SQL> show user
USER is "SYSTEM"

Listo, parece que ahora si esta funcionando, vamos con el usuario de pruebas. Cambiemos ahora que estamos dentro del PDB, la contraseña al usuario APRENDIZAJE.

SQL> alter user aprendizaje identified by ORacle_20_21;

User altered.

SQL> exit
Disconnected from Oracle Database 20c EE Extreme Perf Release 20.0.0.0.0 - Production
Version 20.2.0.0.0

Vamos a probar la conexión a la base de datos a ver que sucede.

[oracle@oracledbacr admin]$ sqlplus aprendizaje/ORacle_20_21@lab2

SQL*Plus: Release 20.0.0.0.0 - Production on Fri Apr 10 23:51:24 2020
Version 20.2.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.
Connected to:
Oracle Database 20c EE Extreme Perf Release 20.0.0.0.0 - Production
Version 20.2.0.0.0

SQL> show user
USER is "APRENDIZAJE"
SQL> show con_id

CON_ID
------------------------------
3
SQL>

Listo, el primer escollo ha sido superado. Ahora ya puedo hacer mis primeras pruebas con la nueva versión de base de datos.

No olvides que también estamos en Facebook/oracledbacr

Convertir una hoja de cálculo en una aplicación APEX- Mónica Godoy

@OracleAcademy Virtual Student Day Latinoamérica

Conoce más de Oracle APEX en este evento especial realizado por Oracle Academy para los estudiantes y profesores de Ciencias de la Computación de la región.

Youtube: https://www.youtube.com/channel/UCEpIXFjcQIztReQNLymvYrQ
Canal Oracle Application Express




jueves, 9 de abril de 2020

Con que estándares de seguridad cuenta la base de datos ADB de Oracle?

Gotitas de saber

Los datos almacenados en una ADB cumplen con las regulaciones para HIPAA?

La ADB cumple con lo necesario para almacenar datos tipo HIPAA (La Ley de Responsabilidad y Portabilidad del Seguro de Salud) a través de una certificación adicional preparada de acuerdo con AICPA SSAE 18, AT-C secciones 205 y 315.

SSAE se utiliza para regular la forma en que las empresas realizan negocios, y más específicamente define cómo las empresas informan sobre los controles de cumplimiento.

Estos informes se denominan SOC 1, SOC 2 y SOC 3.

Para que una empresa pueda garantizar este cumplimiento, debe atender estos seis pasos:
  • La empresa primero debe revisar los informes, incluidas las comunicaciones financieras y externas.
  • La segunda paso para obtener la certificación es mantener una comunicación constante con los proveedores externos.
  • El tercero es que una empresa debe visitar regularmente a estos proveedores externos para asegurarse de que todo funcione sin problemas.
  • El cuarto, la empresa debe realizar una auditoría de control interno para los proveedores externos.
  • El quinto, la compañía debe analizar a fondo las revisiones SOC.
  • El sexto, la compañía debe supervisar las quejas y otras comunicaciones externas de sus proveedores externos.
ADB cumple con SOC?
Si. La base de datos autónoma ha logrado el cumplimiento de SOC 1 y SOC 2.
  • SOC (Centro de Operaciones de Seguridad, es una central de seguridad informática que previene, monitorea y controla la seguridad en las redes y en Internet) se creó debido al aumento de la computación en la nube y la subcontratación de funciones a las organizaciones de servicios.
  • SOC 1 es un informe de control para organizaciones de servicios, que se refiere al control interno sobre los informes financieros.
  • SOC 2 es un informe que utiliza los principios existentes de SysTrust y WebTrust. Este informe evalúa el sistema de información empresarial relacionado con la seguridad, la disponibilidad, la integridad del procesamiento, la confidencialidad y la privacidad.
Los problemas de responsabilidad causaron una demanda en el aseguramiento de la confidencialidad y privacidad de la información procesada en la nube, de ahí esta certificación.

¿Oracle Autonomous Database tiene la certificación ISO27001 y otras?
Si. La base de datos autónoma cumple con las normas ISO27001, ISO27017, ISO27018.
  • ISO 27001 es la norma internacional emitida por la Organización Internacional de Normalización (ISO) y que describe cómo gestionar la seguridad de la información en una empresa.
  • ISO 27017 se trata de controles de seguridad de la información para servicios en la nube (genéricos), e 
  • ISO 27018 está específicamente desarrollado para proteger la privacidad en la nube.
Si deseas ampliar esta información, visita el sitio de oracle.com

Todos los Sábados a las 8:00PM

Optimismo para una vida Mejor

Optimismo para una vida Mejor
Noticias buenas que comentar