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;
Thx hombre, u r z mejor 😊
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?
Los datos se cifran a nivel de archivo.
¿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?
Todo el cifrado se realiza a nivel de archivos, de forma transparente para la aplicación.
Hola, tío,
¿Podrías añadir algunas instrucciones más sobre cómo la existencia de una reserva física altera el procedimiento?
Lo siento, pero ahora no tengo ese entorno para hacerlo...