DALL·E 2024 02 08 20.35.43 Create a WordPress featured image for a blog post titled How to Configure TDE in Oracle 19c. The image should be 1200x628 pixels. The background sho

Cómo configurar TDE en Oracle 19c

En este artículo vamos a enseñaros a configurar TDE en vuestra Oracle 19c en tan solo 2 sencillos pasos. Pero antes de comenzar, ¿qué es TDE?

El cifrado transparente de datos o Transparent Data Encryption (TDE) es una una funcionalidad que agiliza las operaciones de cifrado. Garantiza que los datos confidenciales estén cifrados y cumplan los requisitos de conformidad.

En un entorno multitenant puedes configurarlo a nivel de CDB o de PDB. Y puedes cifrar los datos almacenados tanto en tablas como en tablespaces. Incluso puede aplicarse a columnas individuales. En 19c además se pueden cifrar los tablespace de sistema como SYSAUX, SYSTEM, TEMP y el UNDO.

Y ahora sí, al turrón.

Paso 1 – Configurar el Wallet_Root

Antes de comenzar, comprueba en tu instancia los parámetros tde_configuration y wallet_root. Deberían estar vacíos:

SQL> show parameter tde_configuration

NAME               TYPE    VALUE
————————————       ———–    ——————————
tde_configuration  string

SQL> show parameter wallet_root

NAME         TYPE    VALUE
———————————— ———–    ——————————
wallet_root  string

Ahora vamos a cambiar los parámetros, siempre haciendo backup primero del spfile, por si acaso:

SQL> create pfile='/path/a/donde/quieras/initSID.ora' from spfile;
File created.

SQL> alter system set WALLET_ROOT="${ORACLE_BASE}/admin/${ORACLE_SID}/wallet" scope spfile;
System altered.

SQL> alter system set TDE_CONFIGURATION="KEYSTORE_CONFIGURATION=FILE";
System altered.

Una vez actualizado a nivel de spfile, reiniciamos (con srvctl o con shutdown / startup) para hacer efectivos los cambios y comprobamos de nuevo ambos parámetros:

SQL> show parameter tde_configuration

NAME               TYPE    
VALUE
————————————       ———–    
——————————
tde_configuration  string KEYSTORE_CONFIGURATION=FILE

SQL> show parameter wallet_root

NAME         TYPE    
VALUE
———————————— ———–    
——————————
wallet_root  string /u01/app/oracle/admin/jgsendeavors/wallet

Paso 2 – Configurar la Key Store

En este paso vamos a crear la key y el auto-login para poder realizar el posterior cifrado. Verás como resultado de esta acción 2 ficheros con extensión .p12 y .sso respectivamente.

SQL> administer key management create keystore identified by "jgsendeavors";
keystore altered.

SQL> administer key management create LOCAL auto_login keystore from keystore '/u01/app/oracle/admin/jgsendeavors/wallet/tde/' identified by jgsendeavors;
keystore altered.

SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.16.0.0.0

[oracle@samplehost tde]$ pwd
/u01/app/oracle/admin/jgsendeavors/wallet/tde/

[oracle@samplehost tde]$ ls -lrt
-rw——-. 1 oracle oinstall 2555 Sep 13 16:52 ewallet.p12
-rw——-. 1 oracle oinstall 2600 Sep 13 16:52 cwallet.sso

Una vez creados ambos ficheros, volvemos a la DB para configurar la master encryption key. En este ejemplo creamos una key para encriptar tablespaces.

SQL> administer key management set key using tag ‘jgsendeavors_Tablespace_TDE’ force keystore identified by jgsendeavors with backup using ‘TDE_backup’;
keystore altered;
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.16.0.0.0

[oracle@samplehost tde]$ ls -lrt
-rw——-. 1 oracle oinstall 2555 Sep 13 17:10 ewallet_202309133423541_TDE_backup.p12
-rw——-. 1 oracle oinstall 4187 Sep 13 17:10 ewallet.p12
-rw——-. 1 oracle oinstall 4232 Sep 13 17:10 cwallet.sso

OJO -> Puedes comprobar que lo que hemos hecho hasta ahora funciona en las vistas v$encryption_wallet y v$encryption_keys.

Llegados a este punto ya tenemos configurado todo lo necesario para poder encriptar en nuestra base de datos. Ahora toca ponerlo en práctica.

