Mise en œuvre du chiffrement transparent des données dans Oracle 19c, étape par étape

Le chiffrement transparent des données (TDE) vous permet de chiffrer les données sensibles que vous stockez dans les tables et les tablespaces.

Une fois les données chiffrées, elles sont déchiffrées de manière transparente pour les utilisateurs ou applications autorisés lorsqu'ils accèdent à ces données. Le TDE permet de protéger les données stockées sur un support (également appelées données au repos) en cas de vol du support de stockage ou du fichier de données.

Dans ce guide, je vais vous montrer comment implémenter Oracle TDE sur RAC, mais vous devriez être capable de modifier la procédure pour une base de données autonome.

Vérifier que le wallet_root n'est pas défini.

SQL> show parameter wallet_root

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
wallet_root                          string

Assurez-vous maintenant que vous avez défini db_create_file_dest

SQL> show parameter db_create_file

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest                  string      +DATAC3

Définir la racine du portefeuille

alter system set wallet_root='+DATAC3/LSG01' scope=spfile sid='*';

Redémarrer la base de données pour que les modifications soient prises en compte.

[oracle@xcm1iddb001 ~]$ srvctl stop database -d LSG01
[oracle@xcm1iddb001 ~]$ srvctl start database -d LSG01

Vérifiez que les paramètres ont été définis.

show parameter wallet_root

show parameter tde_configuration

Définir la configuration tde_configuration

alter system set tde_configuration="keystore_configuration=file" scope=both sid='*';

SQL> show parameter tde_configuration

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
tde_configuration                    string      keystore_configuration=file

Créer la base de données de clés

SQL> ADMINISTER KEY MANAGEMENT CREATE KEYSTORE IDENTIFIED BY BSLSG01;

keystore altered.

Ouvrir le dépôt de clés

-- with PDBs
SQL> ADMINISTER KEY MANAGEMENT set keystore open identified by BSLSG01 container=ALL;

keystore altered.

-- without PDBs
ADMINISTER KEY MANAGEMENT set keystore open identified by BSLSG01;

Régler la clé

-- with PDBs
SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY BSLSG01 with backup container=ALL;

keystore altered.

--without PDBs
ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY BSLSG01 with backup;

Activer la connexion automatique

-- auto login
SQL> ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE IDENTIFIED BY BSLSG01;

keystore altered.

set linesize 120
column STATUS format a20
column WRL_PARAMETER format a60
column MASTERKEY_ACTIVATED format a20
column WALLET_TYPE format a20

SQL> SELECT CON_ID, STATUS, WRL_PARAMETER,WALLET_TYPE FROM V$ENCRYPTION_WALLET;

    CON_ID STATUS               WRL_PARAMETER                                                WALLET_TYPE
---------- -------------------- ------------------------------------------------------------ --------------------
         1 OPEN                 +DATAC3/LSG01/tde/                                           PASSWORD
         2 OPEN                                                                              PASSWORD
         4 OPEN                                                                              PASSWORD

A partir de la requête ci-dessus, vous pouvez vérifier qu'il n'y a toujours pas d'autologin.

Vous devez faire en sorte qu'il s'agisse d'un autologin.

Redémarrez la base de données et réessayez la requête

[oracle@xcm1iddb001 ~]$ srvctl stop database -d LSG01
[oracle@xcm1iddb001 ~]$ srvctl start database -d LSG01

set linesize 120
column STATUS format a20
column WRL_PARAMETER format a60
column MASTERKEY_ACTIVATED format a20
column WALLET_TYPE format a20

SELECT CON_ID, STATUS, WRL_PARAMETER,WALLET_TYPE FROM V$ENCRYPTION_WALLET;

    CON_ID STATUS               WRL_PARAMETER                                                WALLET_TYPE
---------- -------------------- ------------------------------------------------------------ --------------------
         1 OPEN                 +DATAC3/LSG01/tde/                                           AUTOLOGIN
         2 OPEN                                                                              AUTOLOGIN
         4 OPEN                                                                              AUTOLOGIN

Activer le cryptage pour les nouveaux tablespaces

alter system set encrypt_new_tablespaces = always scope=both sid='*';

ALTER SYSTEM SET "_tablespace_encryption_default_algorithm"=AES256 scope=both sid='*';

Vérifier s'il existe des tablespaces cryptés

select TABLESPACE_NAME, ENCRYPTED from dba_tablespaces where ENCRYPTED='YES';

select TABLESPACE_NAME, ENCRYPTED from dba_tablespaces order by 1;

Supposons que vous souhaitiez crypter tous les tablespaces d'un schéma.

Vérifier sur quels tablespaces ce schéma a des objets

SQL> select distinct tablespace_name 
from dba_segments where owner='SCHEMA1';

TABLESPACE_NAME
------------------------------
TS_SGRI_IDX
TS_SGRI_DAT

Pour crypter un tablespace, il suffit d'utiliser la commande suivante

alter tablespace TS_SGRI_DAT encryption online encrypt;

Faites de même pour les autres tablespaces.

Si vous souhaitez simplement crypter une colonne de tableau, vous devez utiliser la commande suivante

ALTER TABLE schema.table MODIFY (column ENCRYPT);

N'oubliez pas que le cryptage des colonnes de la table est par défaut de type AES192.

Si vous souhaitez crypter vos tables avec AES256, vous devez spécifier le type de cryptage dans la commande comme suit

ALTER TABLE schema.table MODIFY (column ENCRYPT USING 'AES256');

Pour vérifier les colonnes qui ont été cryptées, exécutez la requête suivante

column table_name format a15;
column column_name format a15;
column encryption_alg format a20;

select table_name , column_name, encryption_alg  from dba_encrypted_columns;

7 réponses sur “Implementing Transparent Data Encryption in Oracle 19c Step by Step”

  1. J'ai besoin d'un cryptage au niveau de la colonne et j'ai suivi toutes les étapes comme vous l'avez montré dans Oracle 19C. Mais quand je fais select * from table. Je vois des données dans la colonne. Je veux dire qu'elles ne sont pas cryptées. Y a-t-il quelque chose que je n'ai pas compris ?

  2. Pouvez-vous expliquer comment la valeur d'une colonne est décryptée à partir d'un enregistrement dans une table et comment elle est affichée dans l'application frontale ?

  3. Bonjour à tous,

    Pourriez-vous ajouter quelques instructions supplémentaires sur la manière dont l'existence d'une réserve physique modifie la procédure ?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *