У меня есть работающая база данных PostgreSQL. Теперь я хотел бы автоматизировать некоторые операции с моей базой данных, но у меня проблема с паролем.
Я использую следующий скрипт 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"
Когда я запускаю скрипт bash, я получаю следующую ошибку:
psql: fe_sendauth: no password supplied
Я даже пытался настроить файл .pgpass в моем домашнем каталоге, но безрезультатно:
*:*:*:postgres:postgres
Я выполнил следующую команду:
sudo chmod 0600 .pgpass
Тем не менее, не похоже, что какой-либо из методов работает. У кого-нибудь есть идеи? Я забыл что-то сделать?
postgresql
ubuntu-12.04
Алибаба
источник
источник
sudo su -c psql postgres psql ...
вместо..pgpass
в вашем домашнем каталоге? Не вpostgres
пользовательском?Ответы:
sudo
не сохраняет большинство переменных окружения. Если вы хотите указать переменные окружения для запуска командыsudo
, сделайте такsudo
:Будет ли это
sudo
разрешено или нет, будет зависеть от политики безопасности, действующей на вашем сайте.Я не рекомендую такой подход, поскольку он предоставляет пароль в истории командной строки и в списке процессов. Гораздо лучше использовать
.pgpass
файл или желательно настроитьpg_hba.conf
его дляpeer
аутентификацииlocal
соединений от пользователяpostgres
.Вы можете использовать
.pgpass
файл, но он должен быть.pgpass
от пользователя , которого Выsudo
«ИНГ, а не пользователя , которого Выsudo
ИНГ с ; это должно быть~postgres/.pgpass
в этом случае. Подумайте об этом:psql
работает , какpostgres
не знает , что побежал черезsudo
со своего счета, он не знает , что ваша учетная запись пользователя, и даже если он сделал это не имеет права на чтение , как пользовательpostgres
с~youruser/.pgpass
.Кроме того, так
-w
же, как--no-password
. Нет смысла указывать оба.источник
-E
опцию, которая сохранит вашу среду (в том числеPGPASSWORD
). Это предотвращает его отображение в списке процессов.