Сравните пароль с паролями за последние три месяца - PullRequest
0 голосов
/ 29 февраля 2012

Я работаю над приложением в ASP.NET 2.0, и я дал задачу, чтобы пароли не совпадали с последними тремя месяцами c # .net.В течение первых трех месяцев поля паролей будут иметь нулевое значение. Я буду хранить их в первые три месяца, но с 4-го месяца, что я должен сделать, как я буду хранить пароль в первом поле после сравнения пароля со всеми полями. Скажите мне некоторые решения, которые я считаю полностьюstucked.

Ответы [ 2 ]

2 голосов
/ 29 февраля 2012

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

CREATE TABLE `oldpasswords` (
  `userid` int(11) NOT NULL,
  `password` varchar(255) NOT NULL default '0',
  `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
  PRIMARY KEY  (`userid`,`password`, `timestamp`)
);

Затем вы можете запросить эту таблицу, когда пользователь попытается изменить свой пароль:

SELECT count(*) FROM oldpasswords where userid = :p_userid and 
    password = :p_pass and timestamp < DATE_SUB(NOW(), INTERVAL 3 MONTH);

если счет> 0, они использовали его в течение последних 3 месяцев.Если нет, вставьте ее в эту таблицу и измените также запись основной таблицы пользователей.

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

DELETE FROM oldpasswords WHERE timestamp < DATE_SUB(NOW(), INTERVAL 3 MONTH);

удалит все, что старше3 месяца, так как нам это больше не нужно.

0 голосов
/ 29 февраля 2012

Вы в основном смотрите на таблицу, в которой хранятся «удаленные» пароли, связанные с тем, к какой учетной записи пользователя они принадлежали и когда они были изменены. Когда они идут, чтобы изменить рабочий процесс идет:

  • Проверьте, совпадает ли новый пароль с текущим паролем
  • Проверьте, находится ли новый пароль в базе данных «старый пароль» (связан с этим пользователем) и попадает в диапазон времени

Если оба значения false , перейдите к изменению:

  • Добавить текущий пароль в качестве новой записи в базу данных «старый пароль» (с отметкой времени)
  • Измените пароль пользователя на новый и сохраните его обратно в свой профиль
  • (Необязательно) Сократите базу данных "старого пароля" для записей старше, чем мы заботимся.

По крайней мере, я бы так решил.

...