SQL

Как в Mysql поставить, что бы при регистрации пароль содержал не меньше 8 символов?

К сожалению, триггеры в MySQL не умеют отменять операцию (только если искусственно генерировать в них ошибку). Потому они годятся только для синхронизации данных (вести логи, автоматически модифицировать данные в связанных таблицах и т. д.), но совершенно не подходят для верификации данных.

Потому проверять корректность пароля необходимо на сервере до его записи в базу. Проверка только на клиенте не проходит, т. к. в этом случае хакер сможет сделать запрос посредством CURL с совершенно "левым" паролем.

В БД должен храниться не пароль, а его хеш. Причём обязательно сформированный с "солью". Хеширование не даёт воспользоваться паролями тому, кто украдёт твой базу, а сгенерированная для каждого пароля соль не позволяет восстановить пароли из хешей методом "радужных таблиц".

Соответственно, генерироваться хеши паролей должны на сервере (для чего в том же PHP есть специальные функции).

Впрочем, это можно делать и непосредственно в БД (вот для этого триггеры MySQL подходят идеально) - но тогда и проверять правильность логина/пароля тоже придётся в БД - посредством хранимой процедуры.
Никола Николас
Никола Николас
53 458
Лучший ответ
Через php или др. серверный язык
Алмас Бейсен
Алмас Бейсен
88 222
Если не ошибаюсь то это javascript проверяет
Артур Гюлумян а спасибо буду искать, думал это в Mysql настраивается
сделай на стороне mysql sql server Тригер на таблицу с проверкой на вставку длины поля пароля.
тогда отпадёт необходимость в клиенте править если изменится условия по знакам в пароле.
AL
Aleksey Leont'ev
11 877
Антон Иванов и шифровать пароль средствами mySQL?
или хранить пароль в чистом виде?
Дмитрий Царь прав: проверку+шифрование+запись пароля в БД надо делать на сервере, с помощью серверных языков.
Игорь, а как вы вообще представляете себе правку в клиенте? кто для вас клиент, что и каким образом вы собирались у него править?
Не MySQL это выполняет, а серверные языки. PHP, например:
$password = $_POST['password'];
if(strlen($password)>=8) {
// отправляем запрос к БД
} else {
// выводим сообщение о том, что пароль содержит меньше 8 символов
}
Если собираешься пароль шифровать, то делай уже в условии (в блоке отправки запроса), т. к., если будешь шифровать, например, в md5, даже цифра 1 будет выглядеть так: "c4ca4238a0b923820dcc509a6f75849b", что есть больше 8 символов. В итоге, пароль из одного символа спокойно будет "влезать" в правило.
AS
Artur Shopengauer
11 395