Usando la utilidad WRAP, podemos esconder el código de los
procedimientos, funciones y paquetes, a fin de evitar operaciones de
ingeniería en reversa o copia del código, principalmente cuando un
procedimiento o función hacen algún calculo, operación especial que no
deseamos sea conocido por los demás. Por lo anterior, esta utilidad
puede utilizarse para encriptar el código de las siguientes
sentencias:
CREATE [OR REPLACE] FUNCTION nombre_de_la_funcion
CREATE [OR REPLACE] PROCEDURE nombre_del_procedimiento
CREATE [OR REPLACE] PACKAGE nombre_del_paquete
CREATE [OR REPLACE] PACKAGE BODY nombre_del_paquete
CREATE [OR REPLACE] TYPE nombre_del_tipo ... OBJECT
CREATE [OR REPLACE] TYPE BODY nombre_del_tipo
Es importante tener claro que los nombres de variables, nombres de
tablas y literales, no son encriptados; estos quedan igual en el
código encriptado. Por lo anterior, no se recomienda usar esta
utilidad como medio para encriptar claves o nombres de usuarios.
Veamos un breve ejemplo:
Creamos un archivo de texto, donde se encuentra el código plsql para
crear una función que calcula la función matemática potencia. Para el
ejemplo vamos a llamar a este archivo ejemplo.sql
Ejemplo.sql
CREATE or REPLACE FUNCTION potencia (base in number, exponente in
number)RETURN NUMBER IS
c number:=1;
BEGIN
for i in 1..exponente loop
c := c * base;
end loop;
return c;
END;
Una vez se ha creado el archivo, procedemos a ejecutar en la linea de
comandos del sistema operativo:
ORACLE_HOME\bin\wrap iname=ejemplo.sql oname=ejemplo.enc
iname: nombre del archivo de entrada
oname: nombre del archivo de salida
(ORACLE_HOME: directorio de instalación de oracle ejem: E:\oracle
\product\10.1.0\Db_2\ )
E:\oracle\product\10.1.0\Db_2\BIN>wrap iname=ejemplo.sql
oname=ejemplo.enc
PL/SQL Wrapper: Release 10.1.0.2.0- Production on Mar Ene 25 15:38:31
2005
Copyright (c) 1993, 2004, Oracle. All rights reserved.
Processing ejemplo.sql to ejemplo.enc
Si editáramos el archivo generado ejemplo.enc, tendríamos el siguiente
bloque de código:
CREATE or REPLACE FUNCTION potencia wrapped
a000000
b2
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
8
af c6
A6tVTuslOz2oYSH
+nFVJI4EvyPUwgy7wNZ5qfHQ2EvAPawu68sqx43bgXD6sK2VKsnO1DGYH
iTn1MYgrmMNjZujI2EvxR7jwTpfKnqMk904dzhNZk9m9GWWc7Kq9kbKm9RpSq3yiP/RA/
wjg
ubrHffi1sMSTwDHzX7d4u1Bgs70ex5y0RT/GLzi41pyyKMM+Xg==
/
Una vez generado el archivo con el código de nuestra función
encriptado, procedemos a la función.
Solamente basta con ingresar al sqlplus e ingresar el comando
SQL> @directorio_donde_se_encuentra_el_archivo\ejemplo.enc
Function created.
Qué pasa si se quiere modificar el código del procedimiento?
Ya que el código original se encuentra en los archivos
originales(valga la redundancia) y que el código de la función
almacenada no se puede desencriptar, es indispensable tener un
servidor de archivos, o un mecanismo que sirva como repositorio para
los archivos, al cual se pueda recurrir para buscar el texto original,
modificarlo, encriptarlo y ejecutarlo nuevamente.
Listo, eso es todo.