Получение ошибки: аутентификация равноправного узла для пользователя «postgres» при попытке заставить pgsql работать с rails

527

Я получаю ошибку:

FATAL: Peer authentication failed for user "postgres"

когда я пытаюсь заставить postgres работать с Rails.

Здесь мой pg_hba.conf, мой database.yml и дамп полной трассировки.

Я изменил аутентификацию на md5 в pg_hba и пробовал разные вещи, но, похоже, ничего не работает.

Я также попытался создать нового пользователя и базу данных в соответствии с Rails 3.2, FATAL: неудачная аутентификация для пользователя (PG :: Error)

Но они не отображаются на pgadmin или даже когда я запускаю sudo -u postgres psql -l.

Есть идеи, где я иду не так?

  • 1
    1): убедитесь, что у вас есть пользователь с именем «postgres», созданный и имеющий право на вашу базу данных 2): убедитесь, что у него есть пароль 3): убедитесь, что ваш config / database.yml содержит учетные данные прав (имя пользователя + пароль)
  • 2
    нужен везде пэр и отступ в md5
Показать ещё 3 комментария

19 ответов

765
Лучший ответ

Проблема по-прежнему в вашем pg_hba.conf (/etc/postgresql/9.1/main/pg_hba.conf*). Эта строка:

local   all             postgres                                peer

Должно быть

local   all             postgres                                md5

* Если вы не можете найти этот файл, запуск locate pg_hba.conf покажет вам, где находится файл.

После изменения этого файла не забудьте перезапустить ваш сервер PostgreSQL. Если вы работаете в Linux, это будет sudo service postgresql restart.

Это краткое описание обеих опций в соответствии с официальными документами PostgreSQL по методам аутентификации.

Одноранговая аутентификация

Метод одноранговой аутентификации работает путем получения имени пользователя операционной системы клиента из ядра и использования его в качестве разрешенного имени пользователя базы данных (с необязательным отображением имени пользователя). Этот метод поддерживается только на локальных соединениях.

Аутентификация по паролю

Методы аутентификации на основе пароля - это md5 и пароль. Эти методы работают аналогично, за исключением того, что пароль передается по соединению, а именно, MD5-хэшированный и открытый текст соответственно.

Если вас вообще беспокоят атаки с "перехватом" пароля, тогда md5 предпочтительнее. Простой пароль всегда следует избегать, если это возможно. Однако md5 нельзя использовать с функцией db_user_namespace. Если соединение защищено шифрованием SSL, пароль можно использовать безопасно (хотя аутентификация SSL-сертификата может быть лучшим выбором, если она зависит от использования SSL).

Пример местоположения для pg_hba.conf

/etc/postgresql/9.1/main/pg_hba.conf

  • 36
    После изменения этой /etc/init.d/postgresql reload вам потребуется перезагрузить службу postgresql.
  • 76
    положить это здесь, так как я всегда забываю, где находится этот файл /etc/postgresql/9.1/main/pg_hba.conf
Показать ещё 16 комментариев
271

После установки Postgresql я сделал следующие шаги.

  • откройте файл pg_hba.conf для Ubuntu, он будет в /etc/postgresql/9.x/main и измените эту строку:
local   all             postgres                                peer

к

local   all             postgres                                trust
  1. Перезагрузите сервер
sudo service postgresql restart
  1. Войдите в psql и задайте свой пароль.

psql -U postgres

ALTER USER postgres with password 'your-pass';
  1. Наконец, измените pg_hba.conf на
local   all             postgres                                trust

к

local   all             postgres                                md5

После перезапуска сервера postgresql вы можете получить к нему доступ со своим собственным паролем

Подробные сведения об аутентификации:

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

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

md5 - аутентификация на основе пароля

для дополнительной справки здесь.

  • 12
    изменение метода на «доверие» сработало для меня. +1 для объяснения деталей метода аутентификации.
  • 2
    В OS X homebrew по умолчанию используется доверие, в то время как в Ubuntu как-то по умолчанию установлено значение «peer», что привело к расхождению между моей настройкой и настройкой моего коллеги. Мы изменили его на MD5, что не помогло, поэтому реальный ответ здесь - «доверие» (мы проводим только тестирование разработки). Должен получить больше голосов.
Показать ещё 7 комментариев
153

Если вы подключаетесь через localhost (127.0.0.1), вы не должны испытывать эту конкретную проблему. Я бы не стал гадоваться с pg_hba.conf, но вместо этого я бы отредактировал вашу строку соединения:

psql -U someuser -h 127.0.0.1 database

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

