Wie melde ich mich nach einer Neuinstallation bei Postgresql an und authentifiziere mich dort?


78

Habe eine neue Installation von Postgres 8.4 auf Mint Ubuntu gemacht. Wie erstelle ich einen Benutzer für Postgres und melde mich mit psql an?

Wenn ich psql eingebe, sagt es mir nur

psql: FATAL: Ident authentication failed for user "my-ubuntu-username"

Überprüfen Sie diesen Blog-Beitrag .

Antworten:


123

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

Standardmäßig stellt psql eine Verbindung zur Datenbank mit demselben Namen wie der Benutzer her. Es gibt also eine Konvention, die die "Benutzerdatenbank" macht . Und es gibt keinen Grund, diese Konvention zu brechen, wenn Ihr Benutzer nur eine Datenbank benötigt. Wir werden mydatabaseals Beispiel Datenbanknamen verwenden.

  1. Mit createuser und createdb können wir den Datenbanknamen explizit angeben.

    $ sudo -u postgres createuser -s $USER
    $ createdb mydatabase
    $ psql -d mydatabase
    

    Sie sollten dies wahrscheinlich ganz weglassen und stattdessen alle Befehle standardmäßig auf den Benutzernamen setzen.

    $ sudo -u postgres createuser -s $USER
    $ createdb
    $ psql
    
  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 Schreibzugriff auf die zugrunde liegenden Datendateien haben müssen, um sich als postgresPostgreSQL-Äquivalent zu SQL Server anzumelden SA. 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.

Ich verstehe, dass die Probleme nicht auftreten, wenn ein DB-Superuser (-s) anstelle eines Nicht-Superusers verwendet wird. Die nächste Frage für mich wäre, was getan werden kann, um dies zum Laufen zu bringen, selbst wenn der DB-Benutzer kein Superuser ist.
Hartmut P.

In meinem Fall musste ich nach dem Erstellen des Benutzers mit: $ sudo -u postgres createuser -s $ USER ein Passwort konfigurieren mit: ALTER USER myuser WITH PASSWORD 'mypass'; (nach eingeloggt postgres mit: sudo -u postgres psql)
negrotico19

Wie soll ich den Befehl verstehen sudo -u postgres psql postgres? Ich verstehe sudobedeutet Root-Privileg, -u postgresbedeutet, sich als Benutzer anzumelden postgres, psqlist der Befehl, mit dem eine Verbindung hergestellt werden soll postgresql, aber was macht der letzte postgres?
Yuqli

42

Standardmäßig müssten Sie den Benutzer postgres verwenden:

sudo -u postgres psql postgres

1
Oder wenn Sie sudo nicht verwenden können, tun Sie dies: "su postgres" und dann "psql"
Daniel Katz

22

Der Fehler, den Sie erhalten, ist, dass Ihr Ubuntu-Benutzername kein gültiger Postgres-Benutzer ist.

Sie müssen psql mitteilen, welcher Datenbankbenutzername verwendet werden soll

psql -U postgres

Möglicherweise müssen Sie auch die Datenbank angeben, zu der eine Verbindung hergestellt werden soll

psql -U postgres -d <dbname>

1
Ich habe "psql -U postgres" ausprobiert und den gleichen Fehler erhalten. Ich habe noch keine Datenbank erstellt, nur eine Neuinstallation durchgeführt.
user61734

psql -U myuser -d mydbfunktioniert perfekt, während psql -U myuserversucht wird, Peer-Authentifizierung zu verwenden, danke!
inf3rno

5

Sie können auch als "normaler" Benutzer (nicht als Postgres) eine Verbindung zur Datenbank herstellen:

postgres=# \connect opensim Opensim_Tester localhost;

Password for user Opensim_Tester:    

You are now connected to database "opensim" as user "Opensim_Tester" on host "localhost" at port "5432"

3

Wenn Ihr Datenbankclient eine Verbindung mit TCP / IP herstellt und in Ihrer pg_hba.conf die Identifizierungsauthentifizierung konfiguriert ist, überprüfen Sie, ob eine IDD installiert ist und ausgeführt wird. Dies ist obligatorisch, auch wenn nur lokale Clients eine Verbindung zu "localhost" herstellen.

Beachten Sie auch, dass heutzutage die ID möglicherweise IPv6-fähig sein muss, damit Postgresql Clients willkommen heißt, die eine Verbindung zu localhost herstellen.


3

Der Hauptunterschied zwischen der Anmeldung bei einem Postgres-Benutzer oder einem anderen von uns erstellten Benutzer besteht darin, dass bei Verwendung des Postgres-Benutzers der Host NICHT mit -h und stattdessen für einen anderen Benutzer angegeben werden muss, wenn.

Loggen Sie sich mit dem Benutzer von postgres ein

$ psql -U postgres 

Erstellung und Anmeldung mit einem anderen Benutzer

# CREATE ROLE usertest LOGIN PASSWORD 'pwtest';
# CREATE DATABASE dbtest WITH OWNER = usertest;
# SHOW port;
# \q

$ psql -h localhost -d dbtest -U usertest -p 5432

GL

Quelle

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.