31 julio 2017

Un DBA en la(s) Nube(s)

No es ningún secreto que los datos son el nuevo Rey Midas, una fuente de creación de riqueza a la par con el capital financiero, dicen algunos. Así que es un poco irónico que un grupo de personas que entienden mejor que nadie cómo administrar los datos se sienten cada vez más excluidos del partido.
Los administradores de bases de datos, o DBA, son y serán los expertos responsables del rendimiento y la seguridad de una creciente lista de tipos de base de datos:
  • Nuestras viejas amigas las bases de datos relacionales.
  • Las bases de datos en memoria.
  • Y las nuevas propuestas tecnológicas ya presentes en el mercado las bases de datos No SQL.

Estas bases de datos proporcionan la tecnología principal de las actividades empresariales digitales como el comercio electrónico, la informática móvil y las redes sociales, y son parte integral de tendencias como los grandes datos, la inteligencia artificial y la Internet de las Cosas. Pero aquí está el problema para los DBA:

 Los proveedores de la nube ahora ofrecen servicios de base de datos totalmente gestionados que asumen muchas de las tareas diarias de los DBA internos de una empresa.


En mi opinión, muchas de las tareas mundanas de un DBA se van ", incluyendo muchas de las tareas en las que los DBA estarían de guardia las 24 horas del día,”. Dichas tareas pueden incluir la aplicación de actualizaciones de software o la copia de seguridad de datos, que se automatizan con un servicio de nube de base de datos. Mientras tanto, las partes del trabajo que son más interesantes y más visibles para una línea de líderes empresariales, como el modelado de datos y la seguridad de los datos, sólo crecerán.
Según mi experiencia y hablando con otros DBA experimentados, existen varias maneras de reinventar la carrera del DBA en la era de la nube.


Dominar la migración hacia la nube
Las empresas en el mundo tardarán mucho tiempo en pasar de las bases de datos locales a un futuro de bases de datos totalmente administradas en la nube. Cuando el equipo de TI mueve una base de datos Oracle a infraestructuras en la nube como Amazon Web Services o Oracle Bare Metal infrastructure, sus bases de datos seguirán gestionadas principalmente por sus propios DBA. Sin embargo, con el tiempo, a medida que las empresas utilicen más aplicaciones basadas en la nube, la base de datos que utilizan será administrada por el proveedor de la nube.

Durante esta transición, hay muchas necesidades tácticas que los DBA pueden ayudar a cumplir. Cuando una empresa está trabajando con tecnología local y Nube, alguien necesita entender el entorno de esta, pero también cosas como acceso VPN, seguridad, principios básicos de infraestructura de redes y base de datos.
El DBA debe de asesorar a su empresa a entender qué aplicaciones deben ser trasladadas a la nube inmediatamente y que deben esperar. Sobre todo, aprovechar las oportunidades que brindan los proveedores de nube para hacer migraciones y pilotos de forma gratuita.


Crecer en nuevos roles tecnológicos
Los cambios son una constante en la carrera del DBA. Hemos visto esto antes en versiones anteriores de la base de datos cuando Oracle introdujo la automatización a un montón de tareas de DBA: administración de almacenamiento automatizada, repositorio automático de carga de trabajo y alguno se hizo la pregunta ¿Voy a perder mi trabajo? Bueno algún ejemplo de este tipo de profesionales si nos lo habremos encontrado, pero hasta ellos mismos se habrán reprendido por hacerse esta pregunta.
Los DBA decidimos aprendier a confiar en la automatización e invertimos nuestro tiempo hacia trabajos de mayor valor.

Ahora puedes explorar herramientas de código abierto como Docker o Ansible, y aprender a usar los servicios REST. Ahora estamos creciendo de nuevo. Es posible que hayas estado haciendo lo mismo durante los últimos 10 años, y ahora está abriendo el libro O'Reilly y leyendo sobre la infraestructura como código y automatización en entornos dela nube. Eso es genial. Eso es crecimiento de carrera tanto como DBA como persona.


