|
Хранение истории нескольких последних паролей пользователя
|
|||
---|---|---|---|
#18+
Добрый день, уважаемы форумчане. Прошу помощи со следующей проблемой: Необходимо добавить возможность проверки на совпадение пароля пользователя(при изменении) с ПОСЛЕДНИМИ четырьмя ранее введёнными паролями. В базе есть отдельная таблица USERS, в которой хранятся логин, пароль, и другие данные(отдел, фио итд). Создала табличку USERSPWDHASHHISTORY со следующими полями: Код: sql 1. 2. 3. 4.
В табличке планирую хранить как раз четыре последних значения хэша паролей для каждого пользователя(благо их немного). Необходимо написать хранимую процедуру(вернее дописать существующую, которая для изменения пользователя) которая бы добавляла в табличку USERSPWDHASHHISTORY последний введённый пароль, если для одного пользователя паролей меньше чем 4, и удаляет самый старый хеш из таблицы, если количество хешей пароля РАВНО четырём. Проблема в том, что Firebird не знает что такое последний и самый старый, и запрос придумать у меня не получается... Версия сервера кстати 3.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 07:21 |
|
Хранение истории нескольких последних паролей пользователя
|
|||
---|---|---|---|
#18+
MarinaVinograd, Ну если ты знаешь что такое последний и самый старый пароль, то остается только объяснить это FB. Насколько я понял, то достаточно для таблицы USERS написать триггера - перед вставкой (запись в USERSPWDHASHHISTORY) - перед удалением (удаление из USERSPWDHASHHISTORY) - перед обновлением (проверка старого и нового значения паролей, и если не совпадают, то удаление из USERSPWDHASHHISTORY самого старого и запись нового) Ну а самый старый, наверное можно определить по ATTIME или ID (но я так-же как и FB не знаю что такое последний и самый старый поэтому воздержусь от конкретный советов) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 07:58 |
|
Хранение истории нескольких последних паролей пользователя
|
|||
---|---|---|---|
#18+
m7m, С триггерами хорошая идея, не думала об этом. Вся проблема в проверке старого и нового значения, как проверить на совпадения с четырьмя записями из другой таблицы??? А перед этим нужно посчитать количество значений. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 08:31 |
|
Хранение истории нескольких последних паролей пользователя
|
|||
---|---|---|---|
#18+
MarinaVinograd, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
вот тебе запрос который выведет значения которые старше последних тёх. Собственно всё что он выводит можно удалять, например вот так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
а после этого вставлять новый хеш пароля ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 09:28 |
|
Хранение истории нескольких последних паролей пользователя
|
|||
---|---|---|---|
#18+
Симонов Денис, а что такое :FIO? в запросе она как переменная, но нигде не объявлена. И может быть лучше выбирать по ID? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 09:46 |
|
Хранение истории нескольких последних паролей пользователя
|
|||
---|---|---|---|
#18+
MarinaVinograd, я понятия не имею как вы пользователя отбираете. Предположил, что по ФИО, ибо ID это ключ самой USERSPWDHASHHISTORY, а не идентификатор пользователя. Вам лучше знать вашу систему. Набросок запроса для отбора старейших я написал, а дальше корректируйте его под себя ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 09:52 |
|
Хранение истории нескольких последних паролей пользователя
|
|||
---|---|---|---|
#18+
MarinaVinogradкак проверить на совпадения с четырьмя записями из другой таблицы??? Откройте для себя Руководство Языка Firebird, раздел "Ограничения", подраздел "Ограничения уникальности". MarinaVinogradА перед этим нужно посчитать количество значений. Там же, "Агрегатные функции", "COUNT". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 12:38 |
|
Хранение истории нескольких последних паролей пользователя
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Спасибо за отличный совет, а особенно за ссылки на руководство и пункты! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 13:00 |
|
Хранение истории нескольких последних паролей пользователя
|
|||
---|---|---|---|
#18+
Симонов Денис MarinaVinograd, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
вот тебе запрос который выведет значения которые старше последних тёх. Собственно всё что он выводит можно удалять, например вот так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
а после этого вставлять новый хеш пароля не совсем понятно как использовать таблицу Т вместе с Код: sql 1.
и MATCHED ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 13:02 |
|
Хранение истории нескольких последних паролей пользователя
|
|||
---|---|---|---|
#18+
MarinaVinograd, запрос же от руки писался без проверки. Забыл WITH T AS ( скопировать Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 13:05 |
|
Хранение истории нескольких последних паролей пользователя
|
|||
---|---|---|---|
#18+
Симонов Дениснапример вот так Не учи блондинку плохому. В её случае достаточно "delete ... rows 5 to 100500". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 13:11 |
|
Хранение истории нескольких последних паролей пользователя
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, ИХМО я бы вообще забил на удаления, ибо как раз оно зло в данном случае. Достаточно проверить в истории, что такой пароль присутствует среди последних 4-х, и если да бросать исключение Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 13:21 |
|
Хранение истории нескольких последних паролей пользователя
|
|||
---|---|---|---|
#18+
Симонов ДенисДостаточно проверить в истории, что такой пароль присутствует среди последних 4-х Оно, конечно, да, но она ведь может решить, что это нормальный (то бишь универсальный и широкоупотребительный) способ проверки ограничений... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 13:28 |
|
Хранение истории нескольких последних паролей пользователя
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Пока что ничего лучше для такой нетривиальной задачи никто не предложил ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 13:53 |
|
Хранение истории нескольких последних паролей пользователя
|
|||
---|---|---|---|
#18+
MarinaVinogradтакой нетривиальной задачи Проверка уникальности значения нынче стала нетривиальной задачей?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 14:04 |
|
Хранение истории нескольких последних паролей пользователя
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, всё сводится не только к проверке уникальности значения ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 14:05 |
|
Хранение истории нескольких последних паролей пользователя
|
|||
---|---|---|---|
#18+
MarinaVinogradвсё сводится не только к проверке уникальности значения А к чему ещё? Ограничению количества записей в таблице? Эта задача такая же древняя и такая же тривиальная, как и первая. (edit: в условиях системы без конкурирующих изменений, которое в данном топике удовлетворено.) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 14:23 |
|
Хранение истории нескольких последних паролей пользователя
|
|||
---|---|---|---|
#18+
MarinaVinograd m7m, Вся проблема в проверке старого и нового значения, как проверить на совпадения EXISTS MarinaVinograd с четырьмя записями из другой таблицы??? Не с четырьмя а со всеми которые есть для данного пользователя ибо MarinaVinograd В табличке планирую хранить как раз четыре последних значения хэша паролей для каждого пользователя MarinaVinograd А перед этим нужно посчитать количество значений. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 14:39 |
|
|
start [/forum/topic.php?fid=40&fpage=12&tid=1560246]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 176ms |
0 / 0 |