Segurança de Dados Oracle: Por Que Implementar o TDE? Um Estudo de Caso Prático


O TDE (Transparent Data Encryption) criptografa de forma transparente os dados em repouso em um Oracle Database. Ele interrompe tentativas não autorizadas do sistema operacional de acessar dados do banco de dados armazenados em arquivos, sem afetar a forma como os aplicativos acessam os dados usando SQL. O TDE está totalmente integrado ao Oracle Database e pode criptografar backups inteiros do banco de dados (RMAN), exportações do Data Pump, tablespaces inteiros da aplicação ou colunas confidenciais específicas. Os dados criptografados permanecem criptografados no banco de dados, seja em arquivos de armazenamento de tablespaces, tablespaces temporários, tablespaces de undo ou outros arquivos, como redo logs.

Com exceção de ambientes OCI onde todos os bancos de dados são criptografados com o TDE. Para ambientes on premisse, o TDE é um recurso do Oracle Enterprise Edition, sendo parte da opção Oracle Advanced Security. Ou seja é uma option que necessita de um licenciamento a parte (extra cost).  

No exemplo abaixo, estarei criando uma tabela chamada usuário na tablespace lamim e inserindo alguns dados para demonstração. Posteriormente com o comando strings do linux, irei mostrar como é possível verificar algumas informações contidas no arquivo de dados, uma vez que o mesmo não esta com a criptografia TDE ativa.

SQL> select tablespace_name, encrypted from dba_tablespaces;

TABLESPACE_NAME                ENC
------------------------------ ---
SYSTEM                         NO
SYSAUX                         NO
UNDOTBS1                       NO
TEMP                           NO
USERS                          NO

SQL> create tablespace lamim datafile size 100m autoextend on next 100m;

Tablespace created.

SQL> select tablespace_name, encrypted from dba_tablespaces;

TABLESPACE_NAME                ENC
------------------------------ ---
SYSTEM                         NO
SYSAUX                         NO
UNDOTBS1                       NO
TEMP                           NO
USERS                          NO
LAMIM                          NO

6 rows selected.

SQL>

SQL> create table usuario (nome varchar2(200), sobrenome varchar2(200), cpf number(11), nascimento date ) tablespace lamim;

Table created.

SQL> insert into usuario values ('Jhonata','Lamim','00087654123',sysdate);

1 row created.

SQL> insert into usuario values ('Joao','Silva',09876543219,to_date('01/01/1900','dd/mm/yyyy'));

1 row created.

SQL> insert into usuario values ('Maria','Santos',1111111111,to_date('10/02/2001','dd/mm/yyyy'));

1 row created.

insert into usuario values ('Eduardo','Souza',2222222222,to_date('25/05/1998','dd/mm/yyyy'));

1 row created.

SQL> commit;

Commit complete.

set lines 210
col nome for a60
col sobrenome for a60
select * from usuario;SQL> SQL> SQL>

NOME                                                         SOBRENOME                                                           CPF NASCIMENT
------------------------------------------------------------ ------------------------------------------------------------ ---------- ---------
Jhonata                                                      Lamim                                                          87654123 28-SEP-24
Joao                                                         Silva                                                        9876543219 01-JAN-00
Maria                                                        Santos                                                       1111111111 10-FEB-01
Eduardo                                                      Souza                                                        2222222222 25-MAY-98

SQL>  select FILE_NAME,FILE_ID from dba_data_files where tablespace_name='LAMIM';

FILE_NAME                                                       FILE_ID
------------------------------------------------------------ ----------
+DGDATA/LADMIMDB/DATAFILE/lamim.276.1180858405                       12

Estarei copiando o datafile do ASM para uma unidade local para consultar os dados no arquivo com o comando strings.

[grid@lamim19c ~]$ asmcmd
ASMCMD>
ASMCMD> cp +DGDATA/LADMIMDB/DATAFILE/lamim.276.1180858405 /tmp/lamim.dbf
copying +DGDATA/LADMIMDB/DATAFILE/lamim.276.1180858405 -> /tmp/lamim.dbf
ASMCMD>
ASMCMD> exit
[grid@lamim19c ~]$
[grid@lamim19c ~]$ strings /tmp/lamim.dbf
}|{z
TLADMIMDB
$xbF
LAMIM
AAAAAAAA
        h!
!       h#
Eduardo
Souza
Maria
Santos
Joao
Silva
cM7!
Jhonata
Lamim
[grid@lamim19c ~]$

Veja que através do comando strings do sistema operacional, foi possível trazer informações inseridas anteriormente na tabela usuário e que estavam contidas no arquivo de dados (datafile).

Agora irei mostrar o mesmo processo em um ambiente com o TDE ativo, afim de demonstrar a diferença.

SQL>  select tablespace_name, encrypted from dba_tablespaces;

TABLESPACE_NAME                ENC
------------------------------ ---
SYSTEM                         YES
SYSAUX                         YES
UNDOTBS1                       YES
TEMP                           YES
USERS                          YES

SQL> create tablespace lamim datafile size 100m autoextend on next 100m;

Tablespace created.

SQL> select tablespace_name, encrypted from dba_tablespaces;

TABLESPACE_NAME                ENC
------------------------------ ---
SYSTEM                         YES
SYSAUX                         YES
UNDOTBS1                       YES
TEMP                           YES
USERS                          YES
LAMIM                          YES

6 rows selected.

SQL> create table usuario (nome varchar2(200), sobrenome varchar2(200), cpf number(11), nascimento date ) tablespace lamim;

Table created.

SQL> insert into usuario values ('Jhonata','Lamim','00087654123',sysdate);

1 row created.

SQL>  insert into usuario values ('Joao','Silva',09876543219,to_date('01/01/1900','dd/mm/yyyy'));

1 row created.

SQL> insert into usuario values ('Maria','Santos',1111111111,to_date('10/02/2001','dd/mm/yyyy'));

1 row created.

SQL> insert into usuario values ('Eduardo','Souza',2222222222,to_date('25/05/1998','dd/mm/yyyy'));

1 row created.

SQL>  commit;

Commit complete.

SQL> set lines 210
col nome for a60
col sobrenome for a60
select * from usuario;SQL> SQL> SQL>

NOME                                                         SOBRENOME                                                           CPF NASCIMENT
------------------------------------------------------------ ------------------------------------------------------------ ---------- ---------
Jhonata                                                      Lamim                                                          87654123 28-SEP-24
Joao                                                         Silva                                                        9876543219 01-JAN-00
Maria                                                        Santos                                                       1111111111 10-FEB-01
Eduardo                                                      Souza                                                        2222222222 25-MAY-98

SQL> col file_name for a90
SQL> select FILE_NAME,FILE_ID from dba_data_files where tablespace_name='LAMIM';


FILE_NAME                                                                                     FILE_ID
------------------------------------------------------------------------------------------ ----------
/u02/app/oracle/oradata/lamimdb_6xp_gru/LAMIMDB_6XP_GRU/datafile/o1_mf_lamim_mhhxxvyg_.dbf         13

SQL> !
[oracle@lamimdb ~]$ strings /u02/app/oracle/oradata/lamimdb_6xp_gru/LAMIMDB_6XP_GRU/datafile/o1_mf_lamim_mhhxxvyg_.dbf
}|{z
WLAMIMDB
LAMIM
[oracle@lamimdb ~]$

Veja que no exemplo executado em um ambiente com o TDE ativo, não foi possível através do comando strings ver informações existentes no datafile.

O TDE desempenha um papel crítico na proteção de dados em ambientes corporativos, onde a segurança da informação é uma prioridade, sem comprometer a usabilidade das aplicações ou a conformidade com normas legais.

https://docs.oracle.com/pt-br/iaas/Content/Security/Reference/dbaas_security.htm

https://docs.oracle.com/en/database/oracle/oracle-database/21/asoag/introduction-to-transparent-data-encryption.html#GUID-AAE3C965-C6A8-45D6-BA5D-F88B300A301A

Comentários