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аутентификацию, либо переместите свое конкретное правило выше этого.

Dezso
источник
Перемещение линии работало.
Даниэль
Как мы можем сохранить пароль, используя аутентификацию '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параметром. Лучший ответ, так как вам, скорее всего, не нужно прикасаться к конфигурации при стандартной установке.
Марк Карпентер-младший