Подтвердить что ты не робот

Каков тип данных для пароля в PostgreSQL?

I читать, что существуют типы данных, которые делают шифрование, поэтому пароли защищены в вашей базе данных.

В настоящее время я использую varchar для хранения паролей. У меня возникла идея, что я должен каким-то образом применить функцию SHA-512 к паролю и поместить эти данные где-нибудь, чтобы исключить простой текстовый пароль.

Однако тип данных в Perl подсказывает мне, что в PostgreSQL есть лучший способ, чем varchar.

Каков тип данных для пароля в PostgreSQL?

4b9b3361

Ответ 1

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

Использование типа данных varchar отлично подходит для хранения правильно хешированного пароля. Например, вот часть моей фактической записи учетной записи из производственной базы данных:

=> select account_id, email, salt, passhash from account where email = '[email protected]';
 account_id |      email       |       salt       |                 passhash                 
------------+------------------+------------------+------------------------------------------
          1 | [email protected] | GFR9uT4N4Tzl3vnK | 2c2bf00079a6d49a8f7fb17cefb52fdb41a4b043
(1 row)

В этом случае passhash представляет собой шестнадцатеричное представление SHA-1 соли, объединенной с моим паролем.

Ответ 2

Установите модуль "chkpass"

Этот модуль реализует chkpass типа данных, который предназначен для хранения зашифрованных паролей. Вам необходимо установить пакет postgresql contrib и запустить команду CREATE EXTENSION для установки.

В Ubuntu 12.04 он будет выглядеть следующим образом:

sudo apt-get install postgresql-contrib

Перезагрузите сервер postgresql:

sudo /etc/init.d/postgresql restart

Все доступные расширения:

/opt/PostgreSQL/9.5/share/postgresql/extension/

Теперь вы можете запустить команду CREATE EXTENSION.

Пример:

CREATE EXTENSION chkpass;

CREATE TABLE accounts (username varchar(100), password chkpass);
INSERT INTO accounts(username, "password") VALUES ('user1', 'pass1');
INSERT INTO accounts(username, "password") VALUES ('user2', 'pass2');

select * from accounts where password='pass2';

Возвращает

username | password
---------------------------
"user2"  | ":Sy8pO3795PW/k"