Вот что я делаю в Debian для установки postgres:

http://www.postgresql.org/download/linux/debian/  (Wheezy 7.x)

as root …

    root@www0:~# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list

    root@www0:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -

    root@www0:~# apt-get update

    root@www0:~# apt-get install postgresql-9.4        

    root@www0:~# su - postgres 

    postgres@www0:~$ createuser --interactive -P someuser
    Enter password for new role:
    Enter it again:
    Shall the new role be a superuser? (y/n) n
    Shall the new role be allowed to create databases? (y/n) y
    Shall the new role be allowed to create more new roles? (y/n) n

    postgres@www0:~$ createdb -O someuser database

    postgres@www0:~$ psql -U someuser -h 127.0.0.1 database

Наслаждайтесь!

  • 13
    Я думаю, что это лучшее решение, так как на самом деле оно решает локальную проблему, не мешая, не мешая с глобальной конфигурацией, как рекомендуют другие ответы.
  • 1
    Мне пришлось изменить host: 127.0.0.1 с по умолчанию на localhost в config / database.yml - это на той же машине, поэтому я не понимаю, почему
Показать ещё 3 комментария
22

Это сработало для меня!

sudo -u postgres psql
  • 0
    это должно работать нормально, если ваш текущий зарегистрированный пользователь находится в файле sudoers.
14
  1. Перейдите в этот /etc/postgresql/9.x/main/ и откройте файл pg_hba.conf

В моем случае:

$>  sudo nano /etc/postgresql/9.3/main/pg_hba.conf
  1. Замените пира с md5

Так что это будет изменено на:

Административный вход в базу данных с помощью сокета домена Unix local все pegres peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5

Это:

Административный вход в базу данных через сокет домена Unix локальный все postgres MD5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
  1. Затем перезапустите сервер pg:

    $> перезапуск службы sudo после перезапуска

Ниже приведен список методов, используемых для соединения с postgres:

# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi",
# "krb5", "ident", "peer", "pam", "ldap", "radius" or "cert".  Note that
# "password" sends passwords in clear text; "md5" is preferred since
# it sends encrypted passwords.

Примечание. Если вы еще не создали пользователя postgres. Создайте это, и теперь вы можете получить доступ к серверу postgres, используя учетные данные этого пользователя.

СОВЕТ: Если после перезапуска postgres он не работает, закройте терминал и снова откройте.

  • 0
    НЕ работает на Ubuntu 16.04
14

Если у вас есть проблема, вам нужно найти свой pg_hba.conf. Команда:

find / -name 'pg_hba.conf' 2>/dev/null

и после этого измените файл конфигурации:

Postgresql 9,3

Изображение 4153

Postgresql 9,4

Изображение 4154

Следующий шаг: Перезапуск вашего экземпляра БД:

service postgresql-9.3 restart

Если у вас возникли проблемы, вам нужно снова установить пароль:

ALTER USER db_user with password 'db_password';

10

У меня была та же проблема.

Решение от депы абсолютно корректно.

Просто убедитесь, что у пользователя настроено использование PostgreSQL.

Проверьте файл:

$ ls /etc/postgresql/9.1/main/pg_hba.conf -l

Разрешение этого файла должно быть предоставлено пользователю, с которым вы зарегистрировали свой psql.

Далее. Если вы добрались до сих пор..

Обновление согласно инструкциям @depa.

то есть.

$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf

а затем внесите изменения.

  • 0
    Я сталкиваюсь с той же проблемой. Но какие разрешения мне нужны, я не знаю. вы не могли бы мне помочь. Я получаю вывод для команды 'ls' -rw-r----- 1 postgres postgres 4640 Jun 16 09:59 /etc/postgresql/9.5/main/pg_hba.conf
7

Если вы хотите сохранить конфигурацию по умолчанию, но хотите, чтобы аутентификация md5 с подключением сокета для одного конкретного подключения пользователя /db, добавьте "локальную" строку ПЕРЕД ПОЛНОЙ ВСЕЙ/ВСЕЙ:

# TYPE  DATABASE     USER         ADDRESS             METHOD

# "local" is for Unix domain socket connections only
local   username     dbname                           md5  # <-- this line
local   all          all                              peer
# IPv4 local connections:
host    all          all          127.0.0.1/32        ident
# IPv6 local connections:
host    all          all          ::1/128             ident
  • 0
    «ДО» в этом ответе заслуживает большей проработки в других ответах. Оказывается, psql последовательно проверяет записи в файле pg_hba.conf, как указано в документации: postgresql.org/docs/11/static/auth-pg-hba-conf.html.
