Как автоматически сгенерировать пароль в базе данных sql?

Я делаю мини-проект на счет в банке. Передняя часть - ASP.NET, а внутренняя - SQL SERVER.
Когда человек создает учетную запись, автоматически сгенерированные номер учетной записи и пароль будут сохранены в базе данных, и это номер учетной записи и пароль будут отправлены на адрес электронной почты этого пользователя.

Чтобы пользователь мог войти в систему, используя предоставленный номер учетной записи и пароль. Итак, мой вопрос в том, как автоматически сгенерировать этот номер учетной записи и пароль. Я не понимаю, как это сделать.

Надеемся на лучшее. Спасибо!


person user2758530    schedule 08.10.2013    source источник
comment
автоматически сгенерированные номер учетной записи и пароль будут сохранены в базе данных, и этот номер учетной записи и пароль будут отправлены на адрес электронной почты этого пользователя. Нет, они действительно не должны.   -  person Preston Guillot    schedule 08.10.2013
comment
@PrestonGuillot, почему бы и нет?   -  person user2758530    schedule 08.10.2013
comment
Электронная почта небезопасна. Отправлять пароль по электронной почте неразумно. Позвольте им сгенерировать свой пароль и хэшировать его. Если они забудут свой пароль, отправьте им ссылку по электронной почте, чтобы сбросить его (задайте контрольные вопросы).   -  person Chase Florell    schedule 08.10.2013
comment
@ChaseFlorell ах, спасибо.   -  person user2758530    schedule 08.10.2013
comment
Не забывайте принимать полезные ответы.   -  person Chase Florell    schedule 10.10.2013


Ответы (2)


Во-первых, позвольте им создать свой собственный пароль и HASH этого глючника. Никогда не отправляйте их пароль по электронной почте. Отправьте ссылку по электронной почте для сброса, если необходимо, и срок действия ссылки истекает вскоре после отправки.

Во-вторых, чтобы сгенерировать номер учетной записи, я бы использовал Guid

var accountNumber = new Guid.NewGuid();

В своей базе данных вы храните хеш-версию пароля, а при входе в систему вы хешируете пароль для входа и сравниваете его с хешем базы данных.

Также в базе данных номер учетной записи будет UniqueIdentifier, если вы решите использовать Guid.

person Chase Florell    schedule 08.10.2013

Вот самый случайный способ, который я могу придумать:

Select NewID() as UserName, NewID() as Password

Конечно, вашим пользователям это не понравится, потому что это действительно очень долго:

UserName                             Password
------------------------------------ ------------------------------------
F050EF1A-1D6C-4A20-991C-F6B034AEBD2E 86C8D5FC-D09E-45FF-9A4F-041239082C5E

Итак, сократим его до 8 символов:

Select 
    SubString (Cast (NewID() as VarChar(50)), 1, 8) as UserName, 
    SubString (Cast (NewID() as VarChar(50)), 1, 8) as Password

Это выглядит лучше:

UserName Password
-------- --------
63B1A547 D5566B8C

Поскольку вы хотите, чтобы это генерировалось при сохранении строки, у вас, вероятно, есть оператор INSERT, который помещает информацию о владельце учетной записи в базу данных. Измените эту конкретную строку кода, чтобы сделать эту вставку:

Insert Into AccountTable (UserName, Password)
Select 
    SubString (Cast (NewID() as VarChar(50)), 1, 8) as UserName, 
    SubString (Cast (NewID() as VarChar(50)), 1, 8) as Password

Конечно ... так как вы знаете имя владельца учетной записи, вы можете запросить ответ, чтобы узнать владельца. Гораздо лучшая идея - иметь столбец идентификаторов в таблице и использовать Scope_Identity для получения только что вставленной строки.

person Raj More    schedule 08.10.2013
comment
Руководства НЕ достаточно безопасны, чтобы их можно было использовать для паролей. Они оба предсказуемы и увеличивают вероятность перебора, используя значительно сокращенный набор символов (только 16 возможных символов!) - person Richard; 08.10.2013
comment
@Richard, OP выполняет мини-проект, в котором он отправляет по электронной почте имя пользователя и пароль. Если бы это было серьезное мероприятие, параметры были бы довольно строгими, как вы и говорите - HTTPS, одностороннее хэш-хранилище, зашифрованные веб-службы ... вы называете это! - person Raj More; 08.10.2013
comment
OP может чего-то просить без полного понимания последствий. Если это всего лишь небольшой хакерский проект, вашего хакерского ответа будет достаточно, но если он на самом деле имеет дело с банковским делом (на любом уровне), этот ответ может привести кого-то ОЧЕНЬ неправильным путем. / cc @Richard - person Chase Florell; 08.10.2013