Obtendo o erro: A autenticação peer falhou para o usuário “postgres”, ao tentar obter o pgsql trabalhando com rails

Estou entendendo

FATAL: Peer authentication failed for user "postgres" 

quando tento fazer postgres funcionar com o Rails.

Aqui está o meu pg_hba.conf , meu database.yml e um dump do rastreio completo .

Eu mudei a autenticação para md5 em pg_hba e tentei coisas diferentes, mas nenhuma parece funcionar.

Eu também tentei criar um novo usuário e database de acordo com o Rails 3.2, FATAL: autenticação de peer falhou para o usuário (PG :: Error)

Mas eles não aparecem no pgadmin ou mesmo quando eu executo o sudo -u postgres psql -l

Alguma ideia de onde estou indo errado?

O problema ainda é o arquivo pg_hba.conf (/etc/postgresql/9.1/main/pg_hba.conf*). Está linha:

 local all postgres peer 

Deveria estar

 local all postgres md5 

* Se você não puder encontrar este arquivo, executar o locate pg_hba.conf deverá mostrar onde está o arquivo.

Após alterar este arquivo, não esqueça de reiniciar seu servidor PostgreSQL. Se você está no Linux, isso seria sudo service postgresql restart .

Estas são breves descrições de ambas as opções, de acordo com os documentos oficiais do PostgreSQL sobre os methods de autenticação .

Autenticação peer

O método de autenticação peer funciona obtendo o nome de usuário do sistema operacional do cliente a partir do kernel e usando-o como o nome de usuário do database permitido (com mapeamento de nome de usuário opcional). Este método é suportado apenas em conexões locais.

Autenticação de senha

Os methods de autenticação baseados em senha são md5 e senha. Esses methods operam de maneira semelhante, exceto pelo modo como a senha é enviada através da conexão, ou seja, MD5-hashed e clear-text, respectivamente.

Se você está preocupado com os ataques de “sniffing” de senha, então o md5 é o preferido. A senha simples deve sempre ser evitada, se possível. No entanto, o md5 não pode ser usado com o recurso db_user_namespace. Se a conexão estiver protegida por criptografia SSL, a senha poderá ser usada com segurança (embora a autenticação por certificado SSL possa ser uma opção melhor se estiver dependendo do uso de SSL).

Local de amostra para o pg_hba.conf

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

Depois de instalar o Postgresql, executei as etapas abaixo.

  1. abra o arquivo pg_hba.conf para o Ubuntu ele estará em /etc/postgresql/9.x/main e altere esta linha:
  local todo postgres peer 

para

  local todos os postgres confiam 
  1. Reinicie o servidor
 sudo service postgresql restart 
  1. Entre no psql e defina sua senha

psql -U postgres

 ALTER USER postgres with password 'your-pass'; 
  1. Finalmente mude o pg_hba.conf de
  local todos os postgres confiam 

para

  local todo postgres md5 

Depois de reiniciar o servidor postgresql, você pode acessá-lo com sua própria senha

Detalhes dos methods de autenticação:

confiança – qualquer um que pode se conectar ao servidor está autorizado a acessar o database

peer – usa o nome de usuário do sistema operacional do cliente como nome de usuário do database para acessá-lo.

md5 – autenticação baseada em senha

para mais referências consulte aqui

Se você se conectar através do host local (127.0.0.1), não deverá ter esse problema específico. Eu não iria mexer muito com o pg_hba.conf, mas em vez disso eu ajustaria sua string de conexão:

 psql -U someuser -h 127.0.0.1 database 

onde someuser é seu usuário que você está conectando como e database é o database com o qual seu usuário tem permissão para se conectar.

Aqui está o que eu faço no Debian para configurar o 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 

Apreciar!

Isso tem funcionado para mim !!

 sudo -u postgres psql 
  1. Vá para este /etc/postgresql/9.x/main/ e abra o arquivo pg_hba.conf

No meu caso:

 $> sudo nano /etc/postgresql/9.3/main/pg_hba.conf 
  1. Substituir par com md5

Então, isso será alterado para:

Login administrativo do database pelo soquete do domínio Unix local todo o par postgres

 # 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 

Este:

Login administrativo do database pelo soquete do domínio Unix local todo 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. Então reinicie o servidor pg:

    $> serviço sudo postgresql restart

Abaixo está uma lista de methods usados ​​para se conectar com postgres:

 # 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. 

Nota: Se você ainda não criou seu usuário postgres. Crie isso e agora você pode acessar o servidor postgres usando essas credenciais de usuário.

Se você tiver problema, você precisa localizar o seu pg_hba.conf

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

e mude o arquivo de configuração:

Postgresql 9.3

Postgresql 9.3

Postgresql 9.4

Postgresql 9.3

Depois disso, você deve reiniciar o serviço postgresql

