Jak skonfigurować postgresql po raz pierwszy?

197

Właśnie zainstalowałem postgresql i podałem hasło x podczas instalacji. Kiedy próbuję zrobić createdbi podać hasło, otrzymuję komunikat:

Createdb: nie można połączyć się z bazą danych postgres: FATAL: uwierzytelnienie hasła nie powiodło się dla użytkownika

To samo dotyczy createuser.

Jak mam zacząć? Czy mogę dodać siebie jako użytkownika do bazy danych?

Rohit Banga
źródło
4
Jest to bardzo podobne do pytania zadanego rok później. Ale wierzę, że ten ma niebezpieczną pierwotną odpowiedź. Państwo powinno nie być konfigurowania postgresużytkownika. Jest to SUPostgreSQL i otwiera cię na ataki na niego. Utwórz kolejnego superużytkownika i zarezerwuj zablokowane postgresdla administratorów UNIX z rootem.
Evan Carroll

Odpowiedzi:

329

Pozostałe odpowiedzi nie były dla mnie całkowicie satysfakcjonujące. Oto, co działało dla postgresql-9.1 na Xubuntu 12.04.1 LTS.

  1. Połącz się z domyślną bazą danych za pomocą postgres użytkownika:

    sudo -u postgres psql template1

  2. Ustaw hasło dla postgres użytkownika, a następnie zamknij psql (Ctrl-D):

    ZMIEŃ USER postgres z zaszyfrowanym hasłem „xxxxxxx”;

  3. Edytuj pg_hba.confplik:

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

    i zmień „peer” na „md5” w wierszu dotyczącym postgres:

    lokalne wszystkie      postgres      peer md5

    Aby dowiedzieć się, którą wersję postgresql używasz, poszukaj folderu wersji pod /etc/postgresql. Możesz także użyć Nano lub innego edytora zamiast VIM.

  4. Uruchom ponownie bazę danych:

    sudo /etc/init.d/postgresql restart

    (Tutaj możesz sprawdzić, czy to działało psql -U postgres).

  5. Utwórz użytkownika o tej samej nazwie co ty (aby go znaleźć, możesz wpisać whoami):

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

    Opcje informują postgresql, aby utworzył użytkownika, który może się logować, tworzyć bazy danych, tworzyć nowe role, jest superużytkownikiem i będzie miał zaszyfrowane hasło. Naprawdę ważne są -P -E, więc zostaniesz poproszony o wpisanie hasła, które zostanie zaszyfrowane, i -d, abyś mógł zrobić createdb.

    Uwaga na hasła : najpierw poprosi o dwa razy nowe hasło (dla nowego użytkownika), powtórzy, a następnie raz hasło postgres (określone w kroku 2).

  6. Ponownie edytuj pg_hba.confplik (patrz krok 3 powyżej) i zmień „peer” na „md5” w wierszu dotyczącym „wszystkich” innych użytkowników:

    lokalne wszystkie      wszystkie      peer md5

  7. Uruchom ponownie (jak w kroku 4) i sprawdź, czy możesz się zalogować bez postów -U:

    psql template1

    Pamiętaj, że jeśli wykonasz zwykłą operację psql, zakończy się ona niepowodzeniem, ponieważ spróbuje połączyć się z domyślną bazą danych o tej samej nazwie co ty (tj whoami.). template1 to administracyjna baza danych, która jest tutaj od samego początku.

  8. Teraz createdb <dbname>powinno działać.

