[Solved] Issue: ORA-28374 : typed master key not found in wallet (Creating PDBs in DB System Databases)

Neste artigo vamos constatar um pré-requisito necessário no ambiente OCI para a criação de novas tablespaces/PDBs em um DB-System, que seria a utilização do recurso de TDE (Transparent Data Encryption), conforme cenário a seguir.

Validando ambiente vigente:

[opc@luxor ~]$ sudo su - oracle
Last login: Tue May 18 08:19:12 UTC 2021
[oracle@luxor ~]$ sqlplus / as sysdba
 
SQL*Plus: Release 12.2.0.1.0 Production on Tue May 18 08:19:19 2021
 
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 12c EE Extreme Perf Release 12.2.0.1.0 - 64bit Production
 
SQL> SELECT NAME,OPEN_MODE,CDB FROM V$DATABASE;
 
NAME      OPEN_MODE            CDB
--------- -------------------- ---
CORTEX    READ WRITE           YES
 
[oracle@luxor ~]$ sqlplus / as sysdba
 
SQL*Plus: Release 12.2.0.1.0 Production on Tue May 18 08:20:44 2021
 
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 12c EE Extreme Perf Release 12.2.0.1.0 - 64bit Production
 
SQL> SELECT NAME,OPEN_MODE FROM V$PDBS;
 
NAME
--------------------------------------------------------------------------------
OPEN_MODE
----------
PDB$SEED
READ ONLY
 
HIPOFISE1
READ WRITE

Criando um novo PDB, definindo que sua tablespace será a USERS:

SQL> CREATE PLUGGABLE DATABASE HIPOFISE2 ADMIN USER BSS IDENTIFIED BY "Teste#123" STORAGE (MAXSIZE 2G) DEFAULT TABLESPACE USERS DATAFILE '+DATA' SIZE 10M AUTOEXTEND ON;
 
Pluggable database created.

Validando status do novo PDB e abrindo-o:

SQL> col PDB_NAME format a10
SQL> SELECT PDB_ID,PDB_NAME,STATUS FROM CDB_PDBS;
 
    PDB_ID PDB_NAME   STATUS
---------- ---------- ----------
         3 HIPOFISE1  NORMAL
         2 PDB$SEED   NORMAL
         4 HIPOFISE2  NEW
 
SQL> ALTER PLUGGABLE DATABASE HIPOFISE2 OPEN;
 
Pluggable database altered.
 
SQL> SELECT PDB_ID,PDB_NAME,STATUS FROM CDB_PDBS;
 
    PDB_ID PDB_NAME   STATUS
---------- ---------- ----------
         3 HIPOFISE1  NORMAL
         2 PDB$SEED   NORMAL
         4 HIPOFISE2  NORMAL
 
SQL> ALTER PLUGGABLE DATABASE HIPOFISE2 SAVE STATE;
 
Pluggable database altered.

Porém, ao checar os seus datafiles, percebemos que a tablespace USERS não foi criada:

SQL> ALTER SESSION SET CONTAINER=HIPOFISE2;
 
Session altered.
 
SQL> SELECT TABLESPACE_NAME,FILE_NAME FROM DBA_DATA_FILES;
 
TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SYSTEM
+DATA/CORTEX_PHX1HB/C2AA53D540381FFEE0539501000ACE3B/DATAFILE/system.276.1072940
197
 
SYSAUX
+DATA/CORTEX_PHX1HB/C2AA53D540381FFEE0539501000ACE3B/DATAFILE/sysaux.277.1072940
197
 
UNDOTBS1
 
TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
+DATA/CORTEX_PHX1HB/C2AA53D540381FFEE0539501000ACE3B/DATAFILE/undotbs1.278.10729
40197

Vamos tentar criar a tablespace de forma isolada para ver a mensagem que é apresentada:

SQL> CREATE TABLESPACE USERS DATAFILE '+DATA';
CREATE TABLESPACE USERS DATAFILE '+DATA'
*
ERROR at line 1:
ORA-28374: typed master key not found in wallet

Para ajustar essa questão, precisaremos usar o utilitário DBCLI, com o usuário root. Primeiro, vamos coletar as informações mínimas do ambiente:

[oracle@luxor ~]$ exit
logout
[opc@luxor ~]$ sudo su -
Last login: Tue May 18 08:24:43 UTC 2021
[root@luxor ~]# dbcli list-databases
 
ID                                       DB Name    DB Type  DB Version           CDB        Class    Shape    Storage    Status        DbHomeID    
---------------------------------------- ---------- -------- -------------------- ---------- -------- -------- ---------- ------------ ----------------------------------------
4c906765-68ea-4e05-ba3f-c54152f912cf     CORTEX     Si       12.2.0.1.201020      true       Oltp              ASM        Configured   8bc7f0a5-6230-4b99-b568-b73cf0038525

Usando o ID do passo anterior, podemos criar uma chave para o PDB HIPOFISE2, passando uma senha do DTE. Este processo gerará um “job” da criação da chave e atualização do Keystore:

[root@luxor ~]# dbcli update-tdekey -i 4c906765-68ea-4e05-ba3f-c54152f912cf -p -n HIPOFISE2
TDE Admin wallet password:
{
  "jobId" : "abb714a5-67c4-4b76-a78a-96496e7aacc7",
  "status" : "Created",
  "message" : null,
  "reports" : [ ],
  "createTimestamp" : "May 19, 2021 07:17:46 AM UTC",
  "resourceList" : [ ],
  "description" : "TDE update CORTEX - PDBs: [HIPOFISE2]",
  "updatedTime" : "May 19, 2021 07:17:49 AM UTC",
  "percentageProgress" : "0%"
}

