Programing

PostgreSQL에 대한 장고 연결 :“피어 인증 실패”

crosscheck 2020. 7. 23. 08:11
반응형

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

참고URL : https://stackoverflow.com/questions/8167602/django-connection-to-postgresql-peer-authentication-failed

반응형