2013-01-26 8 views
9

Offenbar ist dies eine ziemlich schwierige Frage zu stellen, weil, so einfach es ist, niemand scheint es beantwortet zu haben.

Ich habe PostgreSQL läuft auf Ubuntu 12.10 Server (keine GUI).

Mein Ziel - meine Frage - ist es, eine Datenbank mit dem Namen „mydb“ und einen Benutzer „admin“ so zu erstellen, dass ich diesen Befehl als normaler Benutzer aus der Schale und eine Verbindung zu der Datenbank geben kann:

$ psql -U admin -d mydb

Aber ich kann die Antwort nirgends finden.

Ich kann Postgres als Benutzer anmelden von su'ing und Ausführen des psql Befehl:

$ sudo su -m postgres 
[email protected]:~$ psql 
psql (9.1.7) 
Type "help" for help. 

postgres=# 

ich herausgefunden haben, wie eine Datenbank erstellen namens „mydb“ und einen Benutzer „admin "so dass:

postgres=# \du 
Role name |     List of roles Attributes  | Member of 
-----------+------------------------------------------------ 
admin  | Superuser, Create role, Create DB    | {} 
postgres | Superuser, Create role, Create DB, Replication | {} 

ich habe nicht herausgefunden, wie um sicherzustellen, dass Benutzer‚admin‘verbinden kann, um die‚mydb‘Datenbank - vielleicht jemand mit Solche Privilegien müssen nicht? [Während ich dies schreibe, merke ich, dass ich wahrscheinlich Superuser-Privilegien von Admin widerrufen.]

Und was ich wirklich wissen will, ist, wie aus einem regulären Benutzer Shell zu verbinden:

$ psql -U postgres 
psql: FATAL: Peer authentication failed for user "postgres" 

Es gibt sicherlich ungeschriebene Annahmen über den Betrieb von PostgreSQL, die ich falsch verstanden habe, aber ein paar Stunden Suche, Tutorials usw. haben das Problem nicht gelöst. Ich werde mich sehr freuen, wenn jemand sagt, dass dies bereits beantwortet wurde, besonders wenn es so ist. Ich nehme an und hoffe, dass die Antwort einfach ist und schätze deine Hilfe.

Danke, ge

Antwort

8

Von der Fehlermeldung, so scheint es, dass die Authentifizierungs-Einstellungen nicht richtig eingestellt.

Neben den Einstellungen in der Datenbank selbst verwendet PostgreSQL auch eine Konfigurationsdatei (pg_hba.conf), die angibt, welche Authentifizierungsmechanismen pro Benutzer, Host und Datenbank verwendet werden können. Sie können angeben, dass Benutzer nur über das Kennwort/md5-Kennwort oder sogar ohne Authentifizierung authentifizieren können

Momentan verwendet Ihre Konfiguration wahrscheinlich die Peer-Authentifizierung für alle Benutzer. Das bedeutet einfach: Lassen Sie diesen Benutzer nur zu, wenn dies der aktuelle ist angemeldeter Benutzer (zB sollte Ihr Shell-Benutzer auch 'admin' heißen). Von Ihrer Frage ist dies nicht was Sie wollen, werden Sie wahrscheinlich Passwort oder MD5-Authentifizierungsmechanismus verwenden möchten.

denke ich, diese Seiten haben Sie die Antwort, die Sie benötigen geben:

http://web.archive.org/web/20131001194046/http://blog.deliciousrobots.com/2011/12/13/get-postgres-working-on-ubuntu-or-linux-mint/ (Archiv-Version)

Offizielle Dokumentation:

http://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html

Denken Sie daran, erneut zu laden postgresql nach dem pg_hba ändern. Konf-Datei!

Update

Der ursprüngliche Blog-post I bezeichnet ist nun offline, der Link verweist nun auf eine archivierte Version. Danke an @O_the_Del für das Reporting.

+0

Thank dich so sehr. Ich muss auslaufen, aber werde deine Antwort und Links durchgehen, wenn ich zurückkomme. – zabouti

+0

Hoffe es funktioniert. PostgreSQL ist eine großartige Datenbank, hat aber in einigen Situationen eine recht steile Lernkurve. – thaJeztah

+0

thaJeztah - Ich kann nicht sagen, was ich in einem Kommentar geschrieben habe, aber im Grunde funktioniert dein Rat. Vielen Dank! – zabouti

5

auf Debian, hört PostgreSQL standardmäßig auf localhost, also, wenn Sie eine Regel in pg_hba.conf die Verbindungen TCP/IP ermöglicht dann können Sie die Parameter -h verwenden diese Regel entsprechen:

psql -U admin -h localhost mydb