Sie sind auf Seite 1von 3

LOGIN EN POWER BUILDER

El login es simplemente el proceso de autenticacin del usuario en la base de datos del sistema. Esta
autenticacin le permite, dependiendo de los permisos, grabar nuevos datos, modificar los existentes o
eliminarlos.
Es til el login? Bajo cualquier punto de vista que se lo mire es ms que til ya que nos asegura que el
usuario que estuvo o est interactuando con nuestros datos pertenece a nuestra red autorizada y no es
un intruso.
Qu beneficios tiene loguearse? Adems del antedicho, el login sirve en primera instancia para fijar
rangos de privilegios. Esto es, podemos autorizar o no a ciertos usuarios o grupos de usuarios para que
graben, modifiquen o borren datos, o en contrapartida bloquear ciertos procesos que queremos reservar
solo para miembros privilegiados. Otra de las grandes utilidades es poder detectar quin fue el que
borr, modific o grab cierto dato para efectuar correcciones a nivel cdigo o a nivel personal.
Para aprender ms sobre autenticacin o login vean esta artculo de wikipedia. A continuacin les dejo
un sencillo script de login explicado para Powerbuilder 11.5. Las caractersticas de este script son
simples: permite validar a el usuario y le da tres intentos (o ms, segn configuremos) ante de
"banearlo" o bloquearle el acceso. Esto ltimo es til cuando queremos evitar un ataque de fuerza bruta
al login del sistema. Veamos el cdigo:

01./* Script para validar el ingreso del usuario


02. by Moatsoft (c) 2009
03.Objeto: w_login --> cb_ingresar
04.Evento: clicked()
05.Work: Valida el ingreso del usuario. Ver cdigo.
06.Call: desde App sistema luego de la conexin a la BD
07.*/
08.// Variables locales
09.string s_mostrar
10.// Variables de los permisos
11.// i_bloqueo: es una variable para contar la cantidad de intentos de
logueo y posterior bloqueo
12.// i_desactivo: es para identificar si el usuario est "desactivado" o
dado de baja en el sistema
13.//por ejemplo un ex empleado
14.int i_bloqueo, i_desactivo
15.//Cargando datos en las variables
16.SELECT id_user, // Cdigo del Usuario
17.user_name, // Nombre del Usuario
18.user_pass, // Contrasea del Usuario
19.user_nivel, // Nivel de acceso
20.user_activo, // Usuario activo o no
21.user_bloqueo // Usuario bloqueado o no
22.// Cargamos todos los datos en variables globales lo que nos permitir
luego registrar el nombre del usuario
23.// o el dato que queramos en la BD para saber quin hizo la operacin
24.INTO :gi_iduser, // Variable global: cdigo de usuario
25.:gs_usuario, // Variable global: nombre de usuario

26.:gs_password, // variable global contrasea


27.:gs_pista, // variable global ayuda contrasea
28.:gi_nivel, // Variable global: nivel de permisos
29.:gb_activo, // Variable global: saber si est activo
30.:i_bloqueo // Variable local: si est bloqueado o no
31.FROM USUARIOS
32.WHERE user_name=:sle_user.text;
33./*Reviso si el Select encontr el usuario. Sino lo encontr le doy 3
intentos
34.sin decir que no existe para evitar la fuerza bruta.
35.Si el usuario existe pero est bloqueado le mando la advertencia
36.*/
37.if gs_usuario="" then
38.i_bloqueo=3
39.else
40.if gb_activo=0 then
41.if sle_pass.text=gs_password then
42.MessageBox("Aviso Importante", &
43."Su identificacin es correcta pero su cuenta est
desactivada.~n~rConsulte con su administrador", &
44.StopSign!)
45.else
46.MessageBox("Aviso Importante", &
47."La contrasea que introdujo es invlida. ~n~rAdems su cuenta est
desactivada. ~n~rConsulte con su administrador", &
48.StopSign!)
49.end if
50.halt
51.end if
52.end if
53.// Conteo de intentos de logueo y actualizacin de tabla en caso de
pasarse
54.if ii_cuantosclick=i_bloqueo then
55.messagebox("Aviso Importante","A superado el nmero de intentos. El
Usuario ha sido bloqueado. Consulte con su administrador",StopSign!,Ok!)
56.i_desactivo=0
57.// Si sobrepas los intentos de login bloqueo el usuario
58.UPDATE usuarios
59.SET user_activo=:i_desactivo
60.WHERE user_name=:gs_usuario;
61.commit;
62.halt
63.end if
64.//Validando el usuario y la contrasea
65.if sle_user.text<>"" and sle_pass.text<>"" then
66.if sle_pass.text=gs_password then
67.if gb_activo=1 then
68.//Cierro la ventana de loguin

69.close(w_login)
70.// Abro la pantalla principal del sistema
71.open(w_main)
72.end if
73.else
74.ii_cuantosclick=ii_cuantosclick+1
75.s_mostrar="Usuario y/o contrasea no vlida. Intento Nro:
"+string(ii_cuantosclick)+" de "+string(i_bloqueo)+" intentos"
76.messagebox("Aviso Importante",s_mostrar)
77.sle_user.text=""
78.sle_pass.text=""
79.sle_user.setfocus()
80.end if
81.else
82.messagebox("Aviso Importante","Por favor ingrese sus datos",Question!)
83.sle_user.setfocus( )
84.end if
85.// Fin logueo
Nota: las variables definidas como "ii_" deben estar declaradas como variables de instancia.