Błąd uzyskiwania: peer authentication failed for user "postgres", when trying to get pgsql working with rails

Im getting

FATAL: Peer authentication failed for user "postgres"

Kiedy staram się, aby postgres działał z Railami.

Oto mój pg_hba.conf, my database.yml, i zrzut pełnego śladu .

Zmieniłem uwierzytelnianie na md5 w pg_hba i próbowałem różnych rzeczy, ale nic nie działa.

Próbowałem również utworzyć nowego użytkownika i bazę danych zgodnie z Rails 3.2, FATAL: peer authentication failed for user (PG:: Error)

Ale nie pojawiają się na pgadminie ani nawet kiedy biegam sudo -u postgres psql -l

Wiesz, gdzie popełniam błąd?
Author: Nathan Smith, 2013-09-06

18 answers

Problemem nadal jest Twój plik pg_hba.conf (/etc / postgresql/9.1/main / pg_hba.conf*). Ten wiersz:

local   all             postgres                                peer

Powinno być

local   all             postgres                                md5

* Jeśli nie możesz znaleźć tego pliku, uruchomienie {[3] } powinno pokazać, gdzie znajduje się plik.

Po zmianie tego pliku nie zapomnij ponownie uruchomić serwera PostgreSQL. Jeśli jesteś na Linuksie, to będzie to sudo service postgresql restart.

Są to krótkie opisy obu opcji zgodnie z oficjalnymi dokumentami PostgreSQL dotyczącymi uwierzytelniania metody .

Peer authentication

Metoda peer authentication działa poprzez uzyskanie klienta nazwa użytkownika systemu operacyjnego z jądra i używanie go jako dozwolonego nazwa użytkownika bazy danych (z opcjonalnym mapowaniem nazwy użytkownika). Metoda ta jest obsługiwane tylko w połączeniach lokalnych.

Uwierzytelnianie hasła

Metody uwierzytelniania oparte na hasłach to md5 i password. Te metody działają podobnie z wyjątkiem sposobu że hasło jest wysyłane przez połączenie, czyli odpowiednio MD5-hashed I clear-text.

Jeśli w ogóle obawiasz się ataków typu "sniffing" to md5 jest preferowany. Jeśli to możliwe, należy zawsze unikać zwykłego hasła. Jednak md5 nie może być używany z funkcją db_user_namespace. Jeśli połączenie jest chronione szyfrowaniem SSL, a następnie można użyć hasła bezpiecznie (chociaż uwierzytelnianie certyfikatów SSL może być lepszym wyborem jeśli zależy od korzystanie z SSL).

Przykładowa lokalizacja dla pg_hba.conf

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

 732
Author: depa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-06 03:31:06

Po zainstalowaniu Postgresql wykonałem poniższe kroki.

  1. otwórz plik pg_hba.conf Dla Ubuntu będzie on w /etc/postgresql/9.x/main i zmień tę linię:
local   all             postgres                                peer

Do

local   all             postgres                                trust
  1. Restart serwera
sudo service postgresql restart
  1. Zaloguj się do psql i ustaw hasło

PSQL-u postgres

ALTER USER postgres with password 'your-pass';
  1. wreszcie Zmień pg_hba.conf z
local   all             postgres                                trust

Do

local   all             postgres                                md5

Po ponownym uruchomieniu postgresql serwer, można uzyskać do niego dostęp za pomocą własnego hasła

Szczegóły metod uwierzytelniania:

Trust-każdy, kto może połączyć się z serwerem, jest upoważniony do dostępu do bazy danych

Peer-używa nazwy użytkownika systemu operacyjnego klienta jako nazwy użytkownika bazy danych, aby uzyskać do niej dostęp.

Md5-password-base authentication

Aby uzyskać więcej informacji sprawdź tutaj

 245
Author: Arivarasan L,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-05 13:34:54

Jeśli łączysz się przez localhost (127.0.0.1), nie powinieneś doświadczać tego konkretnego problemu. Z pg_hba bym się nie wygłupiał.conf ale zamiast tego dostosowałbym Twój łańcuch połączeń:

psql -U someuser -h 127.0.0.1 database

Gdzie someuser to twój użytkownik, do którego się łączysz, a baza danych to baza danych, do której użytkownik ma uprawnienia.

Oto, co robię na Debianie, aby skonfigurować postgres:

http://www.postgresql.org/download/linux/debian/  (Wheezy 7.x)

as root …

    root@www0:~# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list

    root@www0:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -

    root@www0:~# apt-get update

    root@www0:~# apt-get install postgresql-9.4        

    root@www0:~# su - postgres 

    postgres@www0:~$ createuser --interactive -P someuser
    Enter password for new role:
    Enter it again:
    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) n

    postgres@www0:~$ createdb -O someuser database

    postgres@www0:~$ psql -U someuser -h 127.0.0.1 database
Smacznego!
 131
Author: StylusEater,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-01 10:41:02

To mi się udało !!

sudo -u postgres psql
 18
Author: iamuser2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-10 07:39:13
  1. przejdź do tego / etc / postgresql / 9.x / main / i open pg_hba.conf Plik

W moim przypadku:

$>  sudo nano /etc/postgresql/9.3/main/pg_hba.conf
  1. Zastąppeer na md5

Więc to zostanie zmienione na:

Logowanie do bazy danych przez gniazdo domeny Unix local all postgres peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5

To:

Logowanie do bazy danych przez gniazdo domeny Unix local all Postgres md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
  1. Następnie uruchom ponownie serwer pg:

    $ > sudo service postgresql restart

Poniżej znajduje się lista metod używanych do łączenia się z postgresem:

# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi",
# "krb5", "ident", "peer", "pam", "ldap", "radius" or "cert".  Note that
# "password" sends passwords in clear text; "md5" is preferred since
# it sends encrypted passwords.

Uwaga: Jeśli nie utworzyłeś jeszcze użytkownika postgres. Utwórz go i teraz możesz uzyskać dostęp do serwera postgres przy użyciu tych poświadczeń użytkownika.

 14
Author: Taimoor Changaiz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-10 11:29:37

Jeśli masz problem, musisz zlokalizować swój pg_hba.conf. Polecenie to:

find / -name 'pg_hba.conf' 2>/dev/null

A następnie zmień plik konfiguracyjny:

Postgresql 9.3

Postgresql 9.3

Postgresql 9.4

Postgresql 9.3

Następnym krokiem jest ponowne uruchomienie instancji db:

service postgresql-9.3 restart

Jeśli masz jakieś problemy, musisz ustawić hasło ponownie:

ALTER USER db_user with password 'db_password';

 13
Author: d.danailov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-22 07:48:40

Miałem ten sam problem.

Rozwiązanie z depa jest absolutnie poprawne.

Upewnij się tylko, że masz skonfigurowanego użytkownika do korzystania z PostgreSQL.

Sprawdź plik:

$ ls /etc/postgresql/9.1/main/pg_hba.conf -l

Uprawnienia do tego pliku powinny być przyznane Użytkownikowi, u którego zarejestrowałeś swoje psql.

Dalej. Jeśli jesteś dobry do teraz..

Zaktualizuj zgodnie z instrukcjami @ depa.

Tzn.

$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf

A następnie wprowadzić zmiany.

 10
Author: nirvanastack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-14 02:25:57

Powyższe edycje zadziałały dla mnie, po tym jak zorientowałem się, że po ich wykonaniu muszę ponownie uruchomić serwer postgres. Dla ubuntu:

sudo /etc/init.d/postgresql restart
 6
Author: sibosop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-25 21:42:51

Jeśli chcesz zachować domyślną konfigurację, ale chcesz uwierzytelnić md5 z połączeniem z gniazdem dla jednego konkretnego połączenia użytkownika / db, dodaj linię "local" przed linią" local all / all":

# TYPE  DATABASE     USER         ADDRESS             METHOD

# "local" is for Unix domain socket connections only
local   username     dbname                           md5  # <-- this line
local   all          all                              peer
# IPv4 local connections:
host    all          all          127.0.0.1/32        ident
# IPv6 local connections:
host    all          all          ::1/128             ident
 6
Author: Åsmund,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-10 12:11:15

Przenosiłem katalog danych na sklonowany serwer i miałem problemy z zalogowaniem się jako postgres. Resetowanie hasła postgres w ten sposób działało dla mnie.

root# su postgres postgres$ psql -U postgres psql (9.3.6) Type "help" for help. postgres=#\password Enter new password: Enter it again: postgres=#

 6
Author: Luca Marletta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-27 14:43:04

Użyj host=localhost w połączeniu.

PGconn *conn = PQconnectdb(
    "host=localhost user=postgres dbname=postgres password=123"
);
 6
Author: Manisha Vasani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-15 17:57:11

