PostgreSQL에 대한 장고 연결 :“피어 인증 실패”
OperationalError at /admin/
FATAL: Peer authentication failed for user "myuser"
Django 관리 사이트에 접속하려고 할 때 나타나는 오류입니다. 나는 MySQL 데이터베이스를 아무 문제없이 사용했다. PostgreSQL을 처음 사용했지만이 프로젝트에 사용할 최종 호스트에 MySQL이 없기 때문에 전환하기로 결정했습니다.
따라서 PostgreSQL 설치 프로세스를 진행하고 a를 실행하고 syncdb모두 설정할 수 있다고 생각했습니다 .
문제는 앱을 데이터베이스에 연결하지 못하는 것 같습니다. 다운로드 한 명령 줄 또는 데스크탑 앱을 통해 PostgreSQL에 로그인 할 수 있습니다. 스크립트에는 없습니다.
또한 manage.py shellDB에 잘 액세스하는 데 사용할 수 있습니다 .
이견있는 사람?
나는 예외를 들여다 보았고 연결 설정과 관련이 있음을 알았습니다. settings.py으로 돌아가서 호스트 설정이없는 것을 확인했습니다. 추가 localhost하고 짜잔.
내 settings.py에는 HOST for MySQL 데이터베이스가 없지만 PostgreSQL이 작동하도록 HOST를 추가해야했습니다.
내 경우 localhost에는 HOST설정에 추가 하고 효과가있었습니다.
여기 DATABASES내 섹션이 있습니다 settings.py.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': '<MYDATABASE>',
'USER': '<MYUSER>',
'PASSWORD': '<MYPASSWORD>',
'HOST': 'localhost', # the missing piece of the puzzle
'PORT': '', # optional, I don't need this since I'm using the standard port
}
}
스크립트가 연결하려는 사용자가 아닌 다른 사용자 ( myuser here)에서 실행 중일 수 있습니다 . 이 경우 피어 인증이 실패합니다. HOST: "localhost"더 이상 피어 인증을 사용하지 않기 때문에 솔루션이 작동합니다. 그러나 HOST: ""유닉스 소켓을 사용하는 대신 TCP 연결을 사용하기 때문에 속도가 느립니다 . 에서 장고 문서 :
PostgreSQL을 사용하는 경우 기본적으로 (빈 호스트) 데이터베이스에 대한 연결은 UNIX 도메인 소켓 (pg_hba.conf의 'local'줄)을 통해 이루어집니다. TCP 소켓을 통해 연결하려면 HOST를 'localhost'또는 '127.0.0.1'(pg_hba.conf의 'host'줄)로 설정하십시오. Windows에서는 UNIX 도메인 소켓을 사용할 수 없으므로 항상 HOST를 정의해야합니다.
소켓을 계속 사용하려면 올바른 설정 pg_hba.conf이 필요합니다. 가장 간단한 것은 :
local all all trust
local구성의 다른 모든 줄 을 주석 처리하는 동안 . 이 변경 사항을 적용하려면 postgres를 다시로드해야합니다.
그러나 다중 사용자 프로덕션 시스템에 문제가있는 경우보다 안전한 것을 사용하고 싶을 수 있습니다 md5( 여러 인증 방법에 대한 설명 은 여기 참조 ).
완전히 신뢰하는 것보다 md5로 설정하는 것이 좋습니다.
# "local" is for Unix domain socket connections only
local all all md5
/etc/postgres/9.1/main/pg_hba.conf의 맨 아래를 편집 하여이 문제를 해결했습니다 (md5를 신뢰하도록 변경하십시오. 참고 이것은 데이터베이스 암호가 없으므로 원하는 것이 아닐 수 있음)
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
I just stumbled upon the same problem but wanted to use unix sockets as clime said, but by still using the peer method. I mapped my system-username with the postgres-username inside the pg_hba.conf, which is working with the peer method.
Inside pg_hba.conf i added:
local all all peer map=map-name
Inside pg_ident.conf i added:
map-name mysystem-username mypostgres-username
'Programing' 카테고리의 다른 글
| Java SecurityException : 서명자 정보가 일치하지 않습니다 (0) | 2020.07.23 |
|---|---|
| Visual Studio Editor는 더 이상 오류를 강조하지 않습니다. (0) | 2020.07.23 |
| 메서드를 찾을 수 없습니다 : '!! 0 [] System.Array.Empty ()' (0) | 2020.07.23 |
| Google Maps API v2 : 마커를 클릭 할 수있게 만드는 방법 (0) | 2020.07.23 |
| 내부 목록 이해를 열거하는 파이썬 (0) | 2020.07.23 |