Password con 3 intentos por usuario

Ayer te pregunté sobre un problema en la autentificación del usuario para entrar en la base de datos, ¿lo recuerdas?.
Una vez solucionado dicho problema, me surge la idea de hacer que esos tres intentos sean por cada usuario, de manera que si un usuario agota sus intentos, otro que intente entrar a continuación no tenga ningún problema. También me gustaría, que al usuario que los agote, se le bloquee la password. He pensado en crear dentro de la tabla "Usuarios" el campo "Bloqueado", con los valores FALSE o TRUE, aunque no se como guardar el valor TRUE en la tabla de "Usuarios" desde el evento ACEPTAR_Click() del formulario PASSWORD. Hecho esto, también me gustaría que en el evento ACEPTAR_Click(), se compruebe que el usuario en cuestión no está bloqueado y que si es así se cierre la aplicación.

1 Respuesta

Respuesta
1
¿Cerraste tu pregunta anterior?
para varios usuarios , puedes al cambiar usuario borrar contador
claro que un usuario vivo cambiaria el nombre al segundo intento , burlando tu seguridad
para el bloqueo
dim rst as recordset  
Set rst = CurrentDb.OpenRecordset("Select Bloqueo From Usuarios where usuario='" ComboBoxUsuarioActual & "'")
If rst.RecordCount Then
     rst.MoveFirst
     rst.Edit
     rst!Bloqueo=True 
    rst.Update
end if
o para preguntar si esta bloqueado
If rst.RecordCount Then
     rst.MoveFirst
     if rst!Bloqueo=True then ............
end if
------------------
para cerrar el recordsource
rst.close
set rst=nothing
pero no es necesario pues al salir de un sub o function se cierra y borra variables
Lo siento Luis pero algo no me funciona, te copio el código que estoy utilizando:
Private Sub Aceptar_Click()
Dim Permiso As Integer
Dim rst As Recordset
Set Permiso = CurrentDb.OpenRecordset("Select Password From Usuarios where Password = '" & Forms![frmAutentificar]![Password].Value & "'")
'Set rst = CurrentDb.OpenRecordset("Select Bloqueado From Usuarios where NombreUsuario = '" & Forms![frmAutentificar]![NombreUsuario].Value & "'")
If rst!Bloqueado = True Then
Me.NombreUsuario.Value = ""
Me.Password.Value = ""
Me.NombreUsuario.SetFocus
MsgBox "Usuario no autorizado o con password bloqueada", vbCritical, " ¡ ATENCIÓN !  Acceso denegado                        "
End If
'Permiso = DLookup("[Usuarios].[Password]", "[Usuarios]", "[Password] Like '" & Forms![frmAutentificar]![Password].Value & "*'")
If Intentos >= 3 Then
    MsgBox "Usuario no autorizado o con password bloqueada", vbCritical, " ¡ ATENCIÓN !  Acceso denegado                        "
    DoCmd.Close acForm, "frmAutentificar"
End If
If Permiso = Forms![frmAutentificar]![Password].Value Then
    Intentos = 0
    DoCmd.Close acForm, "frmAutentificar"
    DoCmd.OpenForm "PANEL DE CONTROL"
    Else
    Intentos = Intentos + 1
    If Intentos = 1 Then
    'MsgBox " " & Intentos & "º intento de Permiso fallido, le quedan dos más ", 48, " ¡ ATENCIÓN ! Clave de acceso incorrecta "
    MsgBox "Primer intento de acceso fallido, le quedan dos más ", 48, "      ¡ ATENCIÓN !  Clave de acceso incorrecta          "
    Password.SetFocus
    Me.Password.Value = ""
    Exit Sub
    ElseIf Intentos = 2 Then
    MsgBox "Segundo intento de acceso fallido, le queda otro intento       ", 48, "      ¡ ATENCIÓN !  Clave de acceso incorrecta               "
    Password.SetFocus
    Me.Password.Value = ""
    Exit Sub
    ElseIf Intentos >= 3 Then
    MsgBox "Tercer intento de acceso fallido, no le quedán más intentos ", 48, "      ¡ ATENCIÓN !  Clave de acceso incorrecta               "
    MsgBox "Usuario no autorizado o con password bloqueada", vbCritical, " ¡ ATENCIÓN !  Acceso denegado                        "
    DoCmd.Close acForm, "frmAutentificar"
    Exit Sub
    End If
    End If
End Sub
Y el caso es que si la primera parte del código:
Dim rst As Recordset
'Set rst = CurrentDb.OpenRecordset("Select Bloqueado From Usuarios where NombreUsuario = '" & Forms![frmAutentificar]![NombreUsuario].Value & "'")
If rst!Bloqueado = True Then
Me.NombreUsuario.Value = ""
Me.Password.Value = ""
Me.NombreUsuario.SetFocus
MsgBox "Usuario no autorizado o con password bloqueada", vbCritical, " ¡ ATENCIÓN !  Acceso denegado                        "
End If
La separo y la pongo en otro evento, como por ejemplo después de actualizar el Texbox "Password", entonces si que todo el código funciona, pero necesito que todo esté dentro del evento Aceptar_Click(), ya que cuando un usuario agote sus tres intentos quiero que el campo Bloqueo de la tabla Usuarios se almacene como TRUE.
También he pensado, que para evitar que cualquier usuario espabilado pueda burlar mi seguridad, guardar la variable Intentos en un campo de la tabla "Usuarios", pero no se como hacerlo.
La respuesta te la di antes
No has puesto el static para que guarde localmente los reintentos
Y no tienes bloqueo en archivo tampoco
Mejor enviame lo que tienes y te lo armo
[email protected]
¿Permiso es integer? O recordset
También te tengo un demo hecho mandame tu email por acá o en mi email
Para mandártelo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas