Wie konfiguriere ich postgresql zum ersten Mal?

195

Ich habe gerade postgresql installiert und während der Installation das Kennwort x angegeben. Wenn ich versuche createdb, ein Passwort anzugeben, erhalte ich folgende Meldung:

createdb: Verbindung zur Datenbank konnte nicht hergestellt werden postgres: FATAL: Kennwortauthentifizierung für Benutzer fehlgeschlagen

Gleiches gilt für createuser.

Wie soll ich anfangen? Kann ich mich als Benutzer zur Datenbank hinzufügen?

Rohit Banga
quelle
4
Dies ist sehr ähnlich zu dieser Frage, die ein Jahr später gestellt wurde. Aber ich glaube, dieser hat eine gefährliche primäre Antwort. Sie sollten den Benutzer nichtpostgres einrichten. Es ist das SUvon PostgreSQL und es öffnet Sie für Login-Angriffe dagegen. Erstellen Sie einen weiteren Superuser und reservieren Sie die gesperrten postgresfür UNIX-Administratoren mit root.
Evan Carroll

Antworten:

327

Die anderen Antworten waren für mich nicht ganz zufriedenstellend. Hier ist, was für postgresql-9.1 auf Xubuntu 12.04.1 LTS funktioniert hat.

  1. Stellen Sie mit dem Benutzer postgres eine Verbindung zur Standarddatenbank her:

    sudo -u postgres psql template1

  2. Legen Sie das Kennwort für den Benutzer postgres fest und beenden Sie psql (Strg-D):

    ALTER USER postgres mit verschlüsseltem Passwort 'xxxxxxx';

  3. Bearbeiten Sie die pg_hba.confDatei:

    sudo vim /etc/postgresql/9.1/main/pg_hba.conf

    und ändern Sie "peer" in "md5" in der Zeile bezüglich postgres:

    lokal alle      postgres      peer md5

    Um zu erfahren, welche Version von postgresql Sie ausführen, suchen Sie den Versionsordner unter /etc/postgresql. Sie können auch Nano oder einen anderen Editor anstelle von VIM verwenden.

  4. Starten Sie die Datenbank neu:

    sudo /etc/init.d/postgresql Neustart

    (Hier können Sie überprüfen, ob es funktioniert hat psql -U postgres).

  5. Erstellen Sie einen Benutzer mit demselben Namen wie Sie (um ihn zu finden, können Sie ihn eingeben whoami ):

    sudo createuser -U postgres -d -e -E -l -P -r -s <my_name>

    Die Optionen weisen postgresql an, einen Benutzer zu erstellen, der sich anmelden, Datenbanken erstellen, neue Rollen erstellen kann, ein Superuser ist und über ein verschlüsseltes Kennwort verfügt. Die wirklich wichtigen sind -P -E, damit Sie aufgefordert werden, das zu verschlüsselnde Passwort einzugeben, und -d, damit Sie a ausführen könnencreatedb .

    Vorsicht vor Passwörtern : Sie werden zuerst zweimal nach dem neuen Passwort (für den neuen Benutzer) gefragt, wiederholt und dann einmal nach dem Postgres-Passwort (das in Schritt 2 angegebene).

  6. Bearbeiten Sie erneut die pg_hba.conf Datei erneut (siehe Schritt 3 oben) und ändern Sie "Peer" in "md5" in der Zeile "Alle" anderen Benutzer:

    lokal alle      alle      Peer md5

  7. Starten Sie neu (wie in Schritt 4) und überprüfen Sie, ob Sie sich ohne -U postgres anmelden können:

    psql template1

    Beachten Sie, dass dies nur psqlfehlschlägt, da versucht wird, Sie mit einer Standarddatenbank mit demselben Namen wie Sie (dh whoami) zu verbinden. template1 ist die Admin-Datenbank, die von Anfang an hier ist.

  8. Jetzt createdb <dbname>sollte funktionieren.

Manur
quelle
Dieses Verfahren hat auch unter Ubuntu 13.10 hervorragend funktioniert. Denken Sie beim Erstellen eines Benutzers an sudo in Schritt 5.
David den Haring
2
Hat auch unter
2
Nur als Hinweis muss die Zeile in pg_hba.confdie erste Zeile sein, da sie sonst aufgrund anderer Regeln ignoriert werden kann (pgsql 9.3.5 auf F21). Ich habe einige Zeit gebraucht, um herauszufinden, dass das Kommentieren und Ändern bereits auskommentierter Zeilen für postgresql-Benutzer nicht einfach ausreicht.
Bindestrich
Ich denke, das hat sich in PG 9.4 geändert, da ich nur local all all peerden Punkt 3 habe, zu dem ich jetzt geändert habe md5. Okay?
Léo Léopold Hertz 10
1
Bitte aktualisieren Sie die Antwort auf 2017! PostgreSQL 9.6 und UBUNTU 16 LTS ... Kein einfacher Weg ?
Peter Krauss
55

Unter Linux ist PostgresQL normalerweise so konfiguriert, dass sich der Root-Benutzer über postgresdie Shell (Konsole oder SSH) als Postgres-Superuser anmelden kann .

$ psql -U postgres

Dann würden Sie einfach wie gewohnt eine neue Datenbank erstellen:

CREATE ROLE myuser LOGIN password 'secret';
CREATE DATABASE mydatabase ENCODING 'UTF8' OWNER myuser;

Dies sollte ohne Berührung funktionieren pg_hba.conf. Wenn Sie dies mit einem GUI-Tool über das Netzwerk tun möchten, müssen Sie sich damit anlegen pg_hba.conf.

Oliver Weichhold
quelle
Ich arbeite an Windows Ich habe initdb für mein Verzeichnis ausgeführt und habe die Konfigurationsdateien vorhanden. Jetzt funktioniert createb, aber wenn ich einen psql-Test mache, erhalte ich die Meldung WARNUNG: Die Konsolencodepage (437) unterscheidet sich von der Windows-Codepage (1252). 8-Bit-Zeichen funktionieren möglicherweise nicht richtig. Weitere Informationen finden Sie auf der psql-Referenzseite "Hinweise für Windows-Benutzer". und keiner der Befehle funktioniert.
Rohit Banga
7
psql: FATAL: Peer authentication failed for user "postgres"sogar mit sudo.
Peter Krauss
Perfekte Antwort, ich wollte keine Konfigurationsdateien berühren und dies funktionierte einwandfrei unter PostgreSQL 10.10 über Ubuntu. Sie sollten danach in der Lage sein, eine Verbindung mit herzustellen psql -d mydatatabase -U myuser.
Ranu
21

Das ist meine Lösung:

su root
su postgres
psql
Admdebian
quelle
4
Dies funktioniert in vielen Fällen, da auf vielen Websites pg_hba.conf den Benutzer von postgres db gegenüber dem Systemkonto von postgres authentifiziert (Peer-Methode). Eine erfolgreiche Anmeldung hängt jedoch letztendlich vom Inhalt der pg_hba.conf für eine bestimmte Site ab.
Reed Sandberg
1
Hat für mich gearbeitet. Ich habe die erste Zeile durch ersetzt sudo bash.
eje211
Ich verstehe nicht, wie das hilft. Nach meinem Verständnis meldet sich dies in root und postgres an und führt psql aus. Was genau passiert? Vielen Dank!
olleh
20

