rake db: создать не удалось, проблема с аутентификацией в postgresql 8.4 - PullRequest
6 голосов
/ 28 апреля 2011

обо всем по порядку, прошу прощения за мою крайнюю нелюбовь. Я действительно пытался найти решение там, но теперь я застрял и совершенно не знаю.

Я пытаюсь развернуть приложение rails 3 на удаленном сервере; при разработке на моей локальной виртуальной машине никаких проблем не проявилось. Но теперь, когда я пытаюсь запустить

rake db:create

не получается, с ошибкой (здесь переводится, так как я француз):

FATAL : password authentication failed for user <<mylogin>>

вот мой database.yml:

login: &login
  adapter: postgresql
  username: mylogin
  password: mypassword
  host: localhost
  port: 5432
  encoding: UTF8

development:
  <<: *login
  database: somesite_development

test:
  <<: *login
  database: somesite_test

production:
  <<: *login
  database: somesite_production

пользователь "mylogin" был создан postgre-side с помощью инструмента командной строки "createuser". Это разрешено создавать БД. postgresql.conf настраивает сервер для прослушивания на локальном хосте. Я много чего перепробовал с pg_hba.conf, но ничего не получалось - какой бы метод ни использовался (идент, пароль, md5) для пользователя «mylogin» на 127.0.0.1, аутентификация не удалась - хотя у меня никогда не было проблем с подключением / созданием БД PSQL.

какая-нибудь подсказка?

РЕДАКТИРОВАТЬ: хорошо, узнал, как невероятно глупо я был ... пароль для моего пользователя просто не был установлен! Я думаю, что забыл точку с запятой после

ИЗМЕНИТЬ ПОЛЬЗОВАТЕЛЯ xxxx С ПАРОЛЕМ xxxx;

... я увидел это, запросив «SELECT * FROM pg_shadow;» - поле пароля было пустым. Три дня моей жизни были потрачены впустую из-за этой глупой ошибки ...

Ответы [ 6 ]

19 голосов
/ 12 февраля 2012

Я тоже застрял на этой проблеме очень долгое время и ходил по различным ссылкам (включая те, которые предлагаются в этом посте), чтобы попытаться найти ответ, но безрезультатно.Однако решение очень простое.Хотя многие другие ответы были на правильном пути, вот точные шаги для решения проблемы:

  1. Откройте файл pg_hba.conf в текстовом редакторе по вашему выбору.(Он находится в / etc / postgresql // main)

  2. Перейдите к строке, которая гласит:

    # "local" предназначен только для соединений сокетов домена Unix

и вставьте под ним:

  local all         all                 trust

Это будет доверять всем пользователям Unix, пытающимся подключиться к серверу psql на локальном компьютере.(Прочтите документацию вверху страницы для получения дополнительной информации о функции столбцов)

  1. Сохраните файл pg_hba.conf и выйдите из текстового редактора.

  2. Перезапустите сервер Postgresql, выполнив команду:

    перезапуск службы postgresql

  3. Теперь попробуйте запустить сервер psql, выполнив:

    psql -d-U (или «psql» для краткости)

  4. Вы должны войти в систему без проблем.

* Примечание: все это предполагаетчто у вас есть действительное имя пользователя psql для входа в систему. Если вы не перейдете по ссылкам ниже, чтобы настроить его:

Настройка пользователя: http://erikonrails.snowedin.net/?p=274

Убедитесь, что у вас естьдействительный пользователь postgres: http://archives.postgresql.org/pgsql-novice/2002-08/msg00072.php

Список всех существующих пользователей psql: если вам нужна команда «LIST USERS» или «DISPLAY USERS», попробуйте:

«select * from pg_user;»(при входе в psql)

Удачи!

2 голосов
/ 29 июня 2013

У меня была такая же проблема. В моем случае это было потому, что в моем файле database.yml имя пользователя начиналось с заглавной буквы, а в базе данных все строчные.

Решение: При создании пользователя из командной строки postgres он преобразует все буквы в нижний регистр. Для использования заглавных букв необходимо использовать двойные кавычки .

Пример:

create user AlbertEinstein; result = alberteinstein

против

create user "AlbertEinstein"; result = AlbertEinstein

2 голосов
/ 08 октября 2011

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

ALTER USER xxxx WITH PASSWORD xxxx ;

... я увидел это, запросив "SELECT * FROM pg_shadow;" - поле пароля было пустым. Три дня моей жизни были потрачены впустую из-за этой глупой ошибки ...

0 голосов
/ 12 февраля 2017

В моем случае я обнаружил, что более поздняя строка правила разрешений host в файле pg_hba.conf переопределила более раннюю строку local.Я правильно настраивал строку local для использования аутентификации md5, но строка host была установлена ​​на ident, которую я изменил на md5

Как и другие подчеркивали здесь, обратите внимание, что с помощью trustэто небезопасный метод, поэтому его не следует использовать при любом развертывании в производственном стиле.

0 голосов
/ 26 мая 2011

Вам нужно дать "myuser" в postgresql привилегию "Может создавать объекты базы данных".

В pgadmin это выглядит так:

enter image description here

После вызова rake db: create вы можете отобрать эту привилегию.

0 голосов
/ 02 мая 2011

Вот несколько кратких инструкций, которые должны работать для вас

http://www.cyberciti.biz/faq/psql-fatal-ident-authentication-failed-for-user/.

В основном вам нужно установить метод аутентификации для localhost на «trust».

...