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;
Merci mec, tu es le meilleur 😊
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 ?
Les données sont cryptées au niveau du fichier.
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 ?
Tout le cryptage est effectué au niveau des fichiers, de manière transparente pour l'application.
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 ?
Désolé, mais je ne dispose pas d'un tel environnement pour l'instant...