2009-07-29 13 views
40

I read, dass es Datentypen gibt, die Verschlüsselung durchführen, so dass Kennwörter in Ihrer Datenbank gesichert sind.Wie lautet der Datentyp für ein Passwort in PostgreSQL?

Ich verwende im Moment varchar, um Passwörter zu speichern. Ich hatte die Idee, dass ich irgendwie eine SHA-512-Funktion auf das Passwort anwenden und diese Daten irgendwo platzieren sollte, so dass das Klartext-Passwort entfernt wird.

Der Datentyp in Perl schlägt mir jedoch vor, dass es in PostgreSQL einen besseren Weg als Varchar gibt.

Wie lautet der Datentyp für ein Passwort in PostgreSQL?

Antwort

42

Jeff hat einen guten Artikel mit dem Titel You're Probably Storing Passwords Incorrectly. Dieser Artikel beschreibt verschiedene Möglichkeiten zum Speichern von Kennwörtern in Datenbanken und einige der häufigsten Fallstricke, auf die Sie stoßen können. Insbesondere wird auf die Verwendung von Hashalgorithmen, Rainbow-Tabellen und die Verwendung von "Salt" eingegangen, um das Risiko einer kompromittierten Passwortdatei zu reduzieren.

Die Verwendung des Datentyps varchar eignet sich perfekt zum Speichern eines ordnungsgemäß verschlüsselten Kennworts. Zum Beispiel, hier ist ein Teil meines tatsächlichen Kontodatensatzes aus einer Produktionsdatenbank:

=> select account_id, email, salt, passhash from account where email = '[email protected]'; 
account_id |  email  |  salt  |     passhash     
------------+------------------+------------------+------------------------------------------ 
      1 | [email protected] | GFR9uT4N4Tzl3vnK | 2c2bf00079a6d49a8f7fb17cefb52fdb41a4b043 
(1 row) 

In diesem Fall passhash ist die hexadezimale Darstellung der SHA-1 des Salzes mit meinem Passwort verkettet.

+0

Sollte das Salz sein unterschiedlich für jedes Konto in der Tabelle Konten? –

+1

Ja, ein anderes Salz ist erforderlich. Ansonsten ist es genauso wie überhaupt kein Salz. Jeff deckt das in seinem Artikel ab. –

+0

Großer Artikel, auf den Sie sich beziehen. Der Autor schlägt (viel) längere Salze vor als Sie verwenden, was ist Ihr Grund für die Verwendung viel kürzerer Salze? – mvexel

4

Install "chkpass module"

Dieses Modul implementiert, einen Datentyp, der zum Speichern chkpass verschlüsselte Passwörter ausgelegt ist. Sie müssen das Paket postgresql contrib installieren und den Befehl CREATE EXTENSION zur Installation ausführen.

In Ubuntu 12.04 es so gehen würde:

sudo apt-get install postgresql-contrib 

Starten Sie den PostgreSQL-Server:

sudo /etc/init.d/postgresql restart 

Alle verfügbaren Erweiterung sind in:

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

Jetzt können Sie das ausführen CREATE EXTENSION-Befehl.

Beispiel:

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

Returns

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

Was ist der Vorteil dieses Pakets im Vergleich zu greps Antwort wo Salz und Hash? –

+1

chkpass verwendet den Verschlüsselungsalgorithmus. Hash ist ein Algorithmus, der 2012 mehrere Fälle von durchgesickerten Passwörtern aufwies. Salt ist eine Kombination, eine Zunahme vor dem Hash, die die Sicherheit erhöht. Der Vorteil der Verwendung von chkpass ist die Leichtigkeit des textuellen Vergleichs. –

+0

Kann Admin sehen haben die Fähigkeit, echte Passwörter zu sehen? Ich denke, sie sollten nicht. Was ist der Verschlüsselungsalgorithmus? –

Verwandte Themen