Ошибка при получении: Ошибка аутентификации сверстников для пользователя "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.

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

Ответ 1

Проблема все еще в вашем файле 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

Ответ 2

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

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

    local   all             postgres                                peer

    в

    local   all             postgres                                trust
  2. Перезагрузите сервер

    $ sudo service postgresql restart
    
  3. Войдите в psql и установите свой пароль

    $ psql -U postgres
    db> ALTER USER postgres with password 'your-pass';
    
  4. Наконец, измените pg_hba.conf с

    local   all             postgres                                trust

    в

    local   all             postgres                                md5

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

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

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

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

md5 - password-base authentication

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

Ответ 3

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

    [email protected]:~# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list

    [email protected]:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -

    [email protected]:~# apt-get update

    [email protected]:~# apt-get install postgresql-9.4        

    [email protected]:~# su - postgres 

    [email protected]:~$ 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

    [email protected]:~$ createdb -O someuser database

    [email protected]:~$ psql -U someuser -h 127.0.0.1 database

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

Ответ 4

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

sudo -u postgres psql

Ответ 5

Если у вас есть проблема, вам нужно найти свой 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';

Ответ 6

  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 он не работает, закройте терминал и снова откройте.

Ответ 7

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

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

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

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

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

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

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

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

то есть.

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

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

Ответ 11

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

sudo /etc/init.d/postgresql restart

Ответ 12

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

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

Ответ 13

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

psql -d myDb -U username -W

Ответ 14

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

Ответ 15

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

#TYPE  DATABASE        USER            ADDRESS                 METHOD
local    all             all                                     trust

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

# service postgresql-9.5 reload

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

Ответ 16

Многие другие ответы относятся к настройкам в различных файлах конфигурации, а те, которые относятся к 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 должны быть правильными!

Ответ 17

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

Ответ 18

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

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

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

Ответ 19

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

host: localhost

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

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

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

Ответ 20

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

pg_hba.conf может появляться во многих других местах в зависимости от того, как был установлен Pg. Стандартное расположение - pg_hba.conf в каталоге data_directory базы данных (который может быть в /home,/var/lib/pgsql,/var/lib/postgresql/[версия]/,/opt/postgres/, и т.д. И т.д. И т.д. И т.д.) но пользователи и упаковщики могут положить его куда угодно. К сожалению.

Единственный действительный способ найти pg_hba.conf - это спросить работающий экземпляр PostgreSQL, где он находится, pg_hba.conf, или спросить системного администратора, где он находится. Вы даже не можете рассчитывать на то, что спросите, где находится datadir, и проанализировать postgresql.conf, потому что сценарий инициализации может передать такой параметр, как -c hba_file =/some/other/path, при запуске Pg.

Что вы хотите сделать, это спросить PostgreSQL:

SHOW hba_file;

Эта команда должна выполняться в сеансе суперпользователя, поэтому для сценариев оболочки вы можете написать что-то вроде:

psql -t -P format=unaligned -c 'show hba_file';

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

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

Другой вариант - просмотреть выходные данные команды ps и посмотреть, видим ли там аргумент каталога данных postmaster -D, например,

ps aux  | grep 'postgres *-D'

поскольку файл pg_hba.conf будет находиться в каталоге данных (если вы не используете Debian/Ubuntu или некоторые производные и используете их пакеты).

Если вы нацелены конкретно на системы Ubuntu с PostgreSQL, установленным из пакетов Debian/Ubuntu, это станет немного проще. Вам не нужно иметь дело с ручным -c скомпилированным из источника Pg, для которого кто-то initdb сделал datadir в своем домашнем каталоге, или с установкой EnterpriseDB Pg в /opt и т.д. Вы можете задать pg_wrapper, Debian/Многофункциональный менеджер Pg в Ubuntu, где PostgreSQL использует команду pg_lsclusters из pg_wrapper.

Если вы не можете подключиться (Pg не запущен или вам нужно отредактировать pg_hba.conf для подключения), вам придется искать в системе файлы pg_hba.conf. В Mac и Linux что-то вроде sudo find / -type f -name pg_hba.conf подойдет. Затем проверьте файл PG_VERSION в том же каталоге, чтобы убедиться, что это правильная версия PostgreSQL, если у вас их больше одной. (Если pg_hba.conf находится в /etc/, игнорируйте это, вместо этого это имя родительского каталога). Если у вас есть несколько каталогов данных для одной и той же версии PostgreSQL, вам придется посмотреть на размер базы данных, проверьте командную строку запущенного postgres из ps, чтобы убедиться, что аргумент каталога данных -D совпадает с тем, где вы редактируете, и т.п.https://askubuntu.com/info/256534/how-Do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711