Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

logearse con system desde oracle forms

Estas en el tema de logearse con system desde oracle forms en el foro de Oracle en Foros del Web. hola colegas Quisiera que me ayudaran con este problema. quiero crear un login en un formulario en oracle forms con form builder pero que pueda ...
  #1 (permalink)  
Antiguo 04/12/2011, 00:01
Avatar de Nanahara  
Fecha de Ingreso: octubre-2010
Mensajes: 57
Antigüedad: 14 años
Puntos: 0
Pregunta logearse con system desde oracle forms

hola colegas

Quisiera que me ayudaran con este problema.

quiero crear un login en un formulario en oracle forms con form builder pero que pueda entrar con el usuario system u otro que cree, pero al seleccionar el password no la puedo comprobar con la que se escribió ya que la sentencia

Código:
 select username, password from dba_users;
me devuelve la contraseña encriptada y no coinciden
si hay otra forma hagan mela saber
  #2 (permalink)  
Antiguo 05/12/2011, 22:25
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Respuesta: logearse con system desde oracle forms

Las contraseñas en dba_users.password están encriptadas, no se puede leer su valor o hacer comparaciones directas. No dices mucho sobre el objetivo del formulario, de todos modos te comento que existen dos modelos para la gestión de usuarios en las aplicaciones.

Por un lado, crear usuarios de base de datos, y según el tipo de aplicación, optar por:

1. No tener un proceso de validación, es decir, intentar una conexión directa con el usuario/contraseña del formulario, y si los datos son incorrectos, capturas el error ORA-01017: invalid username/password; logon denied para devolverlo como resultado por pantalla. Este caso es común en aplicaciones tipo herramientas de administración de base de datos como por ejemplo SQL Developer, SQL*Plus, etc.

2. Si tener un proceso de validación, esto es, hacer una conexión inicial con un usuario de base de datos (supongamos APPUSER) y a partir de ahí, validar los datos usuario/contraseña del formulario con un procedimiento casero (como ejemplo tienes la función validar_pass). Este caso es para aplicaciones con perfiles de seguridad pero que delegan la gestión a la base de datos, es una solución poco eficiente y además ya no se usa.

Código:
create or replace function validar_pass
 (usuario in varchar2, contrasena in varchar2)
return boolean
is
 temp_pass1 varchar2(1000);
 temp_pass2 varchar2(1000);
begin
 --lee la actual contraseña encriptada
 select password 
   into temp_pass1
 from dba_users
 where username = upper(usuario);

 --cambia la contraseña con el valor del parametro contrasena
 execute immediate 
    'alter user ' || usuario || ' identified by ' || contrasena;
 
 --lee la nueva contraseña encriptada 
 select password 
   into temp_pass2
 from dba_users
 where username = upper(usuario);

 --reestablece la contraseña al valor original
 execute immediate 
    'alter user ' || usuario || ' identified by values ' || 
        chr(39) || temp_pass1 || chr(39);
 
 --devuelve true si la dos contraseñas encriptadas son iguales
 return temp_pass1 = temp_pass2;
end;
/
Por otro lado, crear tu propia gestión de seguridad, es decir, hacer todas las conexiones con un único usuario de base de datos (APPUSER), y tener los usuarios de la aplicación como registros de una tabla donde puedes encriptar las contraseñas con el paquete DBMS_OBFUSCATION_TOOLKIT, en este modelo, para validar los datos usuario/contraseña del formulario solo tienes que hacer un SELECT sobre la tabla de usuarios y comparar la contraseña con las funciones DESDECRYPT y DESDECRYPT. Esta solución es la más recomendada.

Saludos
  #3 (permalink)  
Antiguo 07/12/2011, 10:54
Avatar de Nanahara  
Fecha de Ingreso: octubre-2010
Mensajes: 57
Antigüedad: 14 años
Puntos: 0
Respuesta: logearse con system desde oracle forms

grax lo voy a probar

Etiquetas: forms, logearse, select, system
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:31.