Notez qu'il est probablement plus sage de crypter et de déchiffrer vos données directement dans votre application plutôt que dans la base de données. Vous pouvez utiliser le package DBMS_CRYPTO d'Oracle. Il y a un example au milieu de la page de documentation.
Vous devez d'abord créer un package pour accéder au type de chiffrement à partir de l'expression SQL. Disons que vous voulez AES256 en mode CBC avec rembourrage:
CREATE PACKAGE pkg_so_42979606
AS
FUNCTION cipher_type RETURN PLS_INTEGER;
END pkg_so_42979606;
/
CREATE PACKAGE BODY pkg_so_42979606
AS
ctype CONSTANT PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
FUNCTION cipher_type RETURN PLS_INTEGER
IS
BEGIN
RETURN ctype;
END;
END pkg_so_42979606;
/
Ensuite, vous aurez besoin d'une clé. Vous pouvez demander à Oracle d'en générer un. Pour le manipuler facilement, je le déplacerai en Base64. Tirons un:
DECLARE
key_bytes_raw RAW(32);
key_char NVARCHAR2(64);
BEGIN
key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES(32);
key_char := UTL_I18N.RAW_TO_CHAR(UTL_ENCODE.BASE64_ENCODE(key_bytes_raw), 'AL32UTF8');
DBMS_OUTPUT.PUT_LINE('Key: ' || key_char);
END;
/
Key: pMV3D4xhyfNxp3YyfLWzAErGcKkIjK3X6uc/WIeVTls=
Ainsi, la clé de chiffrement, je vais utiliser est pMV3D4xhyfNxp3YyfLWzAErGcKkIjK3X6uc/WIeVTls=
.
Maintenant, je vais utiliser une table de test
CREATE TABLE so_42979606 (
id NUMBER PRIMARY KEY,
data NVARCHAR2(2000));
Vous pouvez insérer des données cryptées:
INSERT INTO so_42979606
VALUES (1,
DBMS_CRYPTO.ENCRYPT(UTL_I18N.STRING_TO_RAW('My clear data', 'AL32UTF8'),
pkg_so_42979606.cipher_type(),
UTL_ENCODE.BASE64_DECODE(UTL_I18N.STRING_TO_RAW('pMV3D4xhyfNxp3YyfLWzAErGcKkIjK3X6uc/WIeVTls=', 'AL32UTF8'))));
et récupérer les données chiffrées en clair.
SELECT id, UTL_I18N.RAW_TO_NCHAR(DBMS_CRYPTO.DECRYPT(data,
pkg_so_42979606.cipher_type(),
UTL_ENCODE.BASE64_DECODE(UTL_I18N.STRING_TO_RAW('pMV3D4xhyfNxp3YyfLWzAErGcKkIjK3X6uc/WIeVTls=', 'AL32UTF8'))),
'AL32UTF8') data
FROM so_42979606;
ID DATA
-- ----------------------
1 My clear data
Voir: [Base de données de sécurité avancée Guide de l'administrateur/3 de Securing Utilisation des données stockées Transparent Data Encryption] (https://docs.oracle.com/cd/B28359_01/network.111/b28530/asotrans.htm#g1011122) sur le Centre d'aide Oracle. –
@ OlivierJacot-Descombes Merci pour votre suggestion. Je ne peux pas utiliser le chiffrement de données transparent car il n'est pas disponible en édition standard. – Tajinder