2009-07-29 7 views
40

I read qu'il existe des types de données qui cryptent les mots de passe sont sécurisés dans votre base de données.Quel est le type de données pour un mot de passe dans PostgreSQL?

J'utilise pour le moment 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 telle sorte que le mot de passe en texte brut est 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?

Répondre

42

Jeff a un bon article intitulé You're Probably Storing Passwords Incorrectly. Cet article explique différentes façons de stocker des mots de passe dans des bases de données et certains 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 «salt» pour réduire le risque d'un fichier de mot de passe compromis.

L'utilisation du type de données varchar est parfaitement adaptée pour stocker un mot de passe correctement haché. Par exemple, voici une partie de mon dossier de compte réel à partir d'une base de données de production:

=> select account_id, email, salt, passhash from account where email = '[email protected]'; 
account_id |  email  |  salt  |     passhash     
------------+------------------+------------------+------------------------------------------ 
      1 | [email protected] | 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.

+0

le sel doit être différent pour chaque compte dans la table Comptes? –

+1

Oui, l'utilisation d'un sel différent est requise. Sinon, c'est exactement la même chose que pas de sel du tout. Jeff couvre cela dans son article. –

+0

Super article dont vous parlez. L'auteur suggère (beaucoup) des sels plus longs que vous utilisez, quelle est votre raison d'utiliser des sels beaucoup plus courts? – mvexel

4

Installer "module chkpass"

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

Dans Ubuntu 12.04, il irait comme ceci:

sudo apt-get install postgresql-contrib 

Redémarrez le serveur postgresql:

sudo /etc/init.d/postgresql restart 

Tous l'extension disponibles sont en:

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

Maintenant, vous pouvez exécuter le Commande CREATE EXTENSION.

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

Retours

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

Quel est l'avantage de ce paquet en comparaison de la réponse de grep où le sel et le hachage? –

+1

chkpass utilise l'algorithme crypt. Hash est un algorithme qui a eu plusieurs cas de fuites de mots de passe en 2012. Le sel est une combinaison, une accrétion avant le hachage qui augmente la sécurité. L'avantage d'utiliser chkpass est la facilité de comparaison textuelle. –

+0

L'administrateur peut-il voir des mots de passe réels? Je pense qu'ils ne devraient pas. Quel est l'algorithme de la crypte? –

2

Postgres la version 9.4+ peut obtenir ce fait de façon plus intelligente et securer en utilisant l'extension pgcrypto comme expliqué à: http://www.meetspaceapp.com/2016/04/12/passwords-postgresql-pgcrypto.html

+1

Pouvez-vous s'il vous plaît expliquer les avantages et les lacunes de l'extension plus clairement. Maintenant, votre réponse est principalement link-only-answer. –

Questions connexes