Paso 3 – Pruebas y práctica

Para probar que nuestro tutorial funciona haremos un sencillo ejemplo donde crearemos un tablespace y una tabla sin encriptar, y luego usaremos nuestra key para encriptar este mismo contenido y ver la diferencia entre ambos.

Para esta prueba hemos creado un usuario con default tablespace que apunta al que utilizamos de ejemplo, practica_tde. ¿Por qué? Por simplicidad, así no hay que estar especificando en la DDL de la tabla donde se crea. Ahora bien, vosotros podéis hacerlo como sysdba si así lo queréis, no es importante.

SQL> create tablespace practica_tde datafile '/u01/app/oracle/oradata/JGSENDEAVORS/practica_tde.dbf' size 100M;
Tablespace created.
SQL> create user testeador indenfied by "t3st3aD0r!" default tablespace practica_tde quota unlimited on practica_tde; grant connect, resource to testeador;
User created.
Grant succeeded.
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.16.0.0.0
[oracle@samplehost tde]$ sqlplus testeador/"t3st3aD0r!"
SQL*Plus: Release 19.0.0.0.0 – Production on Mon Sep 13 17:30:12 2023
Version 19.16.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.16.0.0.0

SQL> CREATE TABLE test (
    id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
    texto_prueba VARCHAR2(10)
);
Table created.
SQL> BEGIN
    FOR i IN 1..5 LOOP
        INSERT INTO test (texto_prueba) VALUES ('ABCD');
    END LOOP;
END;
/
5 rows created.

SQL> commit;
Commit complete.

Vaaaale. ¿Y ahora qué? Bueno, ahora vamos a comprobar que, efectivamente, podemos sacar los datos del binario del tablespace. Para esto nos valemos del comando strings.

[oracle@samplehost tde]$ strings /u01/app/oracle/oradata/JGSENDEAVORS/practica_tde.dbf | grep ABCD
ABCD,
ABCD,
ABCD,
ABCD,
ABCD

Y, por último, la magia. Vamos a hacer la prueba del algodón encriptando el tablespace y comprobando de nuevo a ver si podemos ver esos patrones de texto.

SQL> ALTER TABLESPACE practica_tde ENCRYPTION ONLINE USING 'AES192' 
ENCRYPT FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/JGSENDEAVORS/practica_tde.dbf',                        '/u01/app/oracle/oradata/JGSENDEAVORS/practica_tde_enc.dbf');
Tablespace altered.

SQL> !strings /u01/app/oracle/oradata/JGSENDEAVORS/practica_tde_enc.dbf | grep ABCD

SQL> 

Ét voilá (o como se diga), ya tenemos nuestro tablespace encriptado. Importante, hemos renombrado el DBF, ¿Por qué?. En esencia, por convención. Antes teníamos algo y ahora tenemos algo encriptado así que debemos cambiarle el nombre. Pero sobre todo, porque creo que si no no funciona… 😉

Únete a la lista de emails para no perderte nada

No tengo ningún producto, publicidad, ni nada que venderte. De hecho, aún no tengo nada que hacer con estos emails. Pero si te interesa estar en contacto o no perderte las próximas actualizaciones en el futuro… Ya sabes 😉

    ¿Quieres trabajar con nosotros?

    Ya sea que necesites mejorar el rendimiento de consultas existentes, planificar y ejecutar migraciones de datos críticas, diseñar bases de datos desde cero o mantener un entorno de base de datos estable, estamos aquí para ayudarte.

    Trabajamos con una amplia variedad de sistemas de gestión de bases de datos (DBMS) y estamos comprometidos en proporcionar soluciones adaptadas a tus necesidades específicas. Puedes consultar nuestra lista completa de servicios aquí.

    Confía en nosotros para optimizar tus bases de datos y liberar tiempo y recursos para que puedas concentrarte en lo que realmente importa: hacer crecer tu negocio.

    ¡Contáctanos hoy mismo y descubre cómo podemos ayudarte a lograr un rendimiento óptimo en tu entorno de bases de datos!


    Comentarios

    Una respuesta a «Cómo configurar TDE en Oracle 19c»

    1. […] nuestra web, por ejemplo, tienes este artículo que te enseña como configurarlo en Oracle con un ejemplo real. Con los comandos y todo, soy así […]

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *