programing

Postgre에 대한 장고 연결SQL: "피아 인증 실패"

linuxpc 2023. 7. 15. 09:47
반응형

Postgre에 대한 장고 연결SQL: "피아 인증 실패"

OperationalError at /admin/

FATAL:  Peer authentication failed for user "myuser"

이것은 제가 장고 관리 사이트에 접속하려고 할 때 받는 오류입니다.저는 MySQL 데이터베이스를 문제없이 사용해왔습니다.나는 Postgre가 처음입니다.SQL이지만 이 프로젝트에 최종적으로 사용할 호스트에 MySQL이 없기 때문에 전환하기로 결정했습니다.

설치하는 했습니다.Postgre를 설치하고 SQL을 실행하고,syncdb준비가 다 되었습니다.

문제는 앱을 데이터베이스에 연결할 수 없다는 것입니다.Postgre에 로그인할 수 있습니다.다운로드한 명령줄 또는 데스크톱 앱을 통한 SQL.대본에는 없는 것뿐입니다.

또한, 나는 사용할 수 있습니다.manage.py shellDB에 제대로 액세스할 수 있습니다.

무슨 생각 있어요?

예외가 내 연결 설정과 관련이 있다는 것을 알아챘습니다.settings.py 으로 돌아가서 호스트 설정이 없음을 확인했습니다.더하다localhost들소

내 settings.py 에는 MySQL 데이터베이스용 호스트가 없었지만 Postgre용 호스트를 추가해야 했습니다.작업할 SQL.

제 경우에, 저는 덧붙였습니다.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
    } 
}

이는 스크립트가 연결하려는 사용자(여기 있는 내 사용자)가 아닌 다른 사용자 아래에서 실행되고 있기 때문일 수 있습니다.이 경우 피어 인증이 실패합니다.사용자의 솔루션은HOST: "localhost"피어 인증을 더 이상 사용하지 않기 때문에 작동합니다.은 하만지, 그은보느다립니다것다▁than보다 .HOST: ""유닉스 소켓을 사용하는 대신 TCP 연결을 사용하기 때문입니다.장고 문서에서:

Postgre를 사용하는 경우SQL은 기본적으로 UNIX 도메인 소켓('pg_hba.conf의 local' 행)을 통해 데이터베이스에 연결됩니다.TCP 소켓을 통해 연결하려면 HOST를 'localhost' 또는 '127.0.0.1'(pg_hba.conf의 host' 행)으로 설정합니다.윈도우즈에서는 UNIX 도메인 소켓을 사용할 수 없으므로 항상 HOST를 정의해야 합니다.

pg_hba.conf. 간단한 은 다음과 같습니다가장 간단한 것은 다음과 같습니다.

local   all         all                               trust

모든 동안.local 로드해야 .이 변경 사항을 적용하려면 포스트그레스를 다시 로드해야 합니다.

그러나 다중 사용자 프로덕션 시스템이 문제가 되는 경우 다음과 같은 보다 안전한 시스템을 사용할 수 있습니다.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

나는 방금 같은 문제를 우연히 발견했지만, clim이 말한 대로 유닉스 소켓을 사용하고 싶었지만, 여전히 사용함으로써.peer방법.시스템 사용자 이름과 내부의 postgres 사용자 이름을 매핑했습니다.pg_hba.conf그것은 그와 함께 일하고 있습니다.peer방법.

안에서.pg_hba.conf추가했습니다.

local all all peer map=map-name

안에서.pg_ident.conf추가했습니다.

map-name mysystem-username mypostgres-username

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

반응형