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?
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.
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"
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