Hai bisogno di quella che viene chiamata una finestra di tentativo di password.
Fondamentalmente 2 campi nel database, uno LastPasswordAttempt (datetime) e PasswordAttemptCount (int)
Quindi ad ogni accesso, controlla quando si è verificato l'ultimo LastPasswordAttempt e se è stato negli ultimi, diciamo 10 minuti - incrementa il PasswordAttemptCount, altrimenti reimpostalo su 0 (o 1 perché hanno appena fallito).
Nella stessa logica, controlla se PasswordAttemptCount è uguale a dire 5 o più, se lo è - nega l'accesso all'utente. Potresti avere un terzo campo che li blocca per alcune ore o un giorno.
ad esempio CanLoginAfter(datetime) che puoi impostare su un giorno dall'ultimo tentativo di password.
Spero che questo aiuti