Manur
źródło
Ta procedura działała również świetnie na Ubuntu 13.10. Pamiętaj tylko o sudo w kroku 5 podczas tworzenia użytkownika.
David den Haring
2
Świetnie działał również na Ubuntu 14.04 LTS
ilhnctn
2
dla przypomnienia, linia w pg_hba.confmusi być pierwszą linią, w przeciwnym razie może zostać zignorowana z powodu innych reguł (pgsql 9.3.5 na F21). Zajęło mi to trochę czasu, aby to zrozumieć, że odkomentowanie i zmiana już skomentowanych linii dla użytkownika postgresql nie wystarczy.
dashy
Myślę, że zmieniło się to w PG 9.4, ponieważ mam tylko local all all peerpunkt 3, na który teraz zmieniłem md5. Dobrze?
Léo Léopold Hertz -
1
Zaktualizuj odpowiedź do 2017 roku! PostgreSQL 9.6 i UBUNTU 16 LTS ... Nie ma prostego sposobu ??
Peter Krauss
55

W Linuksie PostgresQL jest zwykle skonfigurowany tak, aby zezwolić użytkownikowi root na zalogowanie się jako superużytkownik postgres postgresz powłoki (konsoli lub ssh).

$ psql -U postgres

Następnie po prostu utworzysz nową bazę danych w zwykły sposób:

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

To powinno działać bez dotykania pg_hba.conf. Jeśli chcesz to zrobić za pomocą jakiegoś narzędzia GUI przez sieć - musisz zadzierać pg_hba.conf.

Oliver Weichhold
źródło
pracuję w systemie Windows Uruchomiłem initdb dla mojego katalogu i mam pliki konfiguracyjne obecne. teraz utworzonyb działa, ale kiedy wykonuję test psql, pojawia się komunikat OSTRZEŻENIE: Strona kodowa konsoli (437) różni się od strony kodowej Windows (1252) 8-bitowe znaki mogą nie działać poprawnie. Szczegółowe informacje można znaleźć na stronie referencyjnej psql „Uwagi dla użytkowników systemu Windows”. i żadne z poleceń nie działa.
Rohit Banga
7
psql: FATAL: Peer authentication failed for user "postgres"nawet z sudo.
Peter Krauss
Idealna odpowiedź, nie chciałem dotykać plików konfiguracyjnych i działało to bezbłędnie na PostgreSQL 10.10 nad Ubuntu. Następnie powinieneś być w stanie połączyć się z psql -d mydatatabase -U myuser.
ranu
21

To jest moje rozwiązanie:

su root
su postgres
psql
Admdebian
źródło
4
Działa to w wielu przypadkach, ponieważ wiele stron będzie miało pg_hba.conf uwierzytelniających użytkownika bazy danych postgres względem konta systemowego postgres (metoda peer). Pomyślne logowanie będzie jednak ostatecznie zależeć od zawartości pliku pg_hba.conf dla konkretnej witryny.
Reed Sandberg
1
Pracował dla mnie. Pierwszą linię zastąpiłem sudo bash.
eje211
nie rozumiem, jak to pomaga, .. z mojego zrozumienia, loguje się w root i postgres i uruchamia psql. Co się właściwie dzieje? Dzięki!
olleh
20

Istnieją dwie metody, których możesz użyć. Oba wymagają utworzenia użytkownika i bazy danych.

  1. Używając createuser i Createdb ,

    $ sudo -u postgres createuser --superuser $USER
    $ createdb mydatabase
    $ psql -d mydatabase
  2. Korzystanie z komend administracyjnych SQL i łączenie się za pomocą hasła przez TCP

    $ sudo -u postgres psql postgres

    A potem w powłoce psql

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

    Następnie możesz się zalogować,

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

    Jeśli nie znasz portu, zawsze możesz go uzyskać, wykonując następujące czynności, jako postgresużytkownik,

    SHOW port;

    Lub,

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

Sidenote: the postgres użytkownik

Radzę NIE modyfikować postgresużytkownika.

  1. Zwykle jest zablokowany w systemie operacyjnym. Nikt nie powinien się „logować” do systemu operacyjnego jako postgres. Musisz mieć root, aby się uwierzytelnić jakopostgres .
  2. Zwykle nie jest chroniony hasłem i przekazuje do systemu operacyjnego hosta. To dobrze . Zwykle oznacza to, aby zalogować się jako postgresodpowiednik PostgreSQL dla SQL ServerSA , musisz mieć dostęp do zapisu do bazowych plików danych. A to oznacza, że ​​normalnie i tak możesz siać spustoszenie.
  3. Wyłączając tę ​​opcję, eliminujesz ryzyko ataku brutalnej siły przez określonego superużytkownika. Ukrywanie i ukrywanie nazwy superużytkownika ma zalety.
