psql: FATAL: неудачная аутентификация для пользователя


12

Я только что установил PostgreSQL 9.4 на Ubuntu 15.10.

  1. Я создал пользователя с createuser -P myuser
  2. Я создал базу данных с createdb -O myuser mydatabase
  3. Я отредактировал pg_hba.confи добавилlocal mydatabase myuser md5
  4. Я перезапустил PostgreSQL с sudo service postgresql restart

Пользователь myuser является только пользователем PostgresSQL и не имеет учетной записи в Ubuntu.

Когда я пытаюсь подключиться к базе данных, с psql -W mydatabase myuserним происходит сбой psql: FATAL: Peer authentication failed for user "myuser".

PostgreSQL работает ...

● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since Thu 2016-03-03 09:53:00 CET; 9min ago
  Process: 22219 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 22219 (code=exited, status=0/SUCCESS)

Mar 03 09:53:00 SERVER01 systemd[1]: Starting PostgreSQL RDBMS...
Mar 03 09:53:00 SERVER01 systemd[1]: Started PostgreSQL RDBMS.

... и слушаю.

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:postgresql    *:*                     LISTEN
tcp6       0      0 localhost:postgresql    [::]:*                  LISTEN
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     151534   /var/run/postgresql/.s.PGSQL.5432

Что мне нужно сделать, чтобы подключиться с пользователем myuser к базе данных mydatabase ?

Ответы:


16

В новой установке с несколько дней назад, во второй строке моих pg_hba.confIS

local   all             all              peer

Я полагаю, что именно это делает вашу попытку соединения неудачной.

Здесь важен порядок правил: будет рассмотрен первый, который соответствует методу доступа, имени пользователя, имени базы данных и диапазону IP-адресов источника. Если произойдет сбой, второй попытки не будет, поэтому попытка подключения, скорее всего, не удастся. Или, как указано в документации :

Не существует «резервных» или «резервных копий»: если выбрана одна запись и аутентификация не пройдена, последующие записи не рассматриваются. Если не найдено ни одной записи, доступ запрещен.

Решение простое: либо удалите вышеуказанную строку, если вы не планируете использовать peerаутентификацию, либо переместите свое конкретное правило выше этого.


Перемещение линии работало.
— Даниэль

Как мы можем сохранить пароль, используя аутентификацию 'md5', чтобы нам не приходилось вводить его снова и снова ...?
— ск

3

Сначала ... проверьте, что у вас есть права доступа для пользователя myuser в pg_hba.conf. Например:

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

Или любые другие строки разрешения для IPV4 (и IPv6, если вы используете) с: TYPE DATABASE USER ADDRESS METHOD

После этой проверки запустите psql следующим образом:

psql -h localhost -U myuser mydatabase

А затем, в ответ на запрос, введите пароль пользователя myuser.


1
И конечно же удалите одноранговую аутентификацию.
— Альваро Нето

Я обновил экземпляр, чтобы разрешить удаленные подключения, адрес прослушивания установлен '*'и добавлено host all all 0.0.0.0/0 md5правило. Не нужно было удалять одноранговую аутентификацию. Просто работал с -h localhostпараметром. Лучший ответ, так как вам, скорее всего, не нужно прикасаться к конфигурации при стандартной установке.
— Марк Карпентер-младший
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.