Ошибка при получении: Ошибка аутентификации сверстников для пользователя "postgres" при попытке заставить pgsql работать с рельсами

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

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.

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

554
задан 06 сент. '13 в 21:15
источник поделиться
19 ответов

Проблема по-прежнему в вашем 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

805
ответ дан 06 сент. '13 в 21:25
источник

После установки 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 - аутентификация на основе пароля

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

271
ответ дан 04 нояб. '14 в 15:25
источник

Если вы подключаетесь через 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

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

146
ответ дан 28 февр. '15 в 18:51
источник

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

sudo -u postgres psql
22
ответ дан 10 янв. '18 в 10:39
источник

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

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

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

Postgresql 9,3

Postgresql 9.3

Postgresql 9,4

Postgresql 9.3

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

service postgresql-9.3 restart

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

ALTER USER db_user with password 'db_password';

14
ответ дан 08 апр. '15 в 17:24
источник
  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 он не работает, закройте терминал и снова откройте.

14
ответ дан 10 сент. '15 в 14:29
источник

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

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

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

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

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

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

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

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

то есть.

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

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

10
ответ дан 14 окт. '13 в 5:25
источник

Если вы хотите сохранить конфигурацию по умолчанию, но хотите, чтобы аутентификация 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
7
ответ дан 10 авг. '16 в 15:11
источник

Я перемещал каталог данных на клонированном сервере и имел проблемы с регистрацией в качестве 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=#

6
ответ дан 30 апр. '15 в 15:20
источник

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

PGconn *conn = PQconnectdb(
    "host=localhost user=postgres dbname=postgres password=123"
);
6
ответ дан 21 июля '16 в 12:13
источник

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

sudo /etc/init.d/postgresql restart
6
ответ дан 26 авг. '15 в 0:42
источник

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

5
ответ дан 03 февр. '17 в 8:40
источник

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

psql -d myDb -U username -W
4
ответ дан 16 марта '15 в 13:27
источник

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

#TYPE  DATABASE        USER            ADDRESS                 METHOD
local    all             all                                     trust

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

# service postgresql-9.5 reload

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

3
ответ дан 14 июня '16 в 16:11
источник

Многие другие ответы относятся к настройкам в различных файлах конфигурации, а те, которые относятся к 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
ответ дан 20 нояб. '17 в 23:34
источник

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

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

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

2
ответ дан 29 янв. '18 в 22:17
источник

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

2
ответ дан 12 янв. '18 в 15:25
источник

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

host: localhost

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

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

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

1
ответ дан 23 марта '18 в 13:08
источник
sudo psql --host=localhost --dbname=database-name --username=postgres

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

0
ответ дан 19 февр. '19 в 12:43
источник

Другие вопросы по меткам или Задайте вопрос