Ошибка получения: ошибка одноранговой аутентификации для пользователя "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 я сделал следующие шаги.
- открыть файл
pg_hba.conf
для Ubuntu это будет в/etc/postgresql/9.x/main
и измените эту строку:
local all postgres peer
to
local all postgres trust
- перезагрузить сервер
sudo service postgresql restart
- войдите в psql и установите пароль
команду psql-у Постгреса
ALTER USER postgres with password 'your-pass';
- наконец-то изменить
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
наслаждайтесь!
- на этот / etc/postgresql / 9.х/основных/ и открытым файл pg_hba.conf
в моем случае:
$> sudo nano /etc/postgresql/9.3/main/pg_hba.conf
- заменить 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
-
затем перезапустите сервер 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.4
следующий шаг: перезапуск экземпляра БД:
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 в.
вам нужно просто установить метод для доверия.
#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
файл вообще. Счастливое кодирование