Настройка Django: psycopg2.OperationalError: FATAL: Ошибка одноранговой аутентификации для пользователя "indivo"
У меня проблема с настройкой проекта Django с помощью POSTGRESQL.
Вот мой параметр settings.py базы данных
DATABASES = {
'default':{
'ENGINE':'django.db.backends.postgresql_psycopg2', # '.postgresql_psycopg2', '.mysql', or '.oracle'
'NAME':'indivo', # Required to be non-empty string
'USER':'indivo', # Required to be non-empty string
'PASSWORD':'ritvik',
'HOST':'', # Set to empty string for localhost.
'PORT':'', # Set to empty string for default.
},
}
Теперь в postgres backend я сделал это.
[email protected]:~$ sudo su - postgres
[email protected]:~$ createuser --superuser indivo # create a super user indivo
[email protected]:~$ psql # open psql terminal
psql (9.1.8)
Type "help" for help.
postgres=# \password indivo # set the password ritvik
Enter new password:
Enter it again:
postgres=# \q #logout
[email protected]:~$ createdb -U indivo -O indivo indivo #create db indivo
К сожалению, когда я пытаюсь синхронизировать, я получаю сообщение об ошибке.
psycopg2.OperationalError: FATAL: Peer authentication failed for user "indivo"
Пожалуйста, помогите мне, что я могу делать неправильно здесь.
Ответы
Ответ 1
У меня похожая проблема, и я решил ее с помощью этого ответа, добавив localhost
к настройкам HOST
базы данных в settings.py, поэтому настройки вашей базы данных должны выглядеть следующим образом:
DATABASES = {
'default':{
'ENGINE':'django.db.backends.postgresql_psycopg2', # '.postgresql_psycopg2', '.mysql', or '.oracle'
'NAME':'indivo', # Required to be non-empty string
'USER':'indivo', # Required to be non-empty string
'PASSWORD':'ritvik',
'HOST':'localhost', # <- Changed from empty string to localhost
'PORT':'', # Set to empty string for default.
},
}
Ответ 2
По умолчанию во многих дистрибутивах Linux аутентификация клиента настроена на "равный" для соединений сокетов Unix с БД. Это устанавливается в конфигурационном файле pg_hba.conf
для postgresql. Документация библиотеки python psycopg2 гласит:
- * host *: адрес хоста базы данных (по умолчанию используется UNIX-сокет, если он не предоставлен)
Итак, если вы оставите опцию хоста пустым, ваш script попытается подключиться и использовать имя пользователя Unix: пароль для аутентификации. Чтобы исправить это, вы можете:
- установите параметр "хозяин" явно в 127.0.0.1 в код конфигурации, вставленный в ваш вопрос.
- Измените файл
pg_hba.conf
, чтобы использовать md5 для подключений сокетов, чтобы он использовал имена пользователей и пароли, хранящиеся в хранилище пользовательских данных postggres (не рекомендуется, так как это может нарушить аутентификацию для пользователей системы).
Ответ 3
Вам нужно установить pg_hba.conf
для использования аутентификации md5
для интересующего пользователя, db и источника. См. Главу проверка подлинности клиента документации.
Найдите pg_hba.conf
для за тонну дополнительной информации.
Ответ 4
Мне тоже приходилось сталкиваться с подобной проблемой при настройке базы данных postgresql с проектом Django.
Моя система запускает RHEL CentOS 7 с postgresql версии 10. Я много искал, но не мог найти на самом деле то, что происходит, пока не увидел журнал в /var/lib/pqsql/ 10/data/log/postgresql*.log
2017-11-10 00: 31: 40.499 IST [14129] ПОДРОБНОЕ ОПИСАНИЕ: Соединение соответствует строке pg_hba.conf 85: "host all all:: 1/128 ident"
Итак, я просто изменил эту конкретную строку в файле /var/lib/pgsql/ 10/data/pg_hba.conf:
из
host all all:: 1/128 ident
to
host all all:: 1/128 md5
с тем, что я могу создать базу данных и таблицу, используя команду manage.py migrate
Спасибо всем, кто помог мне найти это решение. особенно @juliocesar и официальная документация для аутентификации клиента postgresql