pg_dump: [archiver (db)] falha na conexão com o banco de dados: FATAL: Autenticação de peer falhou para o usuário “postgres”

5

Estou tentando fazer backup do banco de dados do Postgres em outro servidor, mas continuo recebendo acesso negado.

meu arquivo pg_hba.conf tem esta aparência:

# DO NOT DISABLE!
# If you change this first entry you will need to make sure that the
# database superuser can access the database using some other method.
# Noninteractive access to all databases is required during automatic
# maintenance (custom daily cronjobs, replication, and similar tasks).
#
# Database administrative login by Unix domain socket
local   all             postgres                                peer

# 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
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5

Se eu alterar a configuração postgres de PEER para TRUST, posso fazer o backup do código, mas o site não poderá mais acessar o banco de dados (algo sobre o erro SSL, que eu sei que não é o problema).

Quando eu deixo como está, PEER, o servidor funciona - php pode acessar o banco de dados - mas eu recebo um erro ao tentar executar o backup:

root > pg_dump -U postgres tablename > test.sql

.pg_dump: [archiver (db)] falha na conexão com o banco de dados "tablename": FATAL: Falha na autenticação peer para o usuário "postgres".

O site PHP Apache usa nome de usuário e senha apropriados.

O script de backup é assim: pg_dump -U postgres tablename > test.sql

como posso satisfazer o site e o script de backup para que eu possa executar os dois?

O script inteiro tentado é o seguinte: ssh SERVER "pg_dump -U postgres nome da tabela | gzip -c" > /backup/sqlbackup.sql.gz

retirado de falha do servidor: comando remoto ssh

    
por Drace 09.01.2014 / 18:10

1 resposta

9

Se o seu web site PHP Apache funciona com peer , mantenha isso, e vamos lidar com isso.

1. Primeiro método:

Como a autenticação é baseada em pares, você precisa especificar o nome do host (geralmente localhost) usando -h option:

ssh server "pg_dump -h localhost -U postgres | gzip -c" >/backup/sqlbackup.sql.gz

O principal problema aqui é que você será solicitado a fornecer a senha do usuário postgres. É um problema para a automação de backups.

Você pode consultar este para evitar que seja solicitada a senha. Mas vou descrever:

  1. Crie um arquivo oculto chamado .pgpass in $HOME
  2. Executar um chmod 600 .pgpass
  3. Edite o arquivo .pgpass e adicione esta linha: localhost:5432:postgres:postgres:password

2. Segundo método:

Você pode adicionar uma função específica a backups e confiar nela.

Crie a função de backup no Postgres:

CREATE ROLE backup WITH LOGIN SUPERUSER PASSWORD 'password'

Edite o arquivo pg_hba.conf , adicione o papel backup e trust it:

# Database administrative login by Unix domain socket
local   all             postgres                                peer
local   all             backup                                  trust

Reinicie o postgresql

Em seguida, você poderá executar o backup com o seguinte:

ssh server "pg_dump -U backup postgres | gzip -c" >/backup/sqlbackup.sql.gz
    
por 09.01.2014 / 20:07