domingo, 6 de febrero de 2011

¿Cómo almacenar un password en una tabla?

Generalmente siempre utilizamos la funcionalidad que ORACLE proporciona para realizar validaciones de usuario, esto es, permitir que el administrador de Oracle se encargue de validar nuestras credenciales.

Un software debería mantener sus propias validaciones, para esto nos podemos apoyar en el paquete dbms_obfuscation_toolkip, utilizar la función o procedimiento MD5 (se encuentra sobrecargado), esta es una función hash irreversible que encripta la contraseña que se ha ingresado como parámetro a la función, y es imposible, que a partir de esta contraseña encriptada podamos regresar a la contraseña origen.

Veamos un ejemplo de como implementar esta funcionalidad.


declare

-- Esta variable tendrá la contraseña
-- que vamos a encriptar

v_pass varchar2(100) := 'notemientoteamo';

-- Estas dos variables contienen la contraseña
-- pasada por la función md5

v_pass_obfuscaton1 varchar2(100);
v_pass_obfuscation2 varchar2(100);

-- Estas dos funciones convierten la contraseña
-- producto del paso md5, a un valor hexadecimal,
-- que es la se aconseja guardemos en la tabla

v_pass_hex1 varchar2(100);
v_pass_hex2 varchar2(100);

begin

v_pass_obfuscation1 := dbms_obfuscation_toolkit.md5(input_string=>v_pass);
v_pass_obfuscation2 := dbms_obfuscation_toolkit.md5(input_string=>v_pass);

select lower(rawtohex(v_pass_e1))
into v_c1
from dual;

select lower(rawtohex(v_pass_e2))
into v_c2
from dual;

update usuarios
set password = v_c1
where username = 1; -- bueno es un ejemplo

dbms_output.put_line(v_pass_hex1);
dbms_output.put_line(v_pass_hex2);

IF v_pass_hex1 = v_pass_hex2 THEN
dbms_output.put_line('IGUALES....');
END IF;

end;
/


Para poder utilizar el paquete dbms_obfuscation_toolkit el paso de parámetros a la función debe realizase por el método nombrado, no posicional; esto porque existen funciones y procedimientos que sobrecargan md5 y el kernel se "confunde" al tratar de darle solución.


v_pass_obfuscation1 := dbms_obfuscation_toolkit.md5(input_string=>v_pass);

__________________________________________________________________________________
"No permitas que nadie diga que eres incapaz de hacer algo, ni si quiera yo. Si tienes un sueño, debes conservarlo. Si quieres algo, sal a buscarlo, y punto. ¿Sabes?, la gente que no logra conseguir sus sueños suele decirles a los demás que tampoco cumplirán los suyos"
En busca de la  felicidad