Como incluo a senha do usuário 'postgres' em um script de manutenção?

1

Estou configurando um cron job para fazer alguma manutenção de rotina para um banco de dados postgresql. O script é o seguinte:

#!/bin/sh

dbname="dbname"
username="postgres"
psql -d $dbname -U $username << EOF
delete from links_link where submitted_on > now() - interval'4 days';
EOF

No entanto, quando executado via crontab, isso falha porque eu não forneci a senha para o usuário postgres .

A minha pergunta é: como incluir a senha para o usuário postgres no shell script? Isso vai me levantar e correr rápido. Em segundo lugar, como posso melhorar a segurança por não ter que adicionar explicitamente uma senha no meu script? Se alguém criou esse tipo de coisa antes, sua experiência é bem-vinda. Agradecemos antecipadamente.

    
por Hassan Baig 24.06.2016 / 15:12

2 respostas

2

Você pode querer alternar para (ou permitir) ident auth e criar um usuário do sistema local com o mesmo nome. Então você pode simplesmente rodar esse script como aquele usuário, e ele entrará no postgres com o mesmo usuário.

https://www.postgresql.org/docs/9.0/static/auth-methods.html
https://www.postgresql.org/docs/9.0/static/auth-pg-hba-conf.html

Então, algo assim em pg_hba.conf:

local  dbname someuser ident

Em seguida, reinicie o postgres, e você pode su - someuser e executar o script. Isso é um pouco mais seguro do que 'local all all trust', que é o padrão e permitirá que todos os usuários locais se conectem incondicionalmente a qualquer banco de dados.

    
por 24.06.2016 / 15:37
2

Dê uma olhada em um post semelhante aqui: Postgresql: scripts de execução do psql com senha

A resposta geral aceita (que pode ou não funcionar para sua versão do Postgres) é usar a variável de ambiente PGPASSWORD da seguinte forma:

PGPASSWORD=[your password] psql -Umyuser < myscript.sql

EDIT: Parece que você tentou e isso não funcionou. Você já olhou para o link que eu enviei? Há algumas opções declaradas, verifique os recursos para configurar um arquivo pg_hba.conf : link ou observe o arquivo .pgpass : link

Se você tentar usar o pg_hba.conf , pareceria que o uso do auth-method de trust com a configuração adequada do usuário que você usaria para seu script teria permissão de acesso, conforme declarado pelo seguinte:

When trust authentication is specified, PostgreSQL assumes that anyone who can connect to the server is authorized to access the database with whatever database user name they specify (even superuser names). Of course, restrictions made in the database and user columns still apply. This method should only be used when there is adequate operating-system-level protection on connections to the server.

    
por 24.06.2016 / 15:18