wenn ich einen neuen Benutzer erstelle, der sich aber nicht in der Datenbank anmelden kann.
Ich mache das so:
postgres@Aspire:/home/XXX$ createuser dev
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y
Erstellen Sie dann eine Datenbank:
postgres@Aspire:/home/XXX$ createdb -O dev test_development
psql -U dev -W test_development
Danach versuche ich mich anzumelden, erhalte aber den Fehler:
psql: FATAL: Peer authentication failed for user "dev"
Ich habe versucht, das Problem zu lösen, bin aber gescheitert.
postgresql
hsming
quelle
quelle
--interactive
createuser --interactive joe
Antworten:
Versuchen:
wo
-U
ist der Benutzername der Datenbank-h
ist der Hostname / die IP des lokalen Servers, wodurch Unix-Domain-Sockets vermieden werden-d
ist der Datenbankname, zu dem eine Verbindung hergestellt werden sollDies wird dann von Postgresql als "Netzwerk" -Verbindung und nicht als Unix-Domain-Socket-Verbindung ausgewertet und daher nicht als "lokale" Verbindung ausgewertet, wie Sie möglicherweise in
pg_hba.conf
folgenden Abschnitten sehen :quelle
psql [option...] [dbname [username]]
, so würde man denken,psql dbname username
würde einfach funktionieren ..\c glossary john
FATAL: Peer authentication failed for user "john"
dann\c glossary john localhost
Password for user john:
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
You are now connected to database "glossary" as user "john" on host "localhost" at port "5432".
funktionierte.Ihre Verbindung ist fehlgeschlagen, da standardmäßig eine
psql
Verbindung über UNIX-Sockets mithilfe derpeer
Authentifizierung hergestellt wird. Daher muss der aktuelle UNIX-Benutzer denselben Benutzernamen wie habenpsql
. Sie müssen also den UNIX-Benutzer erstellendev
und sich dann als anmeldendev
odersudo -u dev psql test_development
für den Zugriff auf die Datenbank verwenden (undpsql
sollten dies nicht tun) nach einem Kennwort fragen).Wenn Sie den UNIX-Benutzer nicht erstellen können oder möchten, z. B. wenn Sie nur für Ad-hoc- Abfragen eine Verbindung zu Ihrer Datenbank herstellen möchten , wird das Erzwingen einer Socket-Verbindung mit
psql --host=localhost --dbname=test_development --username=dev
(wie in der Antwort von @meyerson angegeben) Ihr sofortiges Problem lösen.Wenn Sie jedoch die Kennwortauthentifizierung über Unix-Sockets anstelle der Peer-Methode erzwingen möchten, ändern Sie Folgendes
pg_hba.conf
* Zeile:von
zu
peer
bedeutet, dass es der Identität (Authentizität) des UNIX-Benutzers vertraut. Also nicht nach einem Passwort fragen.md5
bedeutet, dass es immer nach einem Passwort fragt und es nach dem Hashing mit validiertMD5
.Natürlich können Sie auch spezifischere Regeln für eine bestimmte Datenbank oder einen bestimmten Benutzer erstellen, wobei einige Benutzer
peer
Kennwörter haben und andere Kennwörter benötigen.Nach dem Wechsel
pg_hba.conf
ob PostgreSQL ausgeführt wird, müssen Sie die Konfiguration durch erneutes Laden (pg_ctl reload
) oder Neustarten (sudo service postgresql restart
) erneut lesen .* Die Datei
pg_hba.conf
wird höchstwahrscheinlich bei sein/etc/postgresql/9.x/main/pg_hba.conf
Bearbeitet: Anmerkungen von @Chloe, @JavierEH, @Jonas Eicher, @fccoelho, @Joanis, @Uphill_Welche Kommentare wurden in die Antwort aufgenommen?
quelle
peer
UNDmd5
? Wenn ich einstellemd5
, kann ich mich nicht mehr mit dempostgres
Benutzer anmelden ! Ich habe versucht, mehrere Zeilen hinzuzufügen und die Methode durch Kommas zu trennen, aber sie haben nicht funktioniert. Ok, ich habemgoldwasser
die Antwort gefunden und das hat funktioniert. Ich habe gerade eine weitere Zeile für Benutzerpostgres
mit Methode hinzugefügtpeer
!/var/lib/pgsql/9.4/data/pg_hba.conf
Peer-Authentifizierung bedeutet, dass postgres das Betriebssystem nach Ihrem Anmeldenamen fragt und diesen zur Authentifizierung verwendet. Um sich als Benutzer "dev" mithilfe der Peer-Authentifizierung auf Postgres anzumelden, müssen Sie auch der Benutzer "dev" auf dem Betriebssystem sein.
Details zu den Authentifizierungsmethoden finden Sie in der Postgresql-Dokumentation .
Hinweis: Wenn keine Authentifizierungsmethode mehr funktioniert, trennen Sie den Server vom Netzwerk und verwenden Sie die Methode "trust" für "localhost" (und überprüfen Sie, ob Ihr Server nicht über das Netzwerk erreichbar ist, während die Methode "trust" aktiviert ist).
quelle
dev
XXX
Wenn Sie angeben:
Die Verbindung wird über UNIX Socket hergestellt, das standardmäßig die
peer
Authentifizierung verwendet, sofern nichtpg_hba.conf
anders angegeben.Sie können angeben:
um eine TCP / IP-Verbindung über die Loopback-Schnittstelle (sowohl IPv4 als auch IPv6) für die angegebenen
database
und zu erhaltenuser
.Nach Änderungen müssen Sie postgres neu starten oder die Konfiguration neu laden. Neustart, der in modernen RHEL / Debian-basierten Distributionen funktionieren sollte:
Das Neuladen sollte folgendermaßen funktionieren:
Der Befehl kann jedoch je nach PATH-Konfiguration unterschiedlich sein. Möglicherweise müssen Sie einen absoluten Pfad angeben, der je nach Art der Installation des Postgres unterschiedlich sein kann.
Dann können Sie verwenden:
zum Login mit der
user
angegebenendatabase
über TCP / IP.md5
steht für verschlüsseltes Passwort, während Siepassword
während der Autorisierung auch Nur- Text-Passwörter angeben können . Diese beiden Optionen sollten keine große Rolle spielen, solange auf den Datenbankserver nur lokal zugegriffen werden kann und kein Netzwerkzugriff besteht.Wichtiger Hinweis: Definitionsreihenfolge in
pg_hba.conf
Angelegenheiten - Regeln werden wie iptables von oben nach unten gelesen, daher möchten Sie wahrscheinlich vorgeschlagene Regeln über der Regel hinzufügen:quelle
Während die Antwort von @ flaviodesousa funktionieren würde, ist es auch für alle Benutzer (alle anderen) obligatorisch, ein Passwort einzugeben.
Manchmal ist es sinnvoll, die Peer-Authentifizierung für alle anderen beizubehalten, für einen Dienstbenutzer jedoch eine Ausnahme zu machen. In diesem Fall möchten Sie der pg_hba.conf eine Zeile hinzufügen, die wie folgt aussieht:
Ich würde empfehlen, dass Sie diese Zeile direkt unter der kommentierten Kopfzeile hinzufügen:
Sie müssen PostgreSQL mit neu starten
Wenn Sie 9.3 verwenden, lautet Ihre pg_hba.conf höchstwahrscheinlich:
quelle
Das funktioniert bei mir, wenn ich darauf stoße:
quelle
dev
.Die einfachste Lösung:
quelle
Ich musste einfach hinzufügen
-h localhost
quelle
In meinem Fall habe ich einen anderen Port verwendet. Die Standardeinstellung ist 5432. Ich habe 5433 verwendet. Dies hat bei mir funktioniert:
quelle
Für Menschen in der Zukunft
postgres
ist dies in der/usr/lib/postgresql/10/bin
auf meinem Ubuntu-Server.Ich habe es dem PATH in meiner .bashrc-Datei hinzugefügt und diese Zeile am Ende hinzugefügt
dann in der Kommandozeile
Ich habe meine Bash-Umgebung aktualisiert. Jetzt kann ich
postgres -D /wherever
aus jedem Verzeichnis verwendenquelle
pg_dump -h localhost -U postgres -F c -b -v -f mydb.backup mydb
quelle
-U postgres
entscheidend sein? Was sind überhaupt all diese Strichbuchstaben ?Versuchen:
psql -U Rollenname -d Datenbank -h Hostname..com -W
quelle