Hacerse responsable de asegurar los datos correctos para impulsar una estrategia empresarial
Esta es a mi modo de ver la opción más desafiante y a la que me quiero enfocar.
Hay miles de millones de datos en línea de servicios sociales y de intercambio de datos e IoT. Así que existe ya el papel de poner los datos a disposición de sus usuarios de negocios, y ese papel los DBA lo debemos de hacer nuestro,

Sabemos cómo se mueven los datos es una actividad natural para gente como nosotros. Por ejemplo, si una compañía cualquiera, puede querer analizar datos de múltiples fuentes, lo que requiere es de un DBA que entiende los formatos de datos y puede reunirlos. Un DBA puede ofrecer aún más valor al trabajar para entender el modelo de negocio de la empresa y asesorar sobre qué datos son más valiosos para el negocio.

Seamos sinceros un DBA no es un doctor en Estadística, pero pueden hacer que el papel de científico de datos sea mucho más valioso al conseguir que los datos sean más rápidos y más eficientes y al proporcionar una comprensión real de las diferentes fuentes de datos.

Hay mucho más que los DBA necesitan saber además de cómo administrar una o varias instancias de una base de datos. El DBA necesita tener un pensamiento crítico, necesita tener habilidades de comunicación con el equipo de usuarios del dato, necesita aportar su experiencia en resolución de problemas, bajo presión. El DBA de Oracle con los dedos en el teclado ya no tiene lugar, en cambio tienes que entender como los líderes empresariales quieren utilizar sus datos.
Has de empezar tomando contacto con los analistas de negocios de las distintas líneas de negocio para entender lo que esperan obtener de nuevas fuentes de datos y de la agilidad que proporciona la nube.


Otra competencia del DBA que no va a desaparecer es la de la seguridad de los datos. Alguien tiene que preocuparse por la seguridad de los datos a medida que el negocio amplía el acceso a todas estas formas y fuentes de datos. El proveedor de la nube podrá cifrarlos, pero ni sabe lo que es, ni quiere hacerlo o puede que ni lo ofrezca. Alguien en el lado del cliente de la nube, necesita entender y  clasifica el modelo de privilegios que tienen para quién puede acceder a los datos.

¿Que os parece el futuro de los DBA bajo la nube?

Oracle Database 12c R1: TDE en Pluggable Databases (PDBs)

La base de datos Oracle 12c introdujo una nueva forma de administrar almacenes de claves claves cifradas y datos a securizar mediante el comando:
  • ADMINISTER KEY MANAGEMENT. 

Esto reemplaza los comandos:
  • ALTER SYSTEM SET ENCRYPTION KEY
  • ALTER SYSTEM SET ENCRYPTION WALLET 

para la administración de claves y wallets de versione anteriores La terminología de la documentación mezcla libremente los términos wallet y keystore, pero la intención parece ser pasar al término keystore, de acuerdo con la terminología de Java.

La arquitectura de múltiples terminales complica un poco la gestión de claves, ya que el contenedor raíz necesita un almacén de claves abierto con una clave de cifrado principal activa. El almacén de claves CDBs se utiliza para almacenar claves de cifrado para todos los PDB asociados, pero cada uno necesita su propia clave de cifrado principal. La clave de cifrado maestro para el PDB se debe exportar antes de una operación de desenchufado, por lo que se puede importar después de una operación de complemento posterior.

Aquí vamos a describir las operaciones de administración de claves básicas que se relacionan con Transparent Data Encryption (TDE). Algunas de las funcionalidades del keystore que vamos a ver en el presente artículo son:
  • Localización del Almacén de claves
  • Como crear un Almacén de claves
  • Usar el Keystore para  implementar la opción TDE
  • Usar PDBs Con la opción TDE
  • Auto-Login en Almacenes de claves
