Cenário

Um banco de dados BITESTE configurado com Transparent Data Encryption foi convertido de Single Instance para RAC, originalmente a wallet era mantida e em sua localização default: $ORACLE_BASE/admin/<DB_UNIQUE_NAME>/wallet.

Em RAC, a wallet deve ser acessível por todas as instâncias do banco de dados no cluster, senão, o status poderá ficar OPEN em uma instância e CLOSED na outra, gerando erro na execução de SQL das sessões que conectam na segunda instância.

A solução mais simples seria copiar a wallet para o segundo nó, colocando no mesmo diretório. O lado negativo dessa abordagem seria o esforço adicional em manter uma cópia da wallet sempre atualizada em cada node.

A solução utilizada foi armazenar a wallet em um ACFS compartilhado entre os nodes e ajustar o parâmetro ENCRYPTION_WALLET_LOCATION no sqlnet.ora apontando para o novo diretório. O ponto de atenção aqui é que esse parâmetro afeta outros bancos de dados vinculados com o mesmo ORACLE_HOME, caso existam outros bancos de dados com TDE, eles precisam ser configurados seguindo o mesmo padrão.

Pré requisitos

Transparent Data Encryption já deve estar configurado, apenas demonstro como centralizar a wallet;

Filesystem ACFS previamente configurado, não abordarei essa etapa;

Passo a passo

1) Criar diretório para o banco de dados no filesystem compartilhado:

mkdir -p /opt/oracle/dcs/commonstore/BITESTE/wallet

Nota: /opt/oracle/dcs/commonstore/ é o filesystem ACFS

2) Cópia dos arquivos da wallet para o novo destino:

cp /u01/app/oracle/admin/BITESTE/wallet/* /opt/oracle/dcs/commonstore/BITESTE/wallet/

3) Editamos o arquivo sqlnet.ora de cada node incluindo o parâmetro ENCRYPTION_WALLET_LOCATION, apesar desse parâmetro aplicar-se a todas as instâncias que executam no mesmo ORACLE_HOME, a utilização da variável de ambiente ORACLE_UNQNAME resulta caminhos absolutos diferentes para cada banco de dados de forma dinâmica:

ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/opt/oracle/dcs/commonstore/$ORACLE_UNQNAME/wallet)))

4) Por ter mais de um banco no mesmo cluster, não podemos definir a variável ORACLE_UNQNAME no .bash_profile do oracle, devemos configurar no profile do banco no Clusterware para definir a variável de ambiente ao iniciar as instâncias desse banco de dados:

srvctl setenv database -d biteste -t "ORACLE_UNQNAME=BITESTE"

5) Reiniciamos o banco de dados para as instâncias subirem com a nova configuração (também pode baixar e subir uma instância por vez):

srvctl stop database -d biteste
srvctl start database -d biteste

Consultando o caminho e o status da wallet na view GV$ENCRYPTION_WALLET:

SQL> SELECT * FROM GV$ENCRYPTION_WALLET;
   INST_ID WRL_TYPE   WRL_PARAMETER                                                          STATUS
---------- ---------- ---------------------------------------------------------------------- --------------------
         2 file       /opt/oracle/dcs/commonstore/$ORACLE_UNQNAME/wallet                     OPEN
         1 file       /opt/oracle/dcs/commonstore/$ORACLE_UNQNAME/wallet                     OPEN

Observação:

Essa á uma abordagem recomendada até a versão 12cR2, a partir do 18c temos a possibilidade de configurar o caminho da wallet através do parâmetro WALLET_ROOT no spfile, simplificando e tornando a configuração mais flexível.

Referência do parâmetro WALLET_ROOT  no 19c:

https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/WALLET_ROOT.html#GUID-37347728-3D24-444A-A9ED-5B981C4EA2D3

2 thoughts on “TDE: Mover Wallet para localização centralizada no Oracle RAC”

Leave a Reply to Como configurar Wallet para criar tablespaces com Transparent Data Encryption (do zero) – Blog do DibieiCancel reply

Discover more from Blog do Dibiei

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

Continue reading