Можно ли создать индекс на такую выборку?

Духовность™

Продвинутый новичок
Можно ли создать индекс на такую выборку?

Сверяем хэш с данными из базы:

SELECT *
FROM `users`
WHERE MD5( CONCAT( `user_mail` , "salt_uniq_1112233" ) ) = "c9cd3ebea830fb662ae07e3318867502"

Это необходимо для активации пользователей.
 

Gas

может по одной?
на такую нет, но ты можешь завести отдельное поле с этим значением и индексом на нём.
 

phprus

Moderator
Команда форума
Я бы реализовал отдельную таблицу, в которой бы хранил пары <user_id, ключ активации>, а в таблице users хранил бы поле которое хранило статус пользователя (Активирован/Не активирован).
Тогда по дополнительной таблице можно было бы построить индекс. А в случае если записи с таким кодом нету, то либо неверный код, либо пользователь уже активирован.
Кстати помимо ключа активации я бы еще передавал и user_id пользователя, так как это позволит избежать возможных коллизий.
 

Gas

может по одной?
triumvirat
Ну заведи когда эта операция будет действительно медленно работать. Всё равно такой момент наступит после 20K записей, а то и намного позже (если в таблице нет больших текстовых полей и сервер не еле дышит). А заставить даже 20 тыщь человек зарегистрироваться с подтверждением по email'у это не просто, get in real.
 

MiksIr

miksir@home:~$
Переходи на постгрес, там можно ;) Мускуль индексы по выражениями строить не умеет =(
 

kruglov

Новичок
А почему б в ссылке для активации айдишник пользователя не передавать тож?
 

Духовность™

Продвинутый новичок
kruglov
а какой в этом смысл?

Посчитай количество исполнений этого "одного случая"
ну? 1 раз - когда идет запрос на подтверждение из письма. больше никогда.

-~{}~ 12.09.08 23:15:

phprus
понятно. спасибо.
 

kruglov

Новичок
я не пойму зачем при активации ID передавать
А я не понимаю, зачем по 32-байтному полю индекс делать. И зачем базировать поиск на теоретически подверженным коллизиям хэшах. Квиты?
 

kruglov

Новичок
И правильно ли я понимаю, что узнав "salt_uniq_1112233", я смогу активировать миллион левых пользователей в этой оригинально написанной системе активации?
 

kruglov

Новичок
triumvirat
Security by obscurity? Ну-ну...

а когда узнаете - я её поменяю
Ага, и так же по-быстрому вычистите 1 000 000 левых аккаунтов. Ну и пошлете нафих тех, кому письмо было отправлено еще "при старом режиме".

Если вы пишете систему для себя и под себя, это не повод делать ее дырявой, isn't it?
 

Духовность™

Продвинутый новичок
kruglov
Начнем с того, что соль Вы не узнаете. А если Вы узнаете соль, то вы узнаете и параметры подключения к субд и много всего интересного. Тогда мне легче сразу застрелиться.

Что Вы предлагаете, скажите?
 

weregod

unserializer
triumvirat, если у Вас не мильярд пользователей, ничего страшного не будет в хранении кода активации (MD5( CONCAT( `user_mail` , "salt_uniq_1112233" ) )) с индексом в таблице юзверей
 

kruglov

Новичок
Еще проще, хранить не мд5(конкат(какая-то байда)), а просто случайное число.
 
Сверху