kiedy tworzę nowego użytkownika, ale nie może on zalogować się do bazy danych.
Robię to tak:
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
następnie utwórz bazę danych:
postgres@Aspire:/home/XXX$ createdb -O dev test_development
potem próbuję psql -U dev -W test_development
się zalogować, ale pojawia się błąd:
psql: FATAL: Peer authentication failed for user "dev"
Próbowałem rozwiązać problem, ale nie udało się.
postgresql
hsming
źródło
źródło
--interactive
do polecenia:createuser --interactive joe
Odpowiedzi:
Próbować:
gdzie
-U
to nazwa użytkownika bazy danych-h
jest nazwą hosta / IP lokalnego serwera, unikając w ten sposób gniazd domeny Unix-d
to nazwa bazy danych, z którą należy się połączyćJest to następnie oceniane jako połączenie „sieciowe” przez Postgresql, a nie połączenie przez gniazdo domeny Unix, a zatem nie jest oceniane jako połączenie „lokalne”, jak można zobaczyć w
pg_hba.conf
:źródło
psql [option...] [dbname [username]]
, więc pomyślałbyś, żepsql dbname username
to po prostu zadziała ...\c glossary john
FATAL: Peer authentication failed for user "john"
a potem\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".
działało.Połączenie nie powiodło się, ponieważ domyślnie
psql
łączy się przez gniazda UNIX przy użyciupeer
uwierzytelniania, co wymaga, aby bieżący użytkownik UNIX miał taką samą nazwę użytkownika jakpsql
. Musisz więc utworzyć użytkownika UNIX,dev
a następnie zalogować się jako użytkownikdev
lub użyć go wsudo -u dev psql test_development
celu uzyskania dostępu do bazy danych (i niepsql
należy prosić o hasło).Jeśli nie możesz lub nie chcesz utworzyć użytkownika UNIX, na przykład jeśli chcesz się połączyć ze swoją bazą danych w celu zapytań ad hoc , wymuszenie połączenia przez gniazdo za pomocą
psql --host=localhost --dbname=test_development --username=dev
(jak wskazano w odpowiedzi @meyerson) rozwiąże natychmiastowy problem.Ale jeśli zamierzasz wymusić uwierzytelnianie hasła przez gniazda Unix zamiast metody peer, spróbuj zmienić następującą
pg_hba.conf
* linię:z
do
peer
oznacza, że będzie ufać tożsamości (autentyczności) użytkownika UNIX. Więc nie pytaj o hasło.md5
oznacza, że zawsze poprosi o hasło i zweryfikuje je po zaszyfrowaniuMD5
.Możesz oczywiście również stworzyć bardziej szczegółowe reguły dla konkretnej bazy danych lub użytkownika, przy czym niektórzy użytkownicy mają,
peer
a inni wymagają hasła.Po zmianie,
pg_hba.conf
czy PostgreSQL jest uruchomiony, musisz ponownie odczytać konfigurację poprzez ponowne załadowanie (pg_ctl reload
) lub ponowne uruchomienie (sudo service postgresql restart
).* Plik
pg_hba.conf
najprawdopodobniej będzie na/etc/postgresql/9.x/main/pg_hba.conf
Edytowane: Uwagi od @Chloe, @JavierEH, @Jasas Eicher, @fccoelho, @Joanis, @Uphill_Co komentarze włączone do odpowiedzi.
źródło
peer
ANDmd5
? Po ustawieniumd5
nie mogę się już zalogować dopostgres
użytkownika! Próbowałem dodać wiele wierszy i oddzielić metodę przecinkami, ale one nie działały. Ok znalazłemmgoldwasser
odpowiedź i to zadziałało. Właśnie dodałem kolejną linię dla użytkownikapostgres
z metodąpeer
!/var/lib/pgsql/9.4/data/pg_hba.conf
Uwierzytelnianie rówieśnicze oznacza, że postgres prosi system operacyjny o nazwę logowania i używa go do uwierzytelnienia. Aby zalogować się jako użytkownik „dev” przy użyciu uwierzytelniania równorzędnego na postgres, musisz być także użytkownikiem „dev” w systemie operacyjnym.
Szczegółowe informacje na temat metod uwierzytelniania można znaleźć w dokumentacji Postgresql .
Wskazówka: Jeśli żadna metoda uwierzytelniania nie działa, odłącz serwer od sieci i użyj metody „trust” dla „localhost” (i dokładnie sprawdź, czy twój serwer nie jest dostępny przez sieć, gdy włączona jest metoda „trust”).
źródło
dev
na użytkownika systemuXXX
Kiedy określisz:
łączy się przez gniazdo UNIX, które domyślnie korzysta z
peer
uwierzytelniania, chyba że określonopg_hba.conf
inaczej.Możesz określić:
aby uzyskać połączenie TCP / IP na interfejsie pętli zwrotnej (zarówno IPv4, jak i IPv6) dla określonych
database
iuser
.Po zmianach musisz zrestartować postgres lub ponownie załadować jego konfigurację. Uruchom ponownie, który powinien działać w nowoczesnych dystrybucjach opartych na RHEL / Debian:
Przeładowanie powinno działać w następujący sposób:
ale polecenie może się różnić w zależności od konfiguracji PATH - może być konieczne określenie bezwzględnej ścieżki, która może być inna, w zależności od sposobu zainstalowania postgres.
Następnie możesz użyć:
zalogować się za pomocą tego
user
do określonegodatabase
przez TCP / IP.md5
oznacza zaszyfrowane hasło, ale możesz również określićpassword
podczas autoryzacji hasła w postaci zwykłego tekstu. Te dwie opcje nie powinny mieć wielkiego znaczenia, o ile serwer bazy danych jest dostępny tylko lokalnie, bez dostępu do sieci.Ważna uwaga: kolejność definicji w
pg_hba.conf
sprawach - reguły są odczytywane od góry do dołu, podobnie jak iptables, więc prawdopodobnie chcesz dodać proponowane reguły powyżej reguły:źródło
Chociaż odpowiedź @ flaviodesousa zadziałałaby, to również nakłada na wszystkich użytkowników (wszystkich innych) obowiązek wprowadzenia hasła.
Czasami sensowne jest utrzymanie uwierzytelnienia równorzędnego dla wszystkich innych, ale wyjątek dla użytkownika usługi. W takim przypadku chciałbyś dodać linię do pg_hba.conf, która wygląda następująco:
Polecam dodanie tej linii tuż pod komentarzem nagłówka:
Musisz zrestartować PostgreSQL za pomocą
Jeśli używasz 9.3, twój pg_hba.conf najprawdopodobniej będzie:
źródło
Działa to dla mnie, gdy na to wpadnę:
źródło
dev
.Najłatwiejsze rozwiązanie:
źródło
Po prostu musiałem dodać
-h localhost
źródło
W moim przypadku korzystałem z innego portu. Domyślnie jest to 5432. Używałem 5433. To działało dla mnie:
źródło
Dla ludzi w przyszłości, widząc to,
postgres
jest w/usr/lib/postgresql/10/bin
na moim serwerze Ubuntu.Dodałem go do ŚCIEŻKI w moim pliku .bashrc i dodałem ten wiersz na końcu
następnie w wierszu poleceń
Odświeżyłem moje środowisko bash. Teraz mogę korzystać
postgres -D /wherever
z dowolnego kataloguźródło
pg_dump -h localhost -U postgres -F c -b -v -f mydb.backup mydb
źródło
-U postgres
być kluczowy? Czym właściwie są te wszystkie litery ?Próbować:
psql -U nazwa_roli -d baza danych -h nazwa hosta..com -W
źródło