Gostaria de pontuar que é importante informar a senha correta da DTE, para que não ocorra o erro abaixo (que eu experimentei e fiquei bons minutos para descobrir que a senha estava errada):

Job details
----------------------------------------------------------------
                     ID:  8a727e50-00be-4956-8ef2-a965479e8be7
            Description:  TDE update CORTEX - PDBs: [HIPOFISE2]
                 Status:  Failure
                Created:  May 19, 2021 6:59:17 AM UTC
               Progress:  71%
                Message:  DCS-10101:Failed to rotate TDE key: CORTEXADMINISTER KEY MANAGEMENT SET KEY FORCE KEYSTORE identified by ******** WITH BACKUP USING 'OdaRotateKey' container=current
*
ERROR at line 1:
ORA-46627: keystore password ********

Uma vez que utilizamos a senha DTE correta, com o comando abaixo, conseguimos coletar o JOB ID do processo que acabamos de disparar (que por sua vez já rodou com sucesso):

[root@luxor ~]# dbcli list-jobs -tl 1
 
ID                                       Description                                                                 Created                             Status
---------------------------------------- --------------------------------------------------------------------------- ----------------------------------- ----------
abb714a5-67c4-4b76-a78a-96496e7aacc7     TDE update CORTEX - PDBs: [HIPOFISE2]                                       May 19, 2021 7:17:46 AM UTC         Success

Com este JOB ID, podemos verificar os steps envolvidos no processo, o que pode ajudar muito em uma situação de investigação:

[root@luxor ~]# dbcli describe-job -i abb714a5-67c4-4b76-a78a-96496e7aacc7 -l Verbose
 
Job details
----------------------------------------------------------------
                     ID:  abb714a5-67c4-4b76-a78a-96496e7aacc7
            Description:  TDE update CORTEX - PDBs: [HIPOFISE2]
                 Status:  Success
                Created:  May 19, 2021 7:17:46 AM UTC
               Progress:  100%
                Message:
 
Task Name                                                                Start Time                          End Time                            Status
------------------------------------------------------------------------ ----------------------------------- ----------------------------------- ----------
task:TaskSequential_253                                                  May 19, 2021 7:17:49 AM UTC         May 19, 2021 7:17:49 AM UTC         Running
task:TaskZLockWrapper_239                                                May 19, 2021 7:17:49 AM UTC         May 19, 2021 7:18:12 AM UTC         Success
task:TaskZJsonRpcExt_240                                                 May 19, 2021 7:17:49 AM UTC         May 19, 2021 7:18:02 AM UTC         Success
task:TaskZJsonRpcExt_242                                                 May 19, 2021 7:18:02 AM UTC         May 19, 2021 7:18:05 AM UTC         Success
task:TaskZJsonRpcExt_244                                                 May 19, 2021 7:18:05 AM UTC         May 19, 2021 7:18:08 AM UTC         Success
task:TaskParallel_246                                                    May 19, 2021 7:18:08 AM UTC         May 19, 2021 7:18:08 AM UTC         Success
Save password in wallet                                                  May 19, 2021 7:18:08 AM UTC         May 19, 2021 7:18:08 AM UTC         Success
Rotate Master Key                                                        May 19, 2021 7:18:08 AM UTC         May 19, 2021 7:18:11 AM UTC         Success
Cleaning password                                                        May 19, 2021 7:18:12 AM UTC         May 19, 2021 7:18:12 AM UTC         Success
 
[root@luxor ~]#

Agora podemos logar em nosso PDB e checar se a wallet está aberta (caso não esteja, devemos executar o comando “ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED  BY “”;”):

[root@luxor ~]# exit
logout
[opc@luxor ~]$ sudo su - oracle
Last login: Wed May 19 07:24:28 UTC 2021
[oracle@luxor ~]$ sqlplus / as sysdba
 
SQL*Plus: Release 12.2.0.1.0 Production on Wed May 19 07:25:26 2021
 
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 12c EE Extreme Perf Release 12.2.0.1.0 - 64bit Production
 
SQL> SELECT STATUS FROM V$ENCRYPTION_WALLET;
 
STATUS
------------------------------
OPEN
 
SQL> ALTER SESSION SET CONTAINER=HIPOFISE2;
 
Session altered.
 
SQL> SELECT STATUS FROM V$ENCRYPTION_WALLET;
 
STATUS
------------------------------
OPEN

Agora podemos criar nossa tablespace no PDB:

SQL> CREATE TABLESPACE USERS DATAFILE '+DATA';
 
Tablespace created.
 
SQL> SELECT TABLESPACE_NAME,STATUS,ENCRYPTED FROM DBA_TABLESPACES;
 
TABLESPACE_NAME                STATUS    ENC
------------------------------ --------- ---
SYSTEM                         ONLINE    NO
SYSAUX                         ONLINE    NO
UNDOTBS1                       ONLINE    NO
TEMP                           ONLINE    NO
USERS                          ONLINE    YES

Obs: Este procedimento foi criado pelo senhor Ahmed Baraka (www.ahmedbaraka.com) e foi apenas reproduzido por mim em um laboratório pessoal para fins de aprendizado.

Leave a Comment

Your email address will not be published.