Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/11/2014, 13:21
Avatar de Namiwis
Namiwis
 
Fecha de Ingreso: mayo-2013
Ubicación: Crustaceo Cascarudo
Mensajes: 162
Antigüedad: 11 años
Puntos: 10
Visto Bueno Trigger

Hola amigos.

Hoy vengo a ustedes con el sig. trigger, y me gustaria saber si le dan el visto bueno, o le cambiarian algo.

Lo he probado y funciona, pero no se si lo estoy haciendo de la manera mas Optima.

Alla Vamos.

================================================== =======

El panorama es el siguiente, tengo un WebService, lo que deseo hacer, es que un usuario que tenga 3 errores seguidos (cualquier tipo de error, llamese autenticación, invocación o de funcion) se bloquee por 5 minutos.

Estos 3 errores seguidos, deben ser en un lapso menor de 3 minutos, entre cada invocación, osea que si, en menos de 1 minuto hago 3 intentos, y en los 3 obtengo error, se me bloquea, si hago 2 errores seguidos, y despues una petición exitosa se borre el historial, si hago 2 errores seguidos y espero 3 minutos y vuelvo a intenta, independiente que sea exitosa o erronea, el conteo se borre.

Para esto, cree 2 tablas, 1 de IntentosFallidos y otra de UsuarioBloqueado, en intentos fallidos, voy insertando el usuario y la hora, en que fallo, la otra tabla, ya cuando el usuario este bloqueado y la hora, lo demas lo controlo mediante codigo.

================================================== ==

el trigger que valida eso es el siguiente.

Código SQL:
Ver original
  1. DECLARE @Usuario VARCHAR(50)
  2. DECLARE @UltimoIntento datetime
  3. DECLARE @Intentos NUMERIC
  4. DECLARE @Fecha datetime
  5.  
  6. SELECT @Usuario = (SELECT Usuario FROM inserted)
  7. SELECT @UltimoIntento = (SELECT TOP 1 Fecha FROM tblIntentosFallidos WHERE Usuario = @Usuario)
  8. SELECT @Fecha = (GETDATE())
  9.  
  10. IF(DATEDIFF("MI", @UltimoIntento,@Fecha) > 3)
  11. BEGIN
  12.     DELETE FROM tblIntentosFallidos WHERE Usuario = @Usuario
  13. END
  14. ELSE
  15.  
  16. SELECT @Intentos = (SELECT COUNT(*) FROM tblIntentosFallidos WHERE Usuario = @Usuario)
  17.  
  18. IF (@Intentos = 3)
  19.     BEGIN
  20.         INSERT INTO tblUsuarioBloqueado VALUES (@Usuario,@Fecha)
  21.         DELETE FROM tblIntentosFallidos WHERE Usuario = @Usuario
  22.     END
Como ven? lo he probado y funciona, pero me pregunto, si estare en lo correcto o es que esta funcionando de otra manera.

Saludos.
__________________
http://binarysuns.com.mx/

Última edición por gnzsoloyo; 25/11/2014 a las 14:11