Implementación de Cifrado Transparente de Datos en Oracle 19c Paso a Paso

El Cifrado Transparente de Datos (TDE) permite cifrar los datos confidenciales almacenados en tablas y tablespaces.

Una vez cifrados los datos, estos se descifran de forma transparente para los usuarios o aplicaciones autorizados cuando acceden a ellos. TDE ayuda a proteger los datos almacenados en soportes (también llamados datos en reposo) en caso de robo del soporte de almacenamiento o del archivo de datos.

En esta guía te mostraré cómo implementar Oracle TDE en RAC, pero deberías ser capaz de modificar el procedimiento para una base de datos independiente.

Compruebe que el wallet_root no está configurado.

SQL> show parameter wallet_root

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
wallet_root                          string

Ahora asegúrese de que ha definido db_create_file_dest

SQL> show parameter db_create_file

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest                  string      +DATAC3

Establecer la raíz del monedero

alter system set wallet_root='+DATAC3/LSG01' scope=spfile sid='*';

Reinicie la BD para que los cambios surtan efecto

[oracle@xcm1iddb001 ~]$ srvctl stop database -d LSG01
[oracle@xcm1iddb001 ~]$ srvctl start database -d LSG01

Compruebe que se han ajustado los parámetros.

show parameter wallet_root

show parameter tde_configuration

Establezca la tde_configuration

alter system set tde_configuration="keystore_configuration=file" scope=both sid='*';

SQL> show parameter tde_configuration

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
tde_configuration                    string      keystore_configuration=file

Crear el almacén de claves

SQL> ADMINISTER KEY MANAGEMENT CREATE KEYSTORE IDENTIFIED BY BSLSG01;

keystore altered.

Abrir el almacén de claves

-- with PDBs
SQL> ADMINISTER KEY MANAGEMENT set keystore open identified by BSLSG01 container=ALL;

keystore altered.

-- without PDBs
ADMINISTER KEY MANAGEMENT set keystore open identified by BSLSG01;

Ajuste la tecla

-- with PDBs
SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY BSLSG01 with backup container=ALL;

keystore altered.

--without PDBs
ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY BSLSG01 with backup;

Activar inicio de sesión automático

-- auto login
SQL> ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE IDENTIFIED BY BSLSG01;

keystore altered.

set linesize 120
column STATUS format a20
column WRL_PARAMETER format a60
column MASTERKEY_ACTIVATED format a20
column WALLET_TYPE format a20

SQL> SELECT CON_ID, STATUS, WRL_PARAMETER,WALLET_TYPE FROM V$ENCRYPTION_WALLET;

    CON_ID STATUS               WRL_PARAMETER                                                WALLET_TYPE
---------- -------------------- ------------------------------------------------------------ --------------------
         1 OPEN                 +DATAC3/LSG01/tde/                                           PASSWORD
         2 OPEN                                                                              PASSWORD
         4 OPEN                                                                              PASSWORD

De la consulta anterior se puede comprobar que todavía no es autologin.

Tienes que hacerlo autologin.

Reinicie la base de datos e intente de nuevo la consulta

[oracle@xcm1iddb001 ~]$ srvctl stop database -d LSG01
[oracle@xcm1iddb001 ~]$ srvctl start database -d LSG01

set linesize 120
column STATUS format a20
column WRL_PARAMETER format a60
column MASTERKEY_ACTIVATED format a20
column WALLET_TYPE format a20

SELECT CON_ID, STATUS, WRL_PARAMETER,WALLET_TYPE FROM V$ENCRYPTION_WALLET;

    CON_ID STATUS               WRL_PARAMETER                                                WALLET_TYPE
---------- -------------------- ------------------------------------------------------------ --------------------
         1 OPEN                 +DATAC3/LSG01/tde/                                           AUTOLOGIN
         2 OPEN                                                                              AUTOLOGIN
         4 OPEN                                                                              AUTOLOGIN

Activar la encriptación para nuevos tablespaces

alter system set encrypt_new_tablespaces = always scope=both sid='*';

ALTER SYSTEM SET "_tablespace_encryption_default_algorithm"=AES256 scope=both sid='*';

Comprobar si hay tablespaces encriptados

select TABLESPACE_NAME, ENCRYPTED from dba_tablespaces where ENCRYPTED='YES';

select TABLESPACE_NAME, ENCRYPTED from dba_tablespaces order by 1;

Supongamos que desea cifrar todos los tablespaces de un esquema.

Comprobar en qué tablespaces tiene objetos ese esquema

SQL> select distinct tablespace_name 
from dba_segments where owner='SCHEMA1';

TABLESPACE_NAME
------------------------------
TS_SGRI_IDX
TS_SGRI_DAT

Para encriptar un tablespace basta con utilizar este comando

alter tablespace TS_SGRI_DAT encryption online encrypt;

Haga lo mismo con los demás tablespaces.

Si sólo desea cifrar una columna de la tabla, utilice este comando

ALTER TABLE schema.table MODIFY (column ENCRYPT);

Ten en cuenta que el cifrado de columnas de la tabla tiene un cifrado por defecto de AES192.

Si desea cifrar sus tablas con AES256, debe especificar el tipo de cifrado en el comando de la siguiente manera

ALTER TABLE schema.table MODIFY (column ENCRYPT USING 'AES256');

Para comprobar las columnas que han sido encriptadas ejecute esta consulta

column table_name format a15;
column column_name format a15;
column encryption_alg format a20;

select table_name , column_name, encryption_alg  from dba_encrypted_columns;

7 respuestas a «Implementing Transparent Data Encryption in Oracle 19c Step by Step»

  1. Mi requisito es el cifrado a nivel de columna y he seguido todos los pasos que se han mostrado en Oracle 19C. Pero cuando hago select * from table. Veo los datos en la columna. ¿Hay algo que no entiendo?

  2. ¿Puede explicar cómo se descifra el valor de la columna de un registro de la tabla y cómo se muestra el valor real a la aplicación de front-end?

Deja una respuesta

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