Назад | Перейти на главную страницу

psql: fe_sendauth: пароль не указан

У меня есть работающая база данных 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к, а не к пользователю, которому вы sudoing из; это должно быть ~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", не так ли? :-)