Exemplo para postgresql 9.3

service postgresql-9.3 restart

Se você tiver algum problema, precisará definir a senha novamente:

ALTER USER db_user with password 'db_password';

Eu tive o mesmo problema.

A solução da depa está absolutamente correta.

Apenas certifique-se de que você tenha um usuário configurado para usar o PostgreSQL.

Verifique o arquivo:

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

A permissão deste arquivo deve ser dada ao usuário com o qual você registrou seu psql.

Mais distante. Se você é bom até agora ..

Atualize conforme as instruções da @ depa.

ou seja

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

e depois fazer alterações.

As edições acima funcionaram para mim, depois que descobri que precisava reiniciar o servidor postgres depois de criá-las. Para o Ubuntu:

 sudo /etc/init.d/postgresql restart 

Se você quiser manter a configuração padrão, mas quiser a autenticação md5 com conexão de soquete para uma conexão usuário / db específica, adicione uma linha “local” ANTES da linha “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 

Eu estava movendo o diretório de dados em um servidor clonado e tendo problemas para efetuar login como postgres. A redefinição da senha do postgres como essa funcionou para mim.

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

Use host=localhost na conexão.

 PGconn *conn = PQconnectdb( "host=localhost user=postgres dbname=postgres password=123" ); 

Mudar o par de METHOD para confiar em pg_hba.conf (/etc/postgresql/9.1/main/pg_hba.conf | line 85) resolve o problema. Adicionando md5 pede uma senha, portanto, se há um requisito para evitar o uso de senhas, use a confiança em vez de md5 .

o comando abaixo funciona para mim:

 psql -d myDb -U username -W 

Você precisa apenas definir MÉTODO para confiar.

 #TYPE DATABASE USER ADDRESS METHOD local all all trust 

E recarregue o servidor postgres.

 # service postgresql-9.5 reload 

Alterações no pg_hba.conf não requerem o servidor RESTART postgres. apenas RELOAD.

Muitas das outras respostas pertencem às configurações nos vários arquivos de configuração, e as que pertencem ao pg_hba.conf aplicam e estão 100% corretas. No entanto, verifique se você está modificando os arquivos de configuração corretos .

Como outros mencionaram, os locais dos arquivos de configuração podem ser substituídos por várias configurações dentro do arquivo de configuração principal, bem como fornecer um caminho para o arquivo de configuração principal na linha de comando com a opção -D .

Você pode usar o seguinte comando durante uma session do psql para mostrar onde seus arquivos de configuração estão sendo lidos (assumindo que você pode iniciar o psql). Esta é apenas uma etapa de solução de problemas que pode ajudar algumas pessoas:

 select * from pg_settings where setting~'pgsql'; 

Você também deve certificar-se de que o diretório inicial do usuário postgres esteja onde você espera que esteja. Digo isso porque é muito fácil ignorar isso, devido ao fato de que o seu prompt exibirá ‘ ~ ‘ em vez do caminho real do diretório inicial, tornando-o não tão óbvio. Muitas instalações padronizam o diretório inicial do usuário postgres para /var/lib/pgsql .

Se não estiver configurado como deveria, pare o serviço postgresql e use o seguinte comando enquanto estiver logado como root. Verifique também se o usuário postgres não está conectado a outra session:

 usermod -d /path/pgsql postgres 

Finalmente, certifique-se de que sua variável PGDATA está configurada corretamente digitando echo $PGDATA , que deve gerar algo semelhante a:

 /path/pgsql/data 

Se não estiver definido, ou mostrar algo diferente do que você espera, examine seus arquivos RC ou de boot, como .profile ou .bash.rc – isso variará muito, dependendo do sistema operacional e do shell. Depois de determinar o script de boot correto para sua máquina, você pode inserir o seguinte:

 export PGDATA=/path/pgsql/data 

Para o meu sistema, coloquei isso em /etc/profile.d/profile.local.sh para que fosse acessível a todos os usuários.

Agora você deve poder iniciar o database como de costume e todas as configurações do caminho do psql devem estar corretas!

Meu problema era que eu não digitei nenhum servidor. Eu pensei que é um padrão por causa do espaço reservado, mas quando eu digitei localhost funcionou.

Se você está tentando localizar este arquivo na nuvem 9, você pode fazer

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

Pressione I para editar / inserir, pressione ESC 3 vezes e digite :wq salvará o arquivo e sairá

Se você está enfrentando este problema com rails e você sabe que você já criou esse nome de usuário com senha, juntamente com os direitos corretos, então você só precisa colocar o seguinte no final do seu arquivo database.yml.

 host: localhost 

arquivo geral será semelhante abaixo

 development: adapter: postgresql encoding: unicode database: myapp_development pool: 5 username: root password: admin host: localhost 

Você não precisa tocar em seu arquivo pg_hba.conf . Codificação feliz