Каков тип данных для пароля в PostgreSQL? - PullRequest
56 голосов
/ 29 июля 2009

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

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

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

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

Ответы [ 3 ]

58 голосов
/ 29 июля 2009

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

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

=> select account_id, email, salt, passhash from account where email = 'greg@hewgill.com';
 account_id |      email       |       salt       |                 passhash                 
------------+------------------+------------------+------------------------------------------
          1 | greg@hewgill.com | GFR9uT4N4Tzl3vnK | 2c2bf00079a6d49a8f7fb17cefb52fdb41a4b043
(1 row)

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

6 голосов
/ 19 апреля 2016

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

В этом модуле реализован тип данных chkpass, предназначенный для хранения зашифрованных паролей. Вам необходимо установить пакет contrib postgresql и запустить команду 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"
3 голосов
/ 23 января 2017

Postgres версии 9.4+ может сделать это более умным и безопасным способом, используя расширение pgcrypto, как описано в: http://www.meetspaceapp.com/2016/04/12/passwords-postgresql-pgcrypto.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...