Как правильно реализовать систему блокировки пользователя?
============================================================

 Здравствуйте. В своем приложении реализую систему авторизации. После нескольких неудачных попыток входа, пользователь должен быть заблокирован и разблокирован после нескольких часов.  

Как сделал это я:  

есть таблица пользователей, в которой есть идентификатор, логин, хеш от пароля, соль и другая служебная информация.  

Есть таблица, в которую добавляются все неудачные попытки входа. Она имеет следующую структуру: идентификатор пользователя (Внешний ключ на идентификатор в таблице с пользователями), IP, количество неудачных попыток.  

Также в этой таблице есть триггер, который срабатывает при вставке и обновлении. Если попыток входа > 5, то пользователь добавляется в таблицу, где находятся все заблокированные пользователи. Эта таблица имеет следующую структуру: идентификатор пользователя (Внешний ключ на таблицу с пользователя), время блокировки (Когда пользователь был заблокирован), время разблокировки (Когда пользователя надо разблокировать).  

Есть процедура, которая запускается с помощью планировщика и разблокирует пользователей, у которых время разблокировки пришло.  

  

Что можете сказать насчёт моего решения?  

П.С. Используется база данных Postgresql.  

Да, решение работает, но хотелось бы сделать так, как делать надо, а не что-нибудь, что лишь бы работало. 

 Можно обойтись одной таблицей с неудачными попытками. Структура:  

  

* ID пользователя
* IP адрес
* Дата/время

  

При авторизации делаете запрос за x последние x часов, если неудачных попыток больше y, вычисляете, до какого времени пользователь должен быть заблокирован. Если это время еще не прошло, не пускаете пользователя. Все это можно вычислить в запросе.  

  

Обновлять дополнительно ничего не нужно. Периодически можно чистить таблицу.