heroku db: сбой извлечения из-за отсутствия пароля, когда я не указал пароль

#ruby-on-rails #postgresql #ubuntu #heroku

#ruby-on-rails #postgresql #ubuntu #heroku

Вопрос:

Когда я выполняю heroku db: pull, он находит мою локальную базу данных разработчика по адресу:

 postgres://127.0.0.1/myapp_development?encoding=utf8
  

однако, как только я подтверждаю, происходит сбой с:

 Sequel::DatabaseConnectionError -> PGError: fe_sendauth: no password supplied
  

Я попытался выполнить извлечение с указанной локальной базой данных, например

 heroku db:pull postgres://root:@localhost/db_name
  

что выдает ту же ошибку, что и при отсутствии пароля.

Я подумал, что мне может потребоваться изменить root: на myname: потому что это пользователь, которому я предоставил права суперпользователя при настройке postgres, но ни root:, ни myname: не работают

В моем database.yml есть username: и password: пустые для всех указанных баз данных.

Из командной строки как myname @ubuntu я могу ввести psql myapp_development, нормально подключиться и запустить selects.

Чего мне здесь не хватает?

Связано ли это с моими настройками pg_hba.conf? Я заглянул внутрь, и там написано:

 # Database administrative login by UNIX sockets
local   all         postgres                          ident

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               ident
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5
  

Должен ли там использоваться «доверенный»? И если да, то нужно ли мне перезапускать postgres, если я редактирую этот файл? И если необходимо «доверие», то почему rails и инструменты командной строки psql работают без паролей при входе в систему под моим именем пользователя?

Спасибо!

Ответ №1:

Метод аутентификации trust может помочь, но, как вы, несомненно, знаете, это небезопасно.
После редактирования pg_hba.conf вам не нужно перезапускать. Достаточно A reload (цитирую руководство):

pg_hba.conf Файл считывается при запуске и когда основной серверный процесс получает сигнал SIGHUP. Если вы редактируете файл в активной системе, вам нужно будет подать сигнал почтальону (с помощью pg_ctl перезагрузки или kill -HUP ), чтобы он перечитал файл.

 pg_ctl reload
  

Смотрите Подробное руководство. Вам может понадобиться руководство для версии для 8.3. Общая база данных на heroku в настоящее время работает на PostgreSQL 8.3. (Кроме того, я сомневаюсь, что у вас есть доступ к pg_ctl на heroku.)

Имейте в виду это:

Если для пользователя не был установлен пароль, сохраненный пароль равен нулю, и аутентификация по паролю всегда будет завершаться ошибкой для этого пользователя.

Акцент мой. Возможно, вы сможете войти в систему локально, потому что auth-методы ident или peer позволяют это. Но для вашей цели вам может понадобиться пароль!

Комментарии:

1. Сэр, вы джентльмен и ученый. Ключевым моментом была ваша цитата о нулевых паролях, означающих, что аутентификация для пользователя всегда завершалась неудачей. Одно ИЗМЕНЕНИЕ моего суперпользователя позже, чтобы дать ему пароль, и через несколько минут я просматриваю свою недавно извлеченную базу данных из heroku локально. Спасибо.

2. @Dave: Я преклоняюсь перед вашими добрыми словами и разделяю ваш восторг. 🙂