OperationalError at /admin/
FATAL: Peer authentication failed for user "myuser"
Este é o erro que estou recebendo quando tento acessar meu site de administração do Django. Eu estava usando o banco de dados MySQL não há problema. Eu sou novo no PostgreSQL, mas decidi mudar porque o host que planejo usar para este projeto não possui MySQL.
Portanto, achei que poderia passar pelo processo de instalação do PostgreSQL, executar ae syncdb
estar pronto.
O problema é que parece que não consigo conectar meu aplicativo ao banco de dados. Posso fazer login no PostgreSQL via linha de comando ou aplicativo de desktop que baixei. Apenas não no script.
Além disso, eu posso usar manage.py shell
para acessar o db muito bem.
Alguma ideia?
fonte
config/database.yml
- ou seja, naquele arquivo eu precisava adicionar a linhahost: localhost
(ou onde quer que você esteja, o servidor do postgres - o meu era local)pg_hba.conf
está configurado para impedir que usuários comuns se conectem através de soquetes UNIX, mas permite que eles usem TCP / IP no host local.local_settings.py
arquivo e o# Set to empty string for localhost. Not used with sqlite3.
está no deles. MENTIRAS!!!Provavelmente porque seu script está sendo executado sob outro usuário que não aquele com o qual você está tentando se conectar ( myuser aqui). Nesse caso, a autenticação de mesmo nível falhará. Sua solução
HOST: "localhost"
funciona porque você não está mais usando a autenticação de mesmo nível. No entanto, é mais lento do queHOST: ""
porque, em vez de usar soquetes unix, você usa conexões TCP. Dos documentos do django :Se você quiser continuar usando soquetes,
pg_hba.conf
são necessárias configurações corretas . O mais simples é:enquanto comenta todas as outras
local
linhas na configuração. Observe que é necessário recarregar o postgres para que essa alteração entre em vigor.Mas se a máquina de produção multiusuário estiver em questão, convém usar algo mais seguro como
md5
(veja aqui a explicação de vários métodos de autenticação).fonte
Melhor do que confiar totalmente, basta configurá-lo para MD5.
fonte
Corrigi isso corrigindo a parte inferior do arquivo /etc/postgres/9.1/main/pg_hba.conf (alterando md5 para trust; NOTE isso significa que não haverá senha do banco de dados, o que pode não ser o que você deseja)
fonte
Eu apenas me deparei com o mesmo problema, mas queria usar soquetes unix como o clime disse, mas ainda usando o
peer
método. Mapeei meu nome de usuário do sistema com o nome de usuário postgres dentro dopg_hba.conf
, que está funcionando com opeer
métodoDentro
pg_hba.conf
eu adicionei:Dentro
pg_ident.conf
eu adicionei:fonte