Zmiana metody peerna trust w pg_hba.conf (/etc / postgresql/9.1/main / pg_hba.conf / line 85) rozwiązuje problem. Dodanie md5 prosi o podanie hasła, dlatego jeśli istnieje wymóg unikania używania haseł, użyj trust zamiast md5.

 5
Author: Supun Muthutantrige,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-03 05:40:44

Poniższe polecenie działa dla mnie:

psql -d myDb -U username -W
 4
Author: Mazen Ora,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-16 10:27:10

Musisz po prostu ustawić metodę zaufania.

#TYPE  DATABASE        USER            ADDRESS                 METHOD
local    all             all                                     trust

I przeładować serwer postgres.

# service postgresql-9.5 reload

Zmiany w pg_hba.conf nie wymaga restartu serwera postgres. przeładuj.

 3
Author: Alexandr Zaichenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-14 13:11:02

Wiele innych odpowiedzi dotyczy ustawień w różnych plikach konfiguracyjnych, a te odnoszące się do pg_hba.conf mają zastosowanie i są w 100% poprawne. Upewnij się jednak, że modyfikujesz poprawne pliki konfiguracyjne .

Jak już inni wspominali, Lokalizacje plików konfiguracyjnych mogą być nadpisywane różnymi ustawieniami w głównym pliku konfiguracyjnym, a także dostarczaniem ścieżki do głównego pliku konfiguracyjnego w linii poleceń za pomocą opcji -D.

Możesz użyć następujących polecenie podczas sesji psql, aby pokazać, gdzie są odczytywane pliki konfiguracyjne(zakładając, że możesz uruchomić psql). Jest to tylko krok rozwiązywania problemów, który może pomóc niektórym ludziom:]}

select * from pg_settings where setting~'pgsql';  

Powinieneś również upewnić się, że katalog domowy Twojego użytkownika postgres jest tam, gdzie go oczekujesz. Mówię to, ponieważ łatwo jest to przeoczyć ze względu na fakt, że monit wyświetli '~' zamiast rzeczywistej ścieżki katalogu domowego, co nie jest tak oczywiste. Wiele instalacja domyślnie domowy katalog użytkownika postgres ma wartość /var/lib/pgsql.

Jeśli nie jest ustawiona na to, co ma być, Zatrzymaj usługę postgresql i użyj następującego polecenia, Gdy jesteś zalogowany jako root. Upewnij się również, że użytkownik postgres nie jest zalogowany do innej sesji:

usermod -d /path/pgsql postgres

Na koniec upewnij się, że zmienna PGDATA jest ustawiona poprawnie, wpisując echo $PGDATA, co powinno wypisać coś podobnego do:

/path/pgsql/data

Jeśli nie jest ustawiony, lub pokazuje coś innego niż to, co Ty spodziewaj się tego, Sprawdź swoje pliki startowe lub RC, takie jak .profil lub .bash.rc-to będzie się znacznie różnić w zależności od systemu operacyjnego i powłoki. Po określeniu WŁAŚCIWEGO skryptu startowego dla komputera można wstawić następujące:

export PGDATA=/path/pgsql/data

Dla mojego systemu, umieściłem to w /etc/profile.d/profile.local.sh, aby było dostępne dla wszystkich użytkowników.

Powinieneś teraz mieć możliwość init bazy danych jak zwykle i wszystkie ustawienia ścieżki psql powinny być poprawne!

 3
Author: Bill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-20 20:34:51

Mój problem polegał na tym, że nie wpisałem żadnego serwera. Myślałem, że jest to domyślne z powodu placeholder, ale kiedy wpisałem localhost to działało.

 2
Author: Epsilon47,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-12 12:25:53

Jeśli próbujesz zlokalizować ten plik w chmurze 9, możesz zrobić

sudo vim /var/lib/pgsql9/data/pg_hba.conf

Naciśnij I Aby edytować / wstawić, naciśnij ESC 3 razy i wpisz :wq zapisze plik i zakończy

 2
Author: Marshall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-29 19:17:04

Jeśli borykasz się z tym problemem z rails i wiesz, że już utworzyłeś tę nazwę Użytkownika z hasłem wraz z poprawnymi prawami, musisz po prostu umieścić following na końcu swojej bazy danych.plik yml.

host: localhost

Ogólny plik będzie wyglądał jak poniżej

development:
  adapter: postgresql
  encoding: unicode
  database: myapp_development
  pool: 5
  username: root
  password: admin
  host: localhost
Nie musisz w ogóle dotykać pliku. Happy coding
 1
Author: ImranNaqvi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-04 19:11:54