Хранение пользовательских паролей / данных в базе данных - PullRequest
2 голосов
/ 16 марта 2011

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

  • Это лучший способ хеширования (пароль) и пользователя?
  • Должен ли я также зашифровать имя пользователя?
  • Если у меня есть таблица паролей и другая с данными пользователей, как я могу связать / связать их?

Логин не проблема, вопрос в том, как связать таблицы (таблицы паролей и таблицы данных для каждого пользователя)

Спасибо

Ответы [ 6 ]

3 голосов
/ 16 марта 2011

Ваша базовая таблица User будет выглядеть примерно так:

User Table
-------
id    username    password
1     mike        @#$90sDfsa

Где пароль является хешированной версией (с соль ) моего пароля.

1 голос
/ 16 марта 2011

Вы должны, конечно, хешировать пароль перед его сохранением.В идеале с уникальной солью.

В качестве хеш-функции не следует использовать что-то вроде SHA- *, потому что криптографические хеш-функции предназначены для быстрой работы.Это позволяет легко получить хеш-код, чтобы очень быстро попробовать большое количество возможных паролей.

Используйте функцию хеширования паролей, например bcrypt , которая разработана для произвольно медленной работы.

0 голосов
/ 16 марта 2011

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

Возможно, у вас есть такая настройка:

CREATE TABLE users (USER_ID INTEGER, 
                    PASSWORD_ID INTEGER, 
                    USER_ATTRIBUTE VARCHAR(30));
CREATE TABLE passwords (PASSWORD_ID INTEGER, 
                        PASSWORD_HASH VARCHAR(255));

PASSWORD_ID - это суррогатный ключ, вы используете его в таблице пользователей для ссылки на значение в таблице паролей.Вы можете объединить таблицы вместе с SQL-запросом:

SELECT * 
FROM users INNER JOIN passwords 
     ON users.PASSWORD_ID = passwords.PASSWORD_ID;
0 голосов
/ 16 марта 2011

Как я уже говорил выше, я бы просто хэшировал пароль.

Кроме того, почему вы храните пользователей и пароли в отдельной таблице?Они связаны и должны быть в одной таблице.Такие данные, как адреса, будут принадлежать отдельной таблице.

0 голосов
/ 16 марта 2011

Я бы хранил хешированный и соленый пароль в таблице вместе с данными остальных пользователей.Если вы действительно хотите хранить пароли в отдельной таблице, сохраните идентификатор пользователя, чтобы связать пароли с пользователями.В общем, используйте сильный алгоритм хеширования, например, SHA251, и запишите пароли, чтобы предотвратить атаки радужной таблицы.Я не думаю, что вам нужно хешировать имя пользователя.

0 голосов
/ 16 марта 2011

Вход в систему не проблема, вопрос в том, чтобы связать таблицы (таблицы паролей и таблицы данных для каждого пользователя)

Чтобы связать таблицы, вы можете работать с отношениями:

...