Transparent Data Encryption – Création d’un tablespace crypté Oracle 19c

Introduction

TDE (Transparent Data Encryption) permet de crypter vos données au niveau d’une table ou d’un tablespace. Uniquement les personnes habilitées pourront décrypter les informations et accéder aux données. Pour identifier les utilisateurs qui peuvent y accéder, on utilise un wallet contenant des clés.

Pour avoir une vision d’ensemble sur le fonctionnement de TDE, vous pouvez lire cet article : https://easyteam.fr/oracle-tde-12c-concepts-and-implementation/

Contexte

Dans cet article, nous allons encrypter le tablespace USERS contenu dans une PDB en utilisant la nouvelle méthode de la version 19c (WALLET_ROOT + TDE_CONFIGURATION).

L’ancienne méthode (qui fonctionne toujours) consiste à utiliser le fichier sqlnet.ora. Cette méthode est plus susceptible d’apporter des erreurs car le fichier sqlnet.ora est lu à chaque fois qu’il y a une connexion à la BDD alors qu’avec la nouvelle méthode, la configuration TDE est initialisée une seule fois, lors du démarrage de l’instance.

Configuration du wallet root

On commence d’abord par configurer la variable d’initialisation « WALLET_ROOT » qui indique le répertoire de stockage du keystore.

[oracle] mkdir -p /u01/app/oracle/admin/ORCL/wallet/tde
[oracle] sqlplus / as sysdba
SQL> CREATE PFILE='/tmp/oraORCL_bf_TDE.ora' FROM SPFILE ;
SQL> ALTER SYSTEM SET WALLET_ROOT="/u01/app/oracle/admin/ORCL/wallet" scope=spfile sid='*' ;
SQL> shutdown immediate ;

Une fois que le répertoire keystore est initialisé, il faut configurer « TDE_CONFIGURATION » pour indiquer  comment seront récupérées les informations de chiffrement. La valeur « FILE » est recommandée par Oracle.

SQL> startup ;
SQL> ALTER SYSTEM SET TDE_CONFIGURATION="KEYSTORE_CONFIGURATION=FILE" scope=both sid='*' ;
SQL> SELECT NAME,VALUE FROM v$parameter WHERE NAME IN ('wallet_root','tde_configuration") ;

NAME VALUE
-------------------- ----------------------------------------
wallet_root /u01/app/oracle/admin/ORCL/wallet
tde_configuration KEYSTORE_CONFIGURATION=FILE

Configuration du Keystore

Dans cet article, nous allons créer un Keystore en AUTO_LOGIN accessible depuis n’importe quel serveur.

Création du Software Keystore avec mot de passe :

[oracle] sqlplus / as sysdba
SQL> ADMINISTER KEY MANAGEMENT CREATE KEYSTORE IDENTIFIED BY my_password ;
SQL> SELECT WRL_TYPE,WRL_PARAMETER,STATUS,WALLTER_TYPE FROM V$ENCRYPTION_WALLET ;

WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE
------------- -------------------------------------------------- ------------------------------ --------------------
FILE /u01/app/oracle/admin/ORCL/wallet/tde/ CLOSED UNKNOWN

Création du Keystore auto_login en utilisant les informations du software keystore :

[oracle] sqlplus / as sysdba
SQL> ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE '/u01/app/oracle/admin/ORCL/wallet/tde/' IDENTIFIED BY my_password
SQL> SELECT WRL_TYPE,WRL_PARAMETER,STATUS,WALLTER_TYPE FROM V$ENCRYPTION_WALLET ;

WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE
------------- -------------------------------------------------- ------------------------------ --------------------
FILE /u01/app/oracle/admin/ORCL/wallet/tde/ OPEN_NO_MASTER_KEY AUTOLOGIN

Ouverture du keystore

Maintenant que notre keystore est prêt, il faut l’ouvrir afin de créer une clé et un mot de passe TDE qui nous servira à encrypter les données.

[oracle] sqlplus / as sysdba
SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN FORCE KEYSTORE IDENTIFIED BY my_password ;
SQL> SELECT WRL_TYPE,WRL_PARAMETER,STATUS,WALLTER_TYPE FROM V$ENCRYPTION_WALLET ;

WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE
------------- -------------------------------------------------- ------------------------------ --------------------
FILE /u01/app/oracle/admin/ORCL/wallet/tde/ OPEN AUTOLOGIN

Configurer le mot de passe TDE

Création du mot de passe TDE avec ouverture du Keystore. On crée également un backup du keystore par sécurité.

[oracle] sqlplus / as sysdba
SQL> ADMINISTER KEY MANAGEMENT SET KEY FORCE KEYSTORE IDENTIFIED BY my_password_tde WITH BACKUP ;

Crypter les tablespaces

Une fois les étapes précédentes effectuées, il est possible de crypter un nouveau tablespace ou un déjà existant. Nous allons ici utiliser le cryptage par défaut (AES 128).

Nouveau tablespace :

[oracle] sqlplus / as sysdba
SQL> CREATE TABLESPACE my_tde_tbs DATAFILE '/oradata/my_tde_tbs01.dbf' SIZE 150M ENCRYPTION ENCRYPT ;

Tablespace existant :

[oracle] sqlplus / as sysdba
SQL> ALTER TABLESPACE USERS ENCRYPTION ONLINE ENCRYPT ;

Vérification

Ci-dessous, 2 manières de vérifier que l’encryption est OK.

Par tablespace :

SQL> select TABLESPACE_NAME, STATUS, ENCRYPTED from DBA_TABLESPACES;

TABLESPACE_NAME STATUS ENC
------------------------------ --------- ---
SYSTEM ONLINE NO
SYSAUX ONLINE NO
UNDOTBS2 ONLINE NO
TEMP ONLINE NO
UNDOTBS1 ONLINE NO
USERS ONLINE YES

Par datafile :

[oracle]# dbv file=+DATA/ORCL/DATAFILE/orcl.322.1071825811 USERID=SYS/MDP

DBVERIFY: Release 12.1.0.2.0 - Production on Tue Jun 8 17:00:00 2021

Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.

DBVERIFY - Verification starting : FILE = +DATA/ORCL/DATAFILE/orcl.322.1071825811

DBVERIFY - Verification complete

Total Pages Examined : 1832
Total Pages Processed (Data) : 0
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 0
Total Pages Failing (Index): 0
Total Pages Processed (Other): 1475
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 61
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 296
Highest block SCN : 72506092 (0.72506092)