У меня есть работающая база данных 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
Тем не менее, похоже, что ни один из методов не работает. Есть у кого-нибудь идеи? Я что-то забываю?
sudo
не сохраняет большинство переменных среды. Если вы хотите указать переменные среды для команды, выполняемой под sudo
, сделай так sudo
:
sudo PGPASSWORD="postgres" -u postgres psql -d pg_ldap -w --no-password -h localhost -p 5432 -t -c "SELECT id FROM radusers WHERE id=1"
Так или иначе sudo
разрешает это будет зависеть от политики безопасности, действующей на вашем сайте.
Я не рекомендую этот подход, поскольку он показывает пароль в истории командной строки и в списке процессов. Намного лучше использовать .pgpass
файл или желательно установить pg_hba.conf
на peer
аутентификация local
соединения от пользователя postgres
.
Вы можете использовать .pgpass
файл, но это должен быть .pgpass
пользователя вы sudo
к, а не к пользователю, которому вы sudo
ing из; это должно быть ~postgres/.pgpass
в таком случае. Подумай об этом: psql
работает как postgres
не знает, что вы запустили это через sudo
из вашей учетной записи, он не знает, что такое ваша учетная запись пользователя, и даже если это так, у него нет разрешения на чтение в качестве пользователя postgres
к ~youruser/.pgpass
.
Дополнительно, -w
такой же как --no-password
. Нет смысла указывать и то, и другое.
Это происходит, если пароль для базы данных не указан.
default="postgres://postgres:password@127.0.0.1:5432/DBname"
Я даже пытался настроить файл .pgpass в моем домашнем каталоге но безрезультатно:
Вам необходимо создать файл .pgpass в домашнем каталоге учетной записи, на которой запущен psql команда, т.е. Postgres аккаунт, а не ваш!
psql -d pg_ldap -w --нет пароля ...
Я думаю, что эти варианты тоже могут сбивать с толку.
Оба означают одно и то же, в частности "не использовать пароль ".
Я предлагаю удалить их. psql подтвердит, что требуется пароль, но должен определить правильно размещенный файл .pgpass и использовать его вместо спрашивая для пароля.
И, конечно же, пароль вашей учетной записи postgres не действительно "postgres", не так ли? :-)