Tengo una base de datos PostgreSQL en funcionamiento. Ahora me gustaría automatizar algunas operaciones en mi base de datos, pero tengo un problema con la contraseña.
Estoy usando el siguiente script bash:
#!/bin/bash
export PGPASSWORD="postgres"
sudo -u postgres psql -d pg_ldap -w --no-password -h localhost -p 5432 -t -c "SELECT id FROM radusers WHERE id=1"
Cuando ejecuto el script bash me sale el siguiente error:
psql: fe_sendauth: no password supplied
Incluso he intentado configurar el archivo .pgpass en mi directorio de inicio, pero fue en vano:
*:*:*:postgres:postgres
He ejecutado el siguiente comando:
sudo chmod 0600 .pgpass
Sin embargo, no parece que ninguno de los métodos funcione. ¿Alguien tiene alguna idea? ¿Me estoy olvidando de hacer algo?
postgresql
ubuntu-12.04
alibaba
fuente
fuente
sudo su -c psql postgres psql ...
lugar..pgpass
Está en su directorio de inicio? ¿No está en la delpostgres
usuario?Respuestas:
sudo
no retiene la mayoría de las variables de entorno. Si desea especificar variables de entorno para un comando ejecutadosudo
, hágalo sin embargosudo
:Si
sudo
esto lo permite o no , dependerá de la política de seguridad vigente en su sitio.No recomiendo este enfoque, ya que expone la contraseña en el historial de la línea de comandos y en la lista de procesos. Es mucho mejor usar un
.pgpass
archivo, o preferiblemente configuradopg_hba.conf
para lapeer
autenticación de laslocal
conexiones del usuariopostgres
.Se puede utilizar un
.pgpass
archivo, pero debe ser el.pgpass
del usuario que estásudo
'ing a, no el usuario que estassudo
ing de ; Tendría que ser~postgres/.pgpass
en este caso. Piense en esto:psql
se ejecuta comopostgres
no sabe lo ejecutó a travéssudo
de su cuenta, que no sabe lo que su cuenta de usuario es, e incluso si lo hiciera no tiene permiso de lectura como de usuariopostgres
a~youruser/.pgpass
.Además,
-w
es lo mismo que--no-password
. No tiene sentido especificar ambos.fuente
-E
opción que preservará su entorno (incluidoPGPASSWORD
). Esto evita que se muestre en la lista de procesos.