16 avril 2026

Il est parfois nécessaire de masquer (obscurcir) notre code source PL/SQL, notamment pour des raisons de sécurité, lorsque, par exemple, nous partageons notre code avec des tiers. Pour ce faire, on utilise traditionnellement l'outil WRAP, que nous détaillons dans cet article. À partir de la version 10g R2, il est possible d'effectuer cette action avec le package DBMS_DDL.WRAP, dont nous parlerons dans article .
Il est important de connaître certaines de ses limites avant de l'appliquer, en particulier dans les environnements de production. Il est très important de disposer d'une copie du code PL/SQL et d'un contrôle des versions de celui-ci avant d'appliquer la méthode « wrap » à notre code.

Fondamentalement, les limites de l'utilitaire WRAP sont les suivantes :

Les fichiers obscurcis, dans lesquels nous avons utilisé wrap, ne sont pas compatibles entre les versions Oracle .
Il n'est pas possible d'utiliser wrap dans le code des déclencheurs.
Il n'est pas sûr pour sécuriser les mots de passe ou les noms de tables.
Il ne détecte pas les problèmes de syntaxe ou les erreurs de code générés dans notre code non obscurci.
Le code obscurci est plus long que l'original.
Wrap obscurcit uniquement le corps d'un paquet ou le type, mais pas sa spécification.

Pour voir comment cela fonctionne, nous allons créer une fonction simple, que nous obfusquerons avec wrap.

CREATE OR REPLACE FUNCTION dia_today_day RETURN VARCHAR2 AS
BEGIN
RETURN TO_CHAR(SYSDATE, 'DD-MON-YYYYY HH24:MI:SS') ;
END dia_today ;
/

Nous vérifions que la fonction est correcte :


select today_day from dual ;

TODAY_DAY
------- -------
31-AUG-2023 20:47:53

Nous copions le code de notre fonction dans le système d'exploitation.

[oracle u01]$ catfonction_jour_d'aujourd'hui.sql
CREATE OR REPLACE FUNCTION jour_d'aujourd'hui RETURN VARCHAR2 AS
BEGIN
RETURN TO_CHAR(SYSDATE, ‘DD-MON-YYYY HH24:MI:SS’);
END jour_d'aujourd'hui;
/

Nous vérifions dans SQL-Developer que l'apparence de notre fonction est la même que d'habitude, avant d'appliquer l'obscurcissement.

Dans le système d'exploitation, nous lançons la commande pour obscurcir le code PL-SQL.

La sintaxis es:
wrap iname=<fichero entrada> oname=<fichero de salida ofuscado>

[oracle u01]$ wrap iname=fonction_jour_d'aujourd'hui.sql oname=fonction_jour_d'aujourd'hui.out
PL/SQL Wrapper : version 19.0.0.0.0 – Production le jeudi 31 août à 21 h 17 min 23 s 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle ses filiales. Tous droits réservés.
Traitement de fonction_jour_d'aujourd'hui.sql vers fonction_jour_d'aujourd'hui.out

L'utilitaire signalera le code obscurci pour exécution.

CREATE OR REPLACE FUNCTION dia_de_hoy wrapped
a000000
1
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
8
74 b6
LH4SgLm3AMbYAySR+WVH9QmeSoAwg8eZgcfLCNL+Xlr6WV+uofByhWTD58CyvbKbXufHdMAz
uHRlCbh0i8DAMv7ShgmpoQLOxtYaIazv1kx2hHEyjndMcfUQc3P17zdnr2pqhduXsevFV1RM
66tN+j1y6a+V638ZlSoZaiQl7Pumz30sVg==
/

Copier le code et l'exécuter (SqlPlus, SqlDeveloper, etc).

Désormais, toutes les nouvelles sessions se connectant à la base de données n'auront pas accès au code sous une forme lisible, et le code sera caché aux utilisateurs.

YouTube
LinkedIn