martes, 4 de noviembre de 2025

Error en WRAPPED de objetos en la base de datos con ediciones habilitadas a nivel de esquema

 

Imagina que tu base de datos es una biblioteca y tus programas (procedimientos, paquetes, vistas, etc.) son los libros que se usan para trabajar con los datos.

Cuando quieres hacer una actualización a esos programas (como mejorar un paquete PL/SQL), normalmente tendrías que reemplazar el “libro viejo” por uno nuevo. Si alguien está usando el libro viejo en ese momento, podría haber problemas o peor aún que tal si la nueva versión no funciona como debería hacerlo.?

Editioning en Oracle permite que podamos habilitar la posibilidad de manejar varias copias de una misma unidad de programación.

La versión actual se podría mantener en la base de datos mientras que otros usuarios están probando las nuevas funcionalidades en la nueva versión.

Pero en este post no hablaré de las ediciones, sino de un pequeño inconveniente que me he encontrado a la hora de intentar hacer un WRAP (ofuscación) sobre el código fuente PL/SQL dentro de la base de datos.

Si utilizas el programa "wrap" a nivel del servidor de la base de datos, es realmente sencillo poder ofuscar el código fuente antes de crearlo en la base de datos.

Tenemos el siguiente contenido en un archivo que queremos ofuscar:

[oracle@srvdb-val scripts]$ cat sql1.sql
create procedure signo as
begin
DBMS_OUTPUT.PUT_LINE('Signo: '||chr(36));
end;
/
[oracle@srvdb-val scripts]$ wrap iname=sql.sql oname=sql1_wrap.sql

[oracle@srvdb-val scripts]$ cat sql1_wrap.sql
create procedure signo wrapped
a000000
369
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
7
48 81
99jW3DVEca9cb1YulwPEPlgnuZkwg5nnm7+fMr2ywFwW/1ly2eq4dIvAwDL+0obAUpuySv4o
sr3nsrMdBjAsriTqsoFwyGbVRIHsqxfQyrILgi4u9tHqJB/2Oaa1eY6r

/
Lo anterior no presenta ningún inconveniente, pero cuando se tienen habilitadas las ediciones a nivel del esquema y exportamos el código fuente para luego  hacer UNWRAP y modificar el código fuente para agregar una nueva funcionalidad o hacer un pequeño cambio, en el encabezado del código encontraremos que el SQLDeveloper agrega la palabra EDITIONABLE al encabezado de definición del objeto.

[oracle@srvdb-val scripts]$ cat sql1a.sql
create EDITIONABLE procedure signo as
begin
DBMS_OUTPUT.PUT_LINE('Signo: '||chr(36));
end;
/

[oracle@srvdb-val scripts]$ wrap iname=sql1a.sql oname=sql1a_wrap.sql
[oracle@srvdb-val scripts]$ cat sql1a_wrap.sql create EDITIONABLE procedure signo as begin DBMS_OUTPUT.PUT_LINE('Signo: '||chr(36)); end; / [oracle@srvdb-val scripts]$

Como resultado al ofuscar el código con la utilidad WRAP el archivo con la salida del código protegido no es correcto.

De facto, cuando un esquema ha sido modificado para soportar EDICIONES el agregará en el proceso de creación de un objeto el atributo EDITIONABLE de facto, por tanto, se puede quitar el atributo del encabezado del archivo que necesitamos ofuscar y no habrá ningún problema.

Este inconveniente se ha validado en 19.29, con el mismo comportamiento.

No hay comentarios:

Publicar un comentario

Te agradezco tus comentarios. Te esperamos de vuelta.

Todos los Sábados a las 8:00PM