Localización del Almacén de claves
Se debe crear un almacén de claves para mantener la clave de cifrado. El orden de búsqueda para encontrar el almacén de claves es el siguiente.
  • Si está presente, la ubicación especificada por el parámetro ENCRYPTION_WALLET_LOCATION en el archivo "sqlnet.ora".
  • Si está presente, la ubicación especificada por el parámetro WALLET_LOCATION en el archivo "sqlnet.ora".
  • La ubicación predeterminada para el almacén de claves. Si se establece $ ORACLE_BASE, esto es "$ ORACLE_BASE / admin / DB_UNIQUE_NAME / wallet", de lo contrario es "$ ORACLE_HOME / admin / DB_UNIQUE_NAME / wallet", donde DB_UNIQUE_NAME proviene del archivo de parámetros de inicialización.
Los almacenes de claves no se deben compartir entre los CDB, por lo que si se ejecutan varios CDB desde el mismo ORACLE_HOME, debe realizar una de las siguientes acciones para mantenerlos separados.
  • Utilice la ubicación predeterminada keystore, por lo que cada base de datos CDB tiene su propia almacén de claves.
  • Especifique la ubicación mediante el método $ ORACLE_SID

ENCRYPTION_WALLET_LOCATION =
  (SOURCE =(METHOD = FILE)(METHOD_DATA =
    (DIRECTORY = /u01/app/oracle/admin/$ORACLE_SID/encryption_keystore/)
  • Tenga un "sqlnet.ora" por separado para cada base de datos, asegurándose de que la variable TNS_ADMIN está establecida correctamente.

Independientemente de dónde coloque el almacén de claves, asegúrese de no perderlo. Oracle 12c es extremadamente sensible a la pérdida del keystore. Si lo pierdes o cometes un error tendrás que tener que recrear la instancia limpia una y otra vez.

Crear un Almacén de claves
Debemos de editar el fichero sqlnet.ora, añadiendo la siguiente entrada al fichero:

ENCRYPTION_WALLET_LOCATION =
  (SOURCE =(METHOD = FILE)(METHOD_DATA =
    (DIRECTORY = /u01/app/oracle/admin/$ORACLE_SID/encryption_keystore/)
Crea el directorio para mantener el almacén de claves.

mkdir -p /u01/app/oracle/admin/$ORACLE_SID/encryption_keystore


Conecta al contenedor raíz y crea el almacén de claves


CONN / AS SYSDBA

ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/u01/app/oracle/admin/cdb1/encryption_keystore/' IDENTIFIED BY myPassword;

HOST ls /u01/app/oracle/admin/cdb1/encryption_keystore/
ewallet.p12

SQL>
Puedes abrir y cerrar el almacén de claves desde el contenedor raiz usando los siguientes comandos. 

Para abrir:
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY myPassword CONTAINER=ALL;

Para cerrar:
ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE IDENTIFIED BY myPassword CONTAINER=ALL;


Es necesario crear y activar una clave maestra en el contenedor de raíz y una en cada una de las bases de datos conectables. Utilizar la cláusula CONTAINER = ALL lo hace en un solo paso. Si se omite la cláusula CONTAINER = ALL, sólo se realizará en el contenedor actual y se deberá volver a realizar para cada PDB individualmente. La información sobre la clave maestra se muestra usando la vista V $ ENCRYPTION_KEYS.

ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY myPassword WITH BACKUP CONTAINER=ALL;

SET LINESIZE 100
SELECT con_id, key_id FROM v$encryption_keys;

    CON_ID KEY_ID
---------- ------------------------------------------------------------------------------
         0 AdaYAOior0/3v0AoZDBV8hoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
         0 AYmKkQxl+U+Xv3UHVMgSJC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA

SQL>

La información sobre el almacén de claves se muestra usando la vista V $ ENCRYPTION_WALLET.

SET LINESIZE 200
COLUMN wrl_parameter FORMAT A50
SELECT * FROM v$encryption_wallet;

WRL_TYPE             WRL_PARAMETER                                      STATUS                         WALLET_TYPE          WALLET_OR FULLY_BAC     CON_ID
-------------------- -------------------------------------------------- ------------------------------ -------------------- --------- --------- ----------
FILE                 /u01/app/oracle/admin/cdb1/encryption_keystore/    OPEN                           PASSWORD             SINGLE    NO                 0

SQL>

Conectar al PDB. Si no creó la clave en el paso anterior, cree una nueva clave maestra para el PDB.

CONN sys@pdb1 AS SYSDBA



SELECT con_id, key_id FROM v$encryption_keys;

    CON_ID KEY_ID
---------- ------------------------------------------------------------------------------
         0 DSrc9RAE//v/jcxEDSGIEEEEEEEEEEEEEEEEEEEEEEEEEEE

SQL>

Usar el Almacén de claves con la opción TDE


Ahora debe ser capaz de crear una tabla con una columna cifrada en el PDB.

CONN test/test@pdb1

-- Encrypted column
CREATE TABLE tde_test (
  id    NUMBER(10),
  data  VARCHAR2(50) ENCRYPT
);

INSERT INTO tde_test VALUES (1, 'This is a secret!');
COMMIT;
También podemos crear tablespaces cifrados

CONN sys@pdb1 AS SYSDBA

CREATE TABLESPACE encrypted_ts
DATAFILE SIZE 128K
AUTOEXTEND ON NEXT 64K
ENCRYPTION USING 'AES256'
DEFAULT STORAGE(ENCRYPT);

ALTER USER test QUOTA UNLIMITED ON encrypted_ts;

CONN test/test@pdb1

CREATE TABLE tde_ts_test (
  id    NUMBER(10),
  data  VARCHAR2(50)
) TABLESPACE encrypted_ts;

INSERT INTO tde_ts_test VALUES (1, 'This is also a secret!');
COMMIT;
Si se reinicia el PDB, el almacén de claves debe abrirse en el PDB antes de que se pueda acceder a los datos.

CONN sys@pdb1 AS SYSDBA

SHUTDOWN IMMEDIATE;
STARTUP;
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY myPassword;

CONN test/test@pdb1

SELECT * FROM tde_test;

        ID DATA
---------- --------------------------------------------------
         1 This is a secret!

SQL>

SELECT * FROM tde_ts_test;

        ID DATA
---------- --------------------------------------------------
         1 This is also a secret!

SQL>

Si se reinicia el CDB, el almacén de claves debe estar abierto tanto en el CDB como en los PDB.

CONN / AS SYSDBA

SHUTDOWN IMMEDIATE;
STARTUP;
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY myPassword CONTAINER=ALL;

CONN test/test@pdb1

SELECT * FROM tde_test;

        ID DATA
---------- --------------------------------------------------
         1 This is a secret!

SQL>

SELECT * FROM tde_ts_test;

        ID DATA
---------- --------------------------------------------------
         1 This is also a secret!

SQL>

Auto-Login en Almacenes de claves

La creación de un almacén de claves de inicio automático significa que ya no es necesario abrir explícitamente el almacén de claves después de reiniciarlo. La primera referencia a una clave hace que el almacén de claves se abra automáticamente, como se muestra a continuación.

CONN / AS SYSDBA
ADMINISTER KEY MANAGEMENT CREATE LOCAL AUTO_LOGIN KEYSTORE FROM KEYSTORE '/u01/app/oracle/admin/cdb1/encryption_keystore/' IDENTIFIED BY myPassword;

SHUTDOWN IMMEDIATE;
STARTUP

CONN test/test@pdb1

SELECT * FROM tde_test;

        ID DATA
---------- --------------------------------------------------
         1  Esto es un texto secreto

SQL>

SELECT * FROM tde_ts_test;

        ID DATA
---------- --------------------------------------------------
         1 Esto es otro texto secreto

SQL>