6

Используйте host=localhost в подключении.

PGconn *conn = PQconnectdb(
    "host=localhost user=postgres dbname=postgres password=123"
);
6

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

sudo /etc/init.d/postgresql restart
6

Я перемещал каталог данных на клонированном сервере и имел проблемы с регистрацией в качестве postgres. Сброс пароля postgres как это сработало для меня.

root# su postgres postgres$ psql -U postgres psql (9.3.6) Type "help" for help. postgres=#\password Enter new password: Enter it again: postgres=#

5

Изменение метода peer до доверия в pg_hba.conf(/etc/postgresql/9.1/main/pg_hba.conf | строка 85) решает проблему. Добавление md5 запрашивает пароль, поэтому, если есть требование избежать использования паролей, используйте trust вместо md5.

4

команда ниже работает для меня:

psql -d myDb -U username -W
  • 2
    Не хочешь уточнить, что именно делает эта команда?
  • 0
    man psql -W --password Force psql to prompt for a password before connecting to a database. This option is never essential, since psql will automatically prompt for a password if the server demands password authentication. However, psql will waste a connection attempt finding out that the server wants a password. In some cases it is worth typing -W to avoid the extra connection attempt.
3

Многие другие ответы относятся к настройкам в различных файлах конфигурации, а те, которые относятся к pg_hba.conf, применяются и на 100% правильны. Однако убедитесь, что вы изменяете правильные файлы конфигурации.

Как уже упоминалось, расположение конфигурационных файлов может быть переопределено различными настройками внутри основного файла конфигурации, а также указать путь к основному файлу конфигурации в командной строке с опцией -D.

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

select * from pg_settings where setting~'pgsql';  

Вы также должны убедиться, что домашний каталог для вашего пользователя postgres - это то место, где вы ожидаете. Я говорю об этом, потому что это довольно легко упустить из-за того, что в вашем приглашении будет отображаться "~" вместо фактического пути вашего домашнего каталога, что делает его не столь очевидным. Во многих установках по умолчанию используется домашний каталог пользователя postgres для /var/lib/pgsql.

Если он не настроен на то, что он должен быть, остановите службу postgresql и используйте следующую команду при входе в систему под именем root. Также убедитесь, что пользователь postgres не входит в другой сеанс:

usermod -d /path/pgsql postgres

Наконец, убедитесь, что ваша переменная PGDATA установлена ​​правильно, набрав echo $PGDATA, которая должна выводить что-то похожее на:

/path/pgsql/data

Если он не установлен или показывает что-то отличное от того, что вы ожидаете, проверьте свои файлы запуска или RC, такие как .profile или .bash.rc - это сильно изменится в зависимости от вашей ОС и вашей оболочки. После того, как вы определили правильный запуск script для своего компьютера, вы можете вставить следующее:

export PGDATA=/path/pgsql/data

Для моей системы я разместил ее в /etc/profile.d/profile.local.sh, чтобы она была доступна для всех пользователей.

Теперь вы должны иметь возможность инициализировать базу данных как обычно, и все ваши настройки пути psql должны быть правильными!

3

Вам нужно просто настроить метод, чтобы доверять.

#TYPE  DATABASE        USER            ADDRESS                 METHOD
local    all             all                                     trust

И перезагрузите сервер postgres.

# service postgresql-9.5 reload

Изменения в pg_hba.conf не требуют сервера postgres RESTART. просто RELOAD.

2

Если вы пытаетесь найти этот файл в Cloud 9, вы можете сделать

sudo vim /var/lib/pgsql9/data/pg_hba.conf

Нажмите I для редактирования/вставки, нажмите ESC 3 раза и введите :wq сохранит файл и выйдет

2

Моя проблема была в том, что я не набирал ни одного сервера. Я думал, что это по умолчанию из-за заполнителя, но когда я набрал localhost, это сработало.

1

Если вы столкнулись с этой проблемой, связанной с rails, и знаете, что вы уже создали это имя пользователя с паролем и правильными правами, то вам просто нужно добавить следующее в конец файла database.yml.

host: localhost

общий файл будет выглядеть ниже

development:
  adapter: postgresql
  encoding: unicode
  database: myapp_development
  pool: 5
  username: root
  password: admin
  host: localhost

Вам вообще не нужно прикасаться к файлу pg_hba.conf. Удачного кодирования

0
sudo psql --host=localhost --dbname=database-name --username=postgres

Это решило мою проблему

Ещё вопросы

Сообщество Overcoder
Наверх
Меню