|
|
|
Как не трогать/обновлять поле, если оно не изменялось
|
|||
|---|---|---|---|
|
#18+
Преамбула: Разработал для нужд отдела маленькое приложеньице, доступ к которому осуществлялся через собственную систему аутентификации для 5-7 пользователей. Нарисовал я для нее простенькую админку. Была единственная проблема - при изменении ключевых характеристик пользователя (блокировка, изменение е-мыла или, не дай Б-г, имени пользователя) надо было постоянно вводить пароль в поле, отвечающее за пароль. Пока приложением пользовались 5-7 пользователей - проблема часто не возникала - все пароли в голове. Но! Приложеньице увидел большой босс. Обозвал его специализированным программным обеспечением и сказал допустить к пользованию других сотрудников из других отделов. Защитники информации одобрили вариант аутентификации, но только если сам пароль в БД будет храниться в зашифрованном виде. Создал в Page Processing -> After Submit -> Computation -> md5(:PASSWD). И вот тут-то я столкнулся с проблемой постоянного набора пароля. В форму в поле PASSWD при FETCH падает значение из таблицы, т.е. результат выполнения md5(:PASSWD). Естественно при следующем сабмите страницы в таблицу падает md5(md5(:PASSWD)), что не соответствует действительности. Фабула: В итоге ПОКА изменение характеристик пользователя обхожу следующим образом: 1. Открываю ползователя для редактирования в админке 2. Копирую результат функции из прямого доступа к таблице (через TOAD) содержимое поля. 3. При изменении характеристик ставлю рандомный пароль аля "что под пальцы попало" 4. Сохраняю пользователя 5. Через TOAD вставляю содержимое буфера обмена в нужное поле Внимание, уважаемые знактоки! Вопрос: Есть ли возможность "обходить" как-то поле "PASSWD", если оно не изменялось? Можно тыкнуть носом в маны. Ну и, согласно правилам: Код: plsql 1. version|status 4.2.3.00.08|VALID ..... Embedded PL/SQL Gateway + XDB Protocol Server; Код: plsql 1. banner Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production P.S.: Для обнаруживших в Oracle новую неизвестную функцию: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 13:01 |
|
||
|
Как не трогать/обновлять поле, если оно не изменялось
|
|||
|---|---|---|---|
|
#18+
Вам надо изменить логику работы. Поле PASSWD не селектить вообще, при сабмите брать md5 от значения, введенного пользователем, и сравнивать его с тем, что лежит в таблице. Если не совпадают - не апдейтить таблицу, а выбрасывать исключение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 16:44 |
|
||
|
Как не трогать/обновлять поле, если оно не изменялось
|
|||
|---|---|---|---|
|
#18+
В какой момент у вас происходит обхэшивание? Как вариант. У вас в поле MD5. При фетче в поле попадает хэш. Жмем субмит на апдейт. Делаем триггер если :OLD = :NEW тогда null, иначе берем :NEW = md5(:NEW); Если Вас так не устраивает, подумаю еще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 16:49 |
|
||
|
Как не трогать/обновлять поле, если оно не изменялось
|
|||
|---|---|---|---|
|
#18+
GustlyВ какой момент у вас происходит обхэшивание? After submit page. Gustly Как вариант. У вас в поле MD5. При фетче в поле попадает хэш. Жмем субмит на апдейт. Делаем триггер если :OLD = :NEW тогда null, иначе берем :NEW = md5(:NEW); Если Вас так не устраивает, подумаю еще. Вариант вполне имеет место быть. Спасибо. Вот только какой из двух: 1. Создаю доп.поле на форме. Делаю его hidden. Если после сабмита поля не равны-хеширую. В противном случае кладу в поле таблицы готовый хеш. 2. На форму и в таблицу добавляю поля md5value. И триггер начинает работать только в таблице по событию before update в случае расхождения. 3. ? P.S.: Уважаемый, rockclimber. Прошу прощения что не ответил Вам, но доводы второго оратора были для меня яснее, и показалось мне, что вы говорите с ним об одном и том же. Но могу ошибаться. ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 18:27 |
|
||
|
Как не трогать/обновлять поле, если оно не изменялось
|
|||
|---|---|---|---|
|
#18+
Решение: Сделал на таблицу USERS триггер Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. И все заработало. Спасибо Gustly и rockclimber ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 05:00 |
|
||
|
|

start [/forum/topic.php?fid=50&msg=38597337&tid=1875376]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 226ms |
| total: | 390ms |

| 0 / 0 |