Evan Carroll
źródło
W przypadku pierwszej metody użytkownik nie ma żadnych uprawnień. Skończyło się na tym, że użyłem tego zamiast pierwszego polecenia:sudo -u postgres createuser -U postgres -d -e -E -l -P -r -s $(whoami)
Fabien Snauwaert
@FabienSnauwaert -sczyni użytkownika superużytkownikiem.
Evan Carroll
16

EDYCJA: Ostrzeżenie: Proszę przeczytać odpowiedź przesłaną przez Evana Carrolla . Wydaje się, że to rozwiązanie nie jest bezpieczne i nie jest zalecane.

Działa to dla mnie w standardowej instalacji Ubuntu 14.04 64 bity .

Postępowałem zgodnie z instrukcjami, z niewielkimi modyfikacjami, które znalazłem w http://suite.opengeo.org/4.1/dataadmin/pgGettingStarted/firstconnect.html

  1. Zainstaluj postgreSQL (jeśli jeszcze nie jest na twoim komputerze):

sudo apt-get install postgresql

  1. Uruchom psql przy użyciu użytkownika postgres

sudo –u postgres psql postgres

  1. Ustaw nowe hasło dla użytkownika postgres:

\password postgres

  1. Wyjdź z psql

\q

  1. Edytuj /etc/postgresql/9.3/main/pg_hba.conf i zmień:

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

Do:

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

  1. Uruchom ponownie postgreSQL:

sudo service postgresql restart

  1. Utwórz nową bazę danych

sudo –u postgres createdb mytestdb

  1. Ponownie uruchom psql z użytkownikiem postgres:

psql –U postgres –W

  1. Wyświetl istniejące bazy danych (twoja nowa baza powinna już tam być):

\l

Robert
źródło
1
Odrzuciłem głos, ponieważ uważam, że aktywacja postgresużytkownika to zły pomysł. 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
źródło
3

Prawdopodobnie musisz zaktualizować pg_hba.confplik. Ten plik kontroluje, co użytkownicy mogą zalogować się z jakich adresów IP. Myślę, że użytkownik postgres jest domyślnie dość zablokowany.

Neall
źródło
2
Dla RHEL6.4 i postgres 8.4 plik został zlokalizowany /var/lib/pgsql/data/pg_hba.conf. Zmień identna trustna host(i localjeśli używasz ssh).
DavidG
3

Jeśli używasz systemu macOS tak jak ja, możesz nie mieć użytkownika postgres.

Podczas próby uruchomienia sudo -u postgres psqlwystąpił błądsudo: unknown user: postgres

Na szczęście istnieją pliki wykonywalne, które zapewnia postgres.

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

Wtedy mogłem uzyskać dostęp psqlbez problemów.

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

nick=#

Jeśli tworzysz nową instancję postgres od zera, oto kroki, które podjąłem. Użyłem portu innego niż domyślny, aby móc uruchomić dwie instancje.

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

Następnie edytowałem /var/postgres/var-10-local/postgresql.confprzy użyciu mojego preferowanego portu, 5433.

/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

Gotowe!

Nick Woodhams
źródło
2

W systemie MacOS postępowałem zgodnie z poniższymi krokami.

Po raz pierwszy po instalacji uzyskaj nazwę użytkownika systemu.

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

Po zalogowaniu się do systemu możesz utworzyć bazę danych.

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
źródło
0

Wystarczy przejść do katalogu instalacyjnego i uruchomić ten plik „pg_env.bat”, więc po przejściu do folderu bin i uruchom pgAdmin.exe. To musi działać bez wątpienia!

Wellington Ribeiro
źródło