비밀번호를 변경 한 후 PostgreSQL 사용자가 서버에 연결할 수 없습니다


10

내가 만든 4 가지 역할로이 문제
를 해결했습니다. GUI (1)를 사용하여 pgAdmin III에서 사용자의 비밀번호를 변경 한 후 해당 사용자는 더 이상 로그인 할 수 없습니다.
pgAdmin III 표시 오류 메시지 :

An error has occurred:

Error connecting to the server: FATAL:  password authentication failed for user "sam"
FATAL:  password authentication failed for user "sam"

내 시스템 : Ubuntu 12.04의 Postgresql 9.2

이 문제를 해결할 방법이 있습니까?

(1) : 계정 postgres로 로그인하고 로그인 역할에서 사용자를 마우스 오른쪽 버튼으로 클릭 한 후 '정의'탭으로 이동하여 비밀번호를 입력하십시오.

답변:


15

PgAdmin 버그 ( changelog ) 에 물렸을 가능성이 있습니다 .

2012-07-04 AV 1.16.1 날짜 선택기 컨트롤은 기본적으로 전체 타임 스탬프를 반환하므로 작업 및 역할 유효 날짜에 실수로 날짜가 변경 될 수 있습니다. 시간 부분을 무시하십시오.

이 버그는 1/1/1970과 같이 과거의 암호 만료 날짜를 설정하는 것으로 나타났습니다. 이 경우 연결을 시도 할 때 발생하는 오류 메시지는 잘못된 비밀번호를 사용하는 것과 다르지 않습니다.

다음과 같이 만료 날짜를 확인할 수 있습니다.

SELECT usename,valuntil FROM pg_user;

그리고 그들이 틀렸다면, 다음으로 재설정하십시오 :

ALTER USER username VALID UNTIL 'infinity';

pgAdmin을 업그레이드하십시오.


대단히 감사합니다! 이것은 문제를 해결했다. 사용자 암호를 재설정 할 때마다 pgAdmin은 시간이 01-01-1970으로 설정되어 사용자가 더 이상 로그인 할 수 없도록합니다.
Cao Minh Tu

맞아요! 젠장 버그
카터 콜

psql에 정확히 어떻게 로그인해야합니까 ??? 이것이 내가 방금 업데이트 한 역할입니다.
ericpeters0n

1
@ ericpeters0n : 인증 방법을 이 계정 의 파일 로 trust또는 파일로 임시 전환하십시오 . peerpg_hba.conf
Daniel Vérité

고마워요. 나중에 오는 사람들의 경우 "신뢰"는 다음을 의미합니다. postgres를 다시 시작 하면 권한있는 사용자와 같은 이름의 사용자 (예 : 사용자 이름 'postgres') 인 경우 비밀번호 인증없이 psql 실행할 수 있습니다 . 따라서 'su-postgres psql'을 사용하면 로그인하여 비밀번호 또는 유효한 날짜를 수정할 수 있습니다.
ericpeters0n

3

간단한 작업은 psql 또는 pgAdmin으로 로그인하는 것입니다.

ALTER USER sam WITH PASSWORD 'new_password';

이제 슈퍼 유저 계정으로 로그인 할 수없는 경우이 사용자에 대한 pg_hba.conf 설정을 변경하여 구성을 다시로드하여 복구 할 수 있습니다 (때로는 서버를 다시 시작해야하지만 그 이유는 확실하지 않습니다).

사용자의 로컬 연결에 대해 ident (9.2의 피어) 방법 (사용자와 동일한 이름의 로컬 시스템 계정을 사용할 수있는 경우)을 사용하여 로그인 할 수있는 행을 추가하거나 불가능합니다) "신뢰"(매우 일시적으로!)로 설정하십시오. 트러스트를 사용하는 경우 "사용자가 자신이 주장하는 사람임을 신뢰하십시오!"라는 의미이므로 가능한 빨리 설정하십시오. 결과적으로이 설정은 즉각적인 복구 요구를 벗어나서 활성화 된 상태로 유지하는 것이 위험합니다.

로그인하면 위의 비밀번호를 재설정 할 수 있습니다.


pgAdmin이 동일한 명령을 수행해서는 안됩니까?
dezso

(내가 psql 또는 pgAdmin을 언급했다는 것을 명심하십시오. 더 명확하게하기 위해 무엇을 할 수 있습니까?)
Chris Travers

아니오, GUI에서 비밀번호를 변경하는 것만 동일하다고 생각했습니다. 만약 그것이 잘못 될 수 있다고 상상할 수 없다면?
dezso

무엇이 잘못 될 수 있습니까? 초보자를위한 암호의 오타 ....
Chris Travers

postgres로 로그인 한 후에 비밀번호를 다시 설정할 수 없습니까?
dezso

2

Windows 변형의 경우-9.2 버전의 Windows x64 설치를 위해 pgAdmin으로 인해이 불쾌한 버그가 발생했습니다. 그것은 내 생산을 마비시켰다.

폴더 C:\Program Files\PostgreSQL\9.2\data또는 C:\Program Files (x86)\PostgreSQL\9.**x**\datapg_hba.conf 텍스트 파일이 있습니다.

다음 줄을 찾으십시오.

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

다음과 같이 METHOD md5를 "trust"로 변경하십시오.

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

에서 Windows>Run유형 "services.msc를"오른쪽 PostgreSQL의 인스턴스를 찾아 다시 시작 [Enter]를 누릅니다.

이제 DB 보안이 널리 개방되었습니다! 모든 관련 사용자에 대해 2099 년으로 사용자 비밀번호 만료 시간을 변경 한 후 md5로 되돌 리라는 경고에주의하십시오.


1

아직 시도하지 않은 경우 pg_hba.conf 파일을 검토하십시오. 이름은 /var/lib/pgsql/9.3/data/pg_hba.conf(Fedora 20)와 같습니다. 'find / -name pg_hba.conf'를 사용하여 찾아야 할 수도 있습니다.

파일 맨 아래에서 로컬 테스트의 경우 'METHOD'값을 'trust'로 변경하십시오 (자세한 내용은 postgres 문서 참조). 모든 것이 깨끗하게 시작되고 새로운 매개 변수가 읽히도록 머신을 재부팅하십시오.

잘만되면 이것이 당신의 고통을 치료할 것입니다. PostgreSQL 9.3으로 Fedora 20의 문제를 해결했습니다.

2016-10-14 업데이트 :

우분투에서 필요한 파일 이름은 /etc/postgresql/9.5/main/pg_hba.conf입니다. 로컬 테스트 전용의 경우 다음과 같이 수정하십시오.

...
#
# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
# local   all             all                                     peer
  local   all             all                                     trust
# IPv4 local connections:
# host    all             all             127.0.0.1/32            md5
  host    all             all             127.0.0.1/32            trust

METHOD "trust"가있는 두 줄은 새로운 것입니다. 사용자 이름 / 암호없이 연결할 수 있습니다.

완료되면 다음을 통해 서버를 다시 시작해야합니다.

sudo systemctl restart postgresql 

pg_hba.conf적용하려면 재시작이 아닌 다시로드 만하면됩니다. 또한 최종적으로 문제를 해결하는 방법이 명확하지 않으므로 제안이 불완전하게 보입니다.
dezso

1

방금이 같은 문제가 있었고 같은 이름을 가진 여러 사용자가있는 것으로 나타났습니다 (다른 경우). 소유권을 병합하고 소유권을 제거한 후에는 최소한 명확했습니다. 연결 방법에 따라 케이스가 인증을 위해 반드시 전송되지는 않았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.