OperationalError at /admin/
FATAL: Peer authentication failed for user "myuser"
Это ошибка, которую я получаю, когда пытаюсь зайти на мой сайт администратора Django. Я без проблем использовал базу данных MySQL. Я новичок в PostgreSQL, но решил переключиться, потому что хост, который я планирую использовать в этом проекте, не имеет MySQL.
Поэтому я решил, что могу пройти процесс установки PostgreSQL, запустить syncdb
и все будет готово.
Проблема в том, что я не могу заставить мое приложение подключиться к базе данных. Я могу войти в PostgreSQL через командную строку или настольное приложение, которое я загрузил. Только не в сценарии.
Кроме того, я могу использовать его manage.py shell
для доступа к базе данных.
Есть предположения?
источник
config/database.yml
то есть в этом файле мне нужно было добавить строкуhost: localhost
(или где бы вы ни находились сервер postgres - мой был локальным)pg_hba.conf
настройка запрещает обычным пользователям подключаться через сокеты UNIX, но позволяет им через TCP / IP с localhost.local_settings.py
файл и# Set to empty string for localhost. Not used with sqlite3.
находится в их. ВРАНЬЕ!!!Вероятно, это связано с тем, что ваш скрипт работает под другим пользователем, отличным от того, с которым вы пытаетесь подключиться ( здесь myuser ). В этом случае аутентификация однорангового узла не удастся. Ваше решение
HOST: "localhost"
работает, потому что вы больше не используете одноранговую аутентификацию. Однако это медленнее, чемHOST: ""
из-за того, что вместо сокетов unix вы используете TCP-соединения. Из django docs :Если вы хотите продолжать использовать сокеты, необходимы правильные настройки
pg_hba.conf
. Самый простой:комментируя все остальные
local
строки в config. Обратите внимание, что для того, чтобы это изменение вступило в силу, необходимо перезагрузить postgres.Но если речь идет о многопользовательской производственной машине, вы можете использовать что-то более безопасное, например
md5
(см. Здесь для объяснения различных методов аутентификации).источник
Лучше, чем полностью доверять, - это просто установить его на md5.
источник
Я исправил это, отредактировав нижнюю часть /etc/postgres/9.1/main/pg_hba.conf (изменив md5 на trust; ПРИМЕЧАНИЕ, это означает, что не будет пароля базы данных, который может быть не тем, что вы хотите)
источник
Я только что наткнулся на ту же проблему, но хотел использовать сокеты unix, как сказал clime, но все еще использую
peer
метод. Я сопоставил свое системное имя пользователя с именем пользователя postgres внутриpg_hba.conf
, которое работает сpeer
методом.Внутри
pg_hba.conf
я добавил:Внутри
pg_ident.conf
я добавил:источник