Sidebar

 

Supongamos que por políticas de nuestra empresa, necesitamos encryptar ciertas columnas cuando pasamos un respaldo a un ambiente de desarrollo.
Una manera muy sencilla de llevar a cabo esta tarea es mediante dbms_obfuscation_toolkit.

Primero creamos estas dos funciones, en un esquema diferente al cual vamos a encriptarlos datos y que no tenga acceso cualquier usuario.

create or replace function SYS.cryptf( p_str in varchar2 ) return varchar2
as
l_data varchar2(255);
begin
l_data := rpad( p_str, (trunc(length(p_str)/8)+1)*8, chr(0) );

dbms_obfuscation_toolkit.DESEncrypt
( input_string => l_data,
key_string => 'DBAKey03',
encrypted_string=> l_data );

return l_data;
end;
/


create or replace
function SYS.decryptf( p_str in varchar2 ) return varchar2
as
l_data varchar2(255);
begin
dbms_obfuscation_toolkit.DESDecrypt
( input_string => p_str,
key_string => 'DBAKey03',
decrypted_string=> l_data );

return rtrim( l_data, chr(0) );
end;
/

Ahora vamos a probarlo con el siguiente ejemplo.

create table t1 (c1 int, c2 varchar2(20));
insert into t1 values (1,'A');
insert into t1 values (1,'AA');
insert into t1 values (1,'AAA');
insert into t1 values (1,'AAAA');
commit;


select * from t1;

C1 C2
---------------------- --------------------
1 A
2 AA
3 AAA
4 AAAA

Actualizamos la información con la función sys.cryptf

update t1
set c2 = sys.cryptf(c2);
commit;

4 filas actualizadas.
confirmadas.

En este momento ya tenemos encriptada la columna seleccionada.

select * from t1;

C1 C2
---------------------- --------------------
1 6 f^ �
2 ��݂I�
3 ������
4 j��

Si queremos desencriptar solo utilizamos la función sys.decryptf

update t1
set c2 = sys.decryptf(c2);
commit;

4 filas actualizadas.
confirmadas.

select * from t1;


C1 C2
---------------------- --------------------
1 A
2 AA
3 AAA
4 AAAA

Incluso podríamos desenriptar un registro.

update t1
set c2 = herlinma.decryptf(c2)
where c1 = 2;

Tips BD