psql: FATAL: A autenticação de mesmo nível falhou para o usuário

12

Acabei de instalar o PostgreSQL 9.4 no Ubuntu 15.10.

  1. Eu criei um usuário com createuser -P myuser
  2. Eu criei um banco de dados com createdb -O myuser mydatabase
  3. Eu editei pg_hba.confe adicioneilocal mydatabase myuser md5
  4. Eu reiniciei o PostgreSQL com sudo service postgresql restart

O usuário myuser é apenas um usuário do PostgresSQL e não possui uma conta de usuário no Ubuntu.

Quando tento conectar-me ao banco de dados, psql -W mydatabase myuserele falha psql: FATAL: Peer authentication failed for user "myuser".

O PostgreSQL está em execução…

 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.

... e ouvindo.

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

O que devo fazer para conectar-me ao usuário myuser ao banco de dados mydatabase ?

Daniel
fonte

Respostas:

16

Em uma nova instalação de alguns dias atrás, a segunda linha do meu pg_hba.confé

local   all             all              peer

Acredito que esse é o que faz com que sua tentativa de conexão falhe.

A ordem das regras é importante aqui: a primeira que corresponder ao método de acesso, nome de usuário, nome do banco de dados e intervalo de IP de origem será considerada. Se falhar, não haverá segunda tentativa; portanto, a tentativa de conexão provavelmente falhará. Ou, como a documentação declara:

Não há "fall-through" ou "backup": se um registro for escolhido e a autenticação falhar, os registros subsequentes não serão considerados. Se nenhum registro corresponder, o acesso será negado.

A solução é fácil: remova a linha acima se você não planeja usar a peerautenticação ou mova sua regra específica acima desta.

dezso
fonte
Mover a linha funcionou.
Daniel
Como podemos armazenar a senha usando uma autenticação 'md5' para não precisar digitá-la novamente e novamente ...?
sk
3

Primeiro ... verifique se você possui as linhas que permitem o usuário myuser no pg_hba.conf. Por exemplo:

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

Ou qualquer outra linha de permissão para IPV4 (e IPv6 se você usar) com: TIPO MÉTODO DE ENDEREÇO ​​DO USUÁRIO DO TYPE DATABASE

Após essa verificação, execute o psql da seguinte maneira:

psql -h localhost -U myuser mydatabase

E, no prompt solicitado, digite a senha do usuário myuser.

Alvaro Neto
fonte
11
E, claro, remova a autenticação de mesmo nível.
Alvaro Neto
Tenha uma instância que atualizei para permitir conexões remotas; o endereço de escuta é definido como '*'e adicionou a host all all 0.0.0.0/0 md5regra. Não foi necessário remover a autenticação de mesmo nível. Apenas trabalhei com o -h localhostparam. Melhor resposta, já que você provavelmente não precisa tocar na configuração em uma instalação padrão.
Mark Carpenter Jr