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

Я

FATAL: Peer authentication failed for user "postgres"

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

вот мой pg_hba.conf мой database.yml и сброс полного следа.

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

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

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

есть идеи, где я ошибаюсь?

18 ответов


проблема по-прежнему ваш (/и т. д./в PostgreSQL/9.1/основные/файл pg_hba.conf*). Эта строка:

local   all             postgres                                peer

должно быть

local   all             postgres                                md5

* если вы не можете найти этот файл, работает locate pg_hba.conf должен показать вам, где расположен файл.

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

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

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

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

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

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

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

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

/и т. д./в PostgreSQL/9.1/основные/файл pg_hba.conf


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

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

to

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

команду psql-у Постгреса

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

to

local   all             postgres                                md5

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

методы проверки подлинности детали:

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

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

md5-база паролей проверка подлинности

дополнительная информация регистрация здесь


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

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


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

sudo -u postgres psql

  1. на этот / etc/postgresql / 9.х/основных/ и открытым файл pg_hba.conf

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

$>  sudo nano /etc/postgresql/9.3/main/pg_hba.conf
  1. заменить peer С MD5 в

таким образом, это будет изменено на:

вход администратора базы данных с помощью сокета домена Unix местные все postgres Пэр

# 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 postgresql

ниже приведен список методов, используемых для подключения к 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, используя эти учетные данные пользователя.


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


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

решение от depa абсолютно правильное.

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

проверяем файл:

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

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

далее. Если ты будешь хорошо себя вести до сих пор..

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

то есть

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

и затем сделать изменения.


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

sudo /etc/init.d/postgresql restart

Если вы хотите сохранить конфигурацию по умолчанию, но хотите аутентификацию md5 с подключением сокета для одного конкретного подключения пользователя / db, добавьте "локальную" строку перед строкой" local all/all":

# 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

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


использовать host=localhost в подключения.

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

изменение метода peer to доверие в файле pg_hba.файл Conf (в/etc/с PostgreSQL/9.1/основные/файл pg_hba.conf / line 85) решает проблему. Добавление md5 запрашивает пароль, поэтому, если есть требование избегать использования паролей, используйте доверие вместо MD5 в.


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

psql -d myDb -U username -W

вам нужно просто установить метод для доверия.

#TYPE  DATABASE        USER            ADDRESS                 METHOD
local    all             all                                     trust

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

# service postgresql-9.5 reload

изменения в файле pg_hba.conf не требует перезапуска сервера postgres. просто перезаряди.


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

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

вы можете использовать следующую команду во время сеанса 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-файлы, такие как .профиль или. удар.rc-это будет сильно отличаться в зависимости от вашей ОС и вашей оболочки. После того, как вы определили правильный сценарий запуска для вашего компьютера, вы можете вставить следующее:

export PGDATA=/path/pgsql/data

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

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


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


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

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

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


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

host: localhost

общий файл будет выглядеть следующим образом

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

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