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

Visto Bueno Trigger

Estas en el tema de Visto Bueno Trigger en el foro de SQL Server en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 25/11/2014, 13:21
Avatar de Namiwis  
Fecha de Ingreso: mayo-2013
Ubicación: Crustaceo Cascarudo
Mensajes: 162
Antigüedad: 10 años, 11 meses
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
  #2 (permalink)  
Antiguo 25/11/2014, 13:55
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Visto Bueno Trigger

hay una cosa que se llama politicas de sql server y eso es lo que te sirve para tracear los bloqueso de usuarios despues de un login fallido

http://www.sqlshack.com/sql-server-s...ment-practice/

http://www.mssqltips.com/sqlserverti...and-log-files/

para lo que quieres hacer(a nivel de aplicacion) porque un trigger??? no podrias mejor usar procedures???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 25/11/2014, 15:13
Avatar de Namiwis  
Fecha de Ingreso: mayo-2013
Ubicación: Crustaceo Cascarudo
Mensajes: 162
Antigüedad: 10 años, 11 meses
Puntos: 10
Respuesta: Visto Bueno Trigger

Eso aplica para usuarios de base de datos? mis usuarios no son a nivel bd, son a nivel aplicacion.

Saludos.
__________________
http://binarysuns.com.mx/
  #4 (permalink)  
Antiguo 25/11/2014, 15:18
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Visto Bueno Trigger

si es a nivel aplicacion, porque el trigger????
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 25/11/2014, 15:24
Avatar de Namiwis  
Fecha de Ingreso: mayo-2013
Ubicación: Crustaceo Cascarudo
Mensajes: 162
Antigüedad: 10 años, 11 meses
Puntos: 10
Respuesta: Visto Bueno Trigger

Por que, los usuarios estan en una tabla (no son usuarios de bd), lo primero que se me ocurrio fue un trigger, asi ahorro codigo en la aplicacion y que la bd se encarge de eso.

Saludos.
__________________
http://binarysuns.com.mx/
  #6 (permalink)  
Antiguo 25/11/2014, 15:34
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Visto Bueno Trigger

una cosa es la capa de aplicacion y otra la de base de datos, aqui estas mezclando las 2 capas en una y para algo que realmente no es tarea de la base de datos....digo es mi muy humilde opinion como DBA......pero al final de cuentas tu eres la que sabe si le funciona o no :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 25/11/2014, 17:02
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Respuesta: Visto Bueno Trigger

Hola que tal, yo concuerdo con Libras. Desde mi punto de vista, seria mejor que el error lo controles en tu aplicación y solo mandes llamar a la BD hasta que lo vas a bloquear.
__________________
Your Code as a Crime Scene...
  #8 (permalink)  
Antiguo 25/11/2014, 17:36
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Visto Bueno Trigger

Y "meto mi cuchara", los TRIGGERS, no fueron creados para controlar la lógica de un aplicativo, fueron credos para validar la integridad referencial (DRI).
__________________
MCTS Isaias Islas

Etiquetas: select, siguiente, tabla, trigger
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 14:25.