web-dev-qa-db-fra.com

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

I lire qu'il existe des types de données qui effectuent le cryptage afin que les mots de passe 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 d'une manière ou d'une autre 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 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?

Jeff a un bon article intitulé Vous stockez probablement des mots de passe incorrectement . Cet article décrit différentes manières 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 discute de l'utilisation d'algorithmes de hachage, de tables Rainbow 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 convient parfaitement pour stocker 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:

=> sélectionnez account_id, email, salt, passhash à partir du compte où email = '[email protected]'; 
 account_id | email | sel | passhash 
 ------------ + ------------------ + ------------ ------ + ------------------------------------------ 
 1 | [email protected] | GFR9uT4N4Tzl3vnK | 2c2bf00079a6d49a8f7fb17cefb52fdb41a4b043 
 (1 ligne) 

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

61
Greg Hewgill

Installez le "module chkpass"

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

Dans Ubuntu 12.04, cela se passerait comme suit:

Sudo apt-get install postgresql-contrib

Redémarrez le serveur postgresql:

Sudo /etc/init.d/postgresql restart

Toutes les extensions disponibles sont en:

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

Vous pouvez maintenant exécuter la 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';

Résultats

username | password
---------------------------
"user2"  | ":Sy8pO3795PW/k"
6
Nery Jr

Postgres version 9.4+ peut le faire de manière plus intelligente et plus sécurisée en utilisant l'extension pgcrypto comme expliqué sur: http://www.meetspaceapp.com/2016/04/12/passwords-postgresql-pgcrypto.html =

3
Murali Mohan