Passo a Passo para Configurar o Oracle TDE no Oracle Database 19c

Cada vez mais a segurança dos dados vem se tornando prioridade para as organizações, principalmente com as exigências legais e regulamentações como a LGPD, que exigem que dados sensíveis seja protegidos adequadamente.

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.

Neste artigo será abordado como ativar o Oracle TDE em um Oracle Database 19c sigle instance e realizar a criptografia de colunas e tablaspaces, através de um guia prático, passo a passo, para a implementação.

Pre-requisitos para configuração do TDE

  • Utilização da versão Enterprise Edition e aquisição da option Advanced Security.
Ativação da criptografia TDE
  • No diretório $ORACLE_BASE do banco de dados, deve-se criar um novo diretório chamado wallet.
[oracle@lamim19c /]$ cd $ORACLE_BASE
[oracle@lamim19c oracle]$ pwd
/orabin01/app/oracle
[oracle@lamim19c oracle]$ mkdir wallet
[oracle@lamim19c oracle]$ cd wallet/
[oracle@lamim19c wallet]$ pwd
/orabin01/app/oracle/wallet
[oracle@lamim19c wallet]$

  • Atualizar o arquivo sqlnet.ora com a localização do wallet, através da adição do ENCRYPTION_WALLET_LOCATION.
ENCRYPTION_WALLET_LOCATION =
  (SOURCE =
    (METHOD = FILE)
    (METHOD_DATA =
      (DIRECTORY = /orabin01/app/oracle/wallet)
    )
  )
[grid@lamim19c ~]$ cat /orabin01/app/19.0.0/grid/network/admin/sqlnet.ora
# sqlnet.ora Network Configuration File: /orabin01/app/19.0.0/grid/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

ENCRYPTION_WALLET_LOCATION =
  (SOURCE =
    (METHOD = FILE)
    (METHOD_DATA =
      (DIRECTORY = /orabin01/app/oracle/wallet)
    )
  )
[grid@lamim19c ~]$

  • Definir no banco de dados o parâmetro WALLET_ROOT com o diretório criado e reiniciar  banco de dados.
SQL> show parameter wallet_root

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
wallet_root                          string
SQL>
SQL> alter system set wallet_root='/orabin01/app/oracle/wallet' scope=spfile sid='*';

System altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.

Total System Global Area 2432693792 bytes
Fixed Size                  9180704 bytes
Variable Size            1342177280 bytes
Database Buffers         1073741824 bytes
Redo Buffers                7593984 bytes
Database mounted.
Database opened.
SQL> show parameter wallet_root

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
wallet_root                          string      /orabin01/app/oracle/wallet
SQL>

  • Definir o parâmetro tde_configuration para KEYSTORE_CONFIGURATION=FILE.
SQL>
SQL>  alter system set tde_configuration="KEYSTORE_CONFIGURATION=FILE" scope=both sid='*';

System altered.

SQL>
  • Realizar a criação do AUTO-LOGIN Keystore. Neste exemplo walletlamim é a senha que foi definida para a keystore.
SQL> administer key management create keystore identified by "walletlamim";

keystore altered.

SQL> administer key management create auto_login keystore from keystore identified by "walletlamim";

keystore altered.

SQL> ! ls -tlr /orabin01/app/oracle/wallet
total 0
drwxr-x--- 2 oracle asmadmin 44 Oct 13 19:05 tde

SQL> ! ls -tlr /orabin01/app/oracle/wallet/tde
total 8
-rw------- 1 oracle asmadmin 2553 Oct 13 19:05 ewallet.p12
-rw------- 1 oracle asmadmin 2598 Oct 13 19:05 cwallet.sso

SQL> select con_id, wallet_type, status from v$encryption_wallet;

    CON_ID WALLET_TYPE          STATUS
---------- -------------------- ------------------------------
         1 AUTOLOGIN            OPEN_NO_MASTER_KEY
         2 AUTOLOGIN            OPEN_NO_MASTER_KEY
         3 AUTOLOGIN            OPEN_NO_MASTER_KEY

  • Setar a Master key.
SQL>  administer key management set keystore open force keystore identified by "walletlamim" container=all;

keystore altered.

SQL> SQL> administer key management set key force keystore identified by "walletlamim" with backup container=all;

keystore altered.

SQL>  select con_id, wallet_type, status from v$encryption_wallet;

    CON_ID WALLET_TYPE          STATUS
---------- -------------------- ------------------------------
         1 AUTOLOGIN            OPEN
         2 AUTOLOGIN            OPEN
         3 AUTOLOGIN            OPEN

SQL> !ls -tlr /orabin01/app/oracle/wallet/tde
total 24
-rw------- 1 oracle asmadmin 2553 Oct 13 19:06 ewallet_2024101322062724.p12
-rw------- 1 oracle asmadmin 3993 Oct 13 19:07 ewallet_2024101322071679.p12
-rw------- 1 oracle asmadmin 6729 Oct 13 19:07 ewallet.p12
-rw------- 1 oracle asmadmin 6774 Oct 13 19:07 cwallet.sso

Finalizadas as etapas acima, o banco de dados já esta configurado para utilização do TDE. A Oracle Wallet é crucial no contexto do Oracle Transparent Data Encryption (TDE) porque ela armazena as chaves de criptografia usadas para proteger os dados no banco de dados. A segurança e disponibilidade da wallet são essenciais para garantir o acesso contínuo e seguro aos dados. Desta forma é extremamente recomendado que sejam realizados backups periódicos da wallet. 

A criptografia no Oracle TDE é aplicada a colunas específicas ou a tablespaces inteiros. Portanto, ao listar tabelas com criptografia ativa, você deve considerar colunas criptografadas ou tabelas armazenadas em um tablespace criptografado.
  • Criação de uma tablespace com criptografia. Para isso é usado o comando ENCRYPTION USING no comando de criação da tablespace, passando o tipo de criptografia (AES256, AES192, AES128 e 3DES168) e DEFAULT STORAGE (ENCRYPT). As tabelas que serão criadas nesta tablesapace terão todas as colunas criptografas por padrão.
SQL>  show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 LAMIMPDB1                      READ WRITE NO
SQL>
SQL> alter session set container=LAMIMPDB1;

Session altered.

SQL> select tablespace_name, encrypted from dba_tablespaces;

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

SQL> CREATE TABLESPACE TDE_LAMIM DATAFILE SIZE 100M ENCRYPTION USING 'AES256' DEFAULT STORAGE (ENCRYPT);

Tablespace created.

SQL> select tablespace_name, encrypted from dba_tablespaces;

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

6 rows selected.

SQL>
  • Criação de uma tabela com uma coluna criptografada. Neste exemplo a tabele não esta em uma tablespace com criptografia ativa.
SQL> create table lamim.tde_lamim (nome varchar2(200), salario number(5) ENCRYPT USING 'AES256');

Table created.

SQL> desc lamim.tde_lamim;
 Name           Null?    Type
 -------------- -------- ---------------------------
 NOME                    VARCHAR2(200)
 SALARIO                 NUMBER(5) ENCRYPT

Artigos Relacionados:

Comentários