Nesse post demonstro o procedimento básico para configurar a wallet do zero e começar usar Transparent Data Encryption no banco de dados Oracle.

Edite o arquivo sqlnet.ora em $ORACLE_HOME/network/admin e adicione essa diretiva:

ENCRYPTION_WALLET_LOCATION =
(SOURCE = (METHOD = FILE)
 (METHOD_DATA =
  (DIRECTORY = /u01/app/oracle/admin/$ORACLE_SID/wallet/)
 )
)

Versão 11g

1) Crie a keystore:

SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "dibiei";

2) Abra a Wallet:

SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "dibiei";

3) Saia do SQLPLUS e crie a AUTOLOGIN KEYSTORE com orapki:

$ orapki wallet create -wallet /u01/app/oracle/admin/$ORACLE_SID/wallet/ -auto_login

4) Volte ao SQLPLUS e feche a wallet aberta com senha, isso deixará a wallet aberta como AUTOLOGIN:

SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;

Versão 12c (12cR1 e 12cR2)

1) Cria a password keystore:

SQL> ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/u01/app/oracle/admin/CDB1/wallet' IDENTIFIED BY "dibiei";

2) Abra a wallet:

SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "dibiei";

3) Definindo a master key:

SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "dibiei" WITH BACKUP;

4) Cria a AUTOLOGIN KEYSTORE:

SQL> ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE '/u01/app/oracle/admin/CDB1/wallet' IDENTIFIED BY "dibiei";

5) Feche a PASSWORD KEYSTORE, isso deixará a wallet aberta como AUTOLOGIN:

SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE IDENTIFIED BY "dibiei";

Se for CDB:

SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE IDENTIFIED BY "dibiei" CONTAINER=ALL;

Consultando informações da Wallet:

set linesize 300
col WRL_TYPE format a10
col WRL_PARAMETER format a70
col STATUS format a20
col WALLET_TYPE format a10
col WALLET_ORDER format a10
col FULLY_BACKED_UP format a10
col CON_ID format 999
SELECT * FROM GV$ENCRYPTION_WALLET;

Versão 18c ou superior

A partir da versão 18c, o diretório da wallet pode ser customizado para cada banco de dados através do parâmetro wallet_root, não havendo mais dependência de configuração no sqlnet.ora.

1) Define a localização da wallet:

SQL> ! mkdir -p /u01/app/oracle/admin/cdbbi/wallet
SQL> alter system set wallet_root='/u01/app/oracle/admin/cdbbi/wallet' scope=spfile;

2) É necessário reiniciar a instância

SQL> shutdown immediate;
SQL> startup;

3) Ajustando o parâmetro tde_configuration para indicar que a wallet é do tipo FILE (não requer restart):

SQL>  alter system set tde_configuration="KEYSTORE_CONFIGURATION=FILE" scope=both;

4) Cria a wallet no diretório configurado no parâmetro wallet_root:

SQL>  administer key management create keystore identified by "dibiei";

5) Abre a wallet com a senha:

SQL>  administer key management set keystore open identified by "dibiei" container=all;

6) Define a master encryption key para o CDB e todos os PDBS abertos:

SQL>  ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "dibiei" WITH BACKUP container=all;

7) Configura a wallet como AUTOLOGIN (note que o Oracle cria uma pasta “tde” abaixo do diretório configurado no parâmetro wallet_root):

SQL>  ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE '/u01/app/oracle/admin/cdbbi/wallet/tde' IDENTIFIED BY "dibiei";

8) Fecha a PASSWORD keystore:

SQL>  administer key management set keystore close identified by "dibiei" container=all;

Verificando o status da wallet no CDB root e PDBs:

SQL> SELECT con_id, status, wallet_type FROM v$encryption_wallet;

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

Variações:

Se você tentou realizar a configuração sem sucesso anteriormente ou se o banco de dados já tinha wallet configurada e você decidiu refazer, pode receber o erro “ORA-28374: typed master key not found in wallet”. Neste caso, faça o seguinte:

  • Confirme que não tem tablespaces já criadas com TDE, feche a wallet remova e remova todos os arquivos do diretório;
  • Altere esse parâmetro: alter system set “_db_discard_lost_masterkey”=true scope=memory;
  • Refaça a configuração do zero seguindo a instruções desse post.

No 12c, se o banco de dados for um CDB, a etapa “Definindo a master key” precisa ser executada em cada PDB, por exemplo:

  • ALTER SESSION SET CONTAINER = PDB1;
  • ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY “dibiei”;

No 12c, se a wallet já está como AUTOLOGIN e você precisa definir a Master Key em um novo PDB, pode ser necessário converter de AUTOLOGIN para PASSWORD temporariamente, por exemplo:

  • Remova o arquivo cwallet.sso do diretório da wallet
  • Abra a PASSWORD KEYSTORE: Passo 2
  • Feche a AUTOLOGIN KEYSTORE: ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE CONTAINER=ALL;
  • Execute o passo 3 no PDB
  • Execute os passos 4 e 5 no CDB root

Se for um Oracle RAC, a wallet precisa estar acessível para todas as instâncias. Você pode copiar os arquivos de um node para o outro, mas o ideal é centralizar em um Cluster File System, conforme demonstro nesse post: TDE: Mover Wallet para localização centralizada no Oracle RAC

Leave a Reply

Discover more from Blog do Dibiei

Subscribe now to keep reading and get access to the full archive.

Continue reading