Quel est le type de données pour un mot de passe dans PostgreSQL?

Je Lis qu'il existe des types de données qui chiffrent les mots de passe afin qu'ils soient sécurisés dans votre base de données.

J'utilise actuellement varchar pour stocker les mots de passe. J'ai eu l'idée que je devrais en quelque sorte appliquer une fonction SHA-512 au mot de passe et mettre ces données quelque part de sorte que le mot de passe en texte brut soit supprimé.

Cependant, le type de données en Perl me suggère qu'il existe un meilleur moyen dans PostgreSQL que varchar.

Quel est le type de données pour un mot de passe dans PostgreSQL?

47
demandé sur Milen A. Radev 2009-07-29 17:35:43

3 réponses

Jeff a un bon article intitulé vous stockez probablement les mots de passe de manière incorrecte . Cet article traite de diverses façons de stocker les mots de passe dans les bases de données, et quelques-uns des pièges courants que vous pouvez rencontrer. En particulier, il traite de l'utilisation d'algorithmes de hachage, de tables arc-en-ciel et de l'utilisation de "sel" pour réduire le risque d'un fichier de mot de passe compromis.

L'utilisation du type de données varchar convient parfaitement au stockage d'un mot de passe correctement haché. Par exemple, voici une partie de mon enregistrement de compte réel à partir d'une base de données de production:

=> 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)

Dans ce cas, passhash est la représentation hexadécimale du SHA-1 du sel concaténé avec mon mot de passe.

51
répondu Greg Hewgill 2014-02-28 00:39:56

Installer "module chkpass"

Ce module implémente un type de données chkpass conçu pour stocker des mots de passe cryptés. Vous devez installer le paquet postgresql contrib et exécuter la commande CREATE EXTENSION à installer .

Dans Ubuntu 12.04, cela irait comme ceci:

sudo apt-get install postgresql-contrib

Redémarrez le serveur postgresql:

sudo /etc/init.d/postgresql restart

Toutes les extensions disponibles sont dans:

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

Vous pouvez maintenant exécuter L'EXTENSION CREATE commande.

Exemple:

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';

Renvoie

username | password
---------------------------
"user2"  | ":Sy8pO3795PW/k"
6
répondu Nery Jr 2016-04-19 03:27:37

Postgres version 9.4 + peut faire cela d'une manière plus intelligente et plus sûre en utilisant l'extension pgcrypto comme expliqué à: http://www.meetspaceapp.com/2016/04/12/passwords-postgresql-pgcrypto.html

2
répondu Murali Mohan 2017-01-23 13:42:36