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