bloc3:bdd-symetric-ciphering
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| bloc3:bdd-symetric-ciphering [2025/03/18 08:11] – richier.l | bloc3:bdd-symetric-ciphering [2025/04/23 14:55] (Version actuelle) – richier.l | ||
|---|---|---|---|
| Ligne 7: | Ligne 7: | ||
| Oracle fournit le package DBMS_CRYPTO permettant d' | Oracle fournit le package DBMS_CRYPTO permettant d' | ||
| - | Lien vers la documentation officielle | + | Lien vers le document officiel |
| ==== Droit d' | ==== Droit d' | ||
| **Pour utiliser DBMS_CRYPTO, | **Pour utiliser DBMS_CRYPTO, | ||
| - | '' | + | GRANT EXECUTE ON DBMS_CRYPTO TO utilisateur; |
| ===== Type des données chiffrées ===== | ===== Type des données chiffrées ===== | ||
| - | Les données à chiffrer peuvent être des chaînes de caractères (VARCHAR2, CLOB) ou des types binaires (BLOB). Il est recommandé d' | + | Les données à chiffrer peuvent être des chaînes de caractères (VARCHAR2, CLOB) ou des types binaires (BLOB). Il est recommandé d' |
| ===== Chiffrement des données ===== | ===== Chiffrement des données ===== | ||
| - | Prenons un exemple sur une base de donnée existante et Dans la table Clients, on ajoute une colonne nomCli_enc pour stocker les noms chiffrés : | + | Prenons un exemple sur une base de donnée existante et dans la table Clients, on ajoute une colonne nomCli_enc pour stocker les noms chiffrés : |
| - | '' | + | <code SQL>ALTER TABLE Clients ADD nomCli_enc RAW(2000);</ |
| Ensuite on chiffre les noms des clients existants et les stocke dans la colonne nomCli_enc : | Ensuite on chiffre les noms des clients existants et les stocke dans la colonne nomCli_enc : | ||
| - | </code> | + | < |
| - | '' | + | UPDATE Clients |
| SET nomCli_enc = DBMS_CRYPTO.ENCRYPT( | SET nomCli_enc = DBMS_CRYPTO.ENCRYPT( | ||
| src => UTL_RAW.cast_to_raw(nomCli), | src => UTL_RAW.cast_to_raw(nomCli), | ||
| typ => DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, | typ => DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, | ||
| key => UTL_RAW.cast_to_raw(' | key => UTL_RAW.cast_to_raw(' | ||
| - | iv => UTL_RAW.cast_to_raw(' | ||
| ); | ); | ||
| - | '' | ||
| </ | </ | ||
| - | ===== Déchiffrement des données ====='''' | + | ===== Déchiffrement des données ===== |
| + | Un gestionnaire (GESTK) veut récupérer le nom original : | ||
| + | <code SQL> | ||
| + | SELECT UTL_RAW.CAST_TO_VARCHAR2( | ||
| + | DBMS_CRYPTO.DECRYPT( | ||
| + | nomCli_enc, | ||
| + | DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, | ||
| + | UTL_RAW.cast_to_raw('MaCleSecrete16Bytes'), | ||
| + | UTL_RAW.cast_to_raw('InitialVector123') | ||
| + | ) | ||
| + | ) AS nomCli_dechiffre FROM Clients; | ||
| + | </ | ||
| + | ** | ||
| + | On peut également créée une fonction de déchiffrement pour simplifier les requêtes | ||
| + | ** | ||
| + | <code SQL> | ||
| + | CREATE OR REPLACE FUNCTION dechiffrer(p_data RAW) RETURN VARCHAR2 AUTHID CURRENT_USER AS | ||
| + | v_decrypted RAW(2000); | ||
| + | BEGIN | ||
| + | v_decrypted := DBMS_CRYPTO.DECRYPT( | ||
| + | p_data, | ||
| + | DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5, | ||
| + | UTL_RAW.cast_to_raw(' | ||
| + | UTL_RAW.cast_to_raw(' | ||
| + | ); | ||
| + | RETURN UTL_RAW.CAST_TO_VARCHAR2(v_decrypted); | ||
| + | END; | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | Donc un gestionnaire peut peut maintenant exécuter une requête simple : | ||
| + | <code SQL> | ||
| + | SELECT dechiffrer(nomCli_enc) AS nomCli FROM Clients; | ||
| + | </ | ||
bloc3/bdd-symetric-ciphering.1742281870.txt.gz · Dernière modification : 2025/03/18 08:11 de richier.l