Es gibt zwei Methoden, die Sie verwenden können. Für beide müssen ein Benutzer und eine Datenbank erstellt werden.

  1. Mit createuser und createdb ,

    $ sudo -u postgres createuser --superuser $USER
    $ createdb mydatabase
    $ psql -d mydatabase
  2. Verwenden der SQL-Verwaltungsbefehle und Herstellen einer Verbindung mit einem Kennwort über TCP

    $ sudo -u postgres psql postgres

    Und dann in der psql-Shell

    CREATE ROLE myuser LOGIN PASSWORD 'mypass';
    CREATE DATABASE mydatabase WITH OWNER = myuser;

    Dann können Sie sich anmelden,

    $ psql -h localhost -d mydatabase -U myuser -p <port>

    Wenn Sie den Port nicht kennen, können Sie ihn jederzeit abrufen, indem Sie als postgresBenutzer Folgendes ausführen:

    SHOW port;

    Oder,

    $ grep "port =" /etc/postgresql/*/main/postgresql.conf

Nebenbemerkung: der postgresBenutzer

Ich schlage vor, den Benutzer NICHT zu ändern postgres.

  1. Es ist normalerweise vom Betriebssystem gesperrt. Niemand soll sich beim Betriebssystem als "anmelden" postgres. Sie sollten root haben, um sich als zu authentifizieren postgres.
  2. Es ist normalerweise nicht kennwortgeschützt und wird an das Host-Betriebssystem delegiert. Das ist eine gute Sache . Dies bedeutet normalerweise, dass Sie sich als postgresPostgreSQL-Äquivalent zu SQL Server anmelden müssenSA , dass Sie Schreibzugriff auf die zugrunde liegenden Datendateien haben müssen, . Und das bedeutet, dass Sie normalerweise sowieso Chaos anrichten könnten.
  3. Wenn Sie diese Option deaktivieren, vermeiden Sie das Risiko eines Brute-Force-Angriffs durch einen benannten Superuser. Das Verbergen und Verschleiern des Namens des Superusers hat Vorteile.
Evan Carroll
quelle
Bei der ersten Methode hat der Benutzer keine Berechtigungen. Ich habe dies anstelle des ersten Befehls verwendet:sudo -u postgres createuser -U postgres -d -e -E -l -P -r -s $(whoami)
Fabien Snauwaert
@FabienSnauwaert -smacht den Benutzer zum Superuser.
Evan Carroll
16

EDIT: Warnung: Bitte lesen Sie die Antwort von Evan Carroll . Es scheint, dass diese Lösung nicht sicher ist und nicht empfohlen wird.

Dies funktionierte bei mir in der 64-Bit- Standardinstallation von Ubuntu 14.04 .

Ich habe die Anweisungen mit kleinen Änderungen befolgt, die ich unter http://suite.opengeo.org/4.1/dataadmin/pgGettingStarted/firstconnect.html gefunden habe

  1. Installieren Sie postgreSQL (falls nicht bereits auf Ihrem Computer):

sudo apt-get install postgresql

  1. Führen Sie psql mit dem Benutzer postgres aus

sudo –u postgres psql postgres

  1. Legen Sie ein neues Passwort für den Postgres-Benutzer fest:

\password postgres

  1. Beenden Sie psql

\q

  1. Bearbeiten Sie /etc/postgresql/9.3/main/pg_hba.conf und ändern Sie:

#Database administrative login by Unix domain socket local all postgres peer

Zu:

#Database administrative login by Unix domain socket local all postgres md5

  1. Starten Sie postgreSQL neu:

sudo service postgresql restart

  1. Erstellen Sie eine neue Datenbank

sudo –u postgres createdb mytestdb

  1. Führen Sie psql erneut mit dem Benutzer postgres aus:

psql –U postgres –W

  1. Listen Sie die vorhandenen Datenbanken auf (Ihre neue Datenbank sollte jetzt vorhanden sein):

\l

Robert
quelle
1
Ich habe abgelehnt, weil ich denke, dass die Aktivierung des postgresBenutzers eine schlechte Idee ist. stackoverflow.com/a/41604969/124486
Evan Carroll
4
Note: textdb is the database which you are going to explore with 'alex' user 

root@kalilinux:~# sudo su - postgres 
postgres=#  psql   
postgres=#  create database testdb;
postgres=#  create user alex with password 'alex';
postgres=# GRANT ALL PRIVILEGES ON DATABASE testdb TO alex;`enter code here`
Suman Astani
quelle
3

Sie müssen wahrscheinlich Ihre pg_hba.confDatei aktualisieren . Diese Datei steuert, welche Benutzer sich von welchen IP-Adressen aus anmelden können. Ich denke, dass der Postgres-Benutzer standardmäßig ziemlich gesperrt ist.

Neall
quelle
2
Für RHEL6.4 und Postgres 8.4 befand sich die Datei in /var/lib/pgsql/data/pg_hba.conf. Wechseln Sie identzu trustfor host(und localwenn Sie ssh verwenden).
DavidG
3

Wenn Sie wie ich mit macOS arbeiten, haben Sie möglicherweise nicht den Benutzer postgres.

Beim Versuch zu rennen bekam sudo -u postgres psqlich den Fehlersudo: unknown user: postgres

Glücklicherweise gibt es ausführbare Dateien, die postgres bereitstellt.

createuser -D /var/postgres/var-10-local --superuser --username=nick
createdb --owner=nick

Dann konnte ich psqlohne Probleme zugreifen .

psql
psql (10.2)
Type "help" for help.

nick=#

Wenn Sie eine neue Postgres-Instanz von Grund auf neu erstellen, habe ich folgende Schritte ausgeführt. Ich habe einen nicht standardmäßigen Port verwendet, um zwei Instanzen ausführen zu können.

mkdir /var/postgres/var-10-local
pg_ctl init -D /var/postgres/var-10-local

Dann habe ich /var/postgres/var-10-local/postgresql.confmit meinem bevorzugten Port 5433 bearbeitet .

/Applications/Postgres.app/Contents/Versions/10/bin/postgres -D /Users/nick/Library/Application\ Support/Postgres/var-10-local -p 5433

createuser -D /var/postgres/var-10-local --superuser --username=nick --port=5433
createdb --owner=nick --port=5433

Getan!

Nick Woodhams
quelle
2

Unter MacOS habe ich die folgenden Schritte ausgeführt, damit es funktioniert.

Holen Sie sich nach der Installation zum ersten Mal den Benutzernamen des Systems.

$ cd ~
$ pwd
/Users/someuser
$ psql -d postgres -U someuser

Nachdem Sie sich beim System angemeldet haben, können Sie die Datenbank erstellen.

postgres=# create database mydb;
CREATE DATABASE
postgres=# create user myuser with encrypted password 'pass123';
CREATE ROLE
postgres=# grant all privileges on database mydb to myuser;
GRANT
SuperNova
quelle
0

Navigieren Sie einfach zum Verzeichnis Ihrer Installation und führen Sie diese Datei "pg_env.bat" aus. Gehen Sie also zum Ordner bin und führen Sie pgAdmin.exe aus. Das muss ohne Zweifel funktionieren!

Wellington Ribeiro
quelle