2017-10-27 2 views
2

Ich versuche, das Passwort für alle Benutzer mit dem folgenden Befehl psql zurückzusetzen. Der Befehl wird erfolgreich ausgeführt, aber der Wert des Kennworts ist falsch. Das Passwort ist bcrypt Zeichenfolge von 12345Postgres speichert keine Sonderzeichen

psql -U myuser -d mydb -c "update \"Users\" set \"PASSWORD\" = '$2a$10$u0vd9noCisUUJME9k4daU.1/TNBPaeQam8dnV6tUOWwjn4kFT5XdW'" 

Die Abfrage:

select "PASSWORD" from "Users"; 

kehrt:

a.1/TNBPaeQam8dnV6tUOWwjn4kFT5XdW 

statt:

$2a$10$u0vd9noCisUUJME9k4daU.1/TNBPaeQam8dnV6tUOWwjn4kFT5XdW 

Was ich verstehe, dass Postgres nimmt $ als Platzhalter oder Speci al Zeichen. Wie kann ich es entkommen?

Antwort

3

Das Problem ist nicht mit Postgres, sondern mit der Shell. Es interpretiert die Dollarzeichen als Anfang von Variablen. Sie sollten sie einen umgekehrten Schrägstrich Witz entkommen ('\$2a\$10\$u0vd9noCisUUJME9k4daU.1/TNBPaeQam8dnV6tUOWwjn4kFT5XdW'):

psql -U myuser -d mydb -c "update \"Users\" set \"PASSWORD\" = '\$2a\$10\$u0vd9noCisUUJME9k4daU.1/TNBPaeQam8dnV6tUOWwjn4kFT5XdW'" 
+0

Bingo, vielen Dank @macmoonshine, funktioniert perfekt :) – Ashutosh

+0

Sie willkommen sind. BTW .: Das 'pgcrypto'-Modul von pgcontrib bietet auch eine gespeicherte Funktion für diese Verschlüsselung. – clemens