PostgreSQL : 사용자의 비밀번호 변경이 작동하지 않습니다


9
  • 나는 설치 PostgreSQLEC2기계와 지금은 사용자의 암호를 변경하려면postgres
  • 나는한다
$ sudo -u postgres psql
psql (9.1.5)
Type "help" for help.

postgres=# ALTER USER postgres WITH PASSWORD 'newpasswd';
ALTER ROLE
  • 그런 다음 쉘을 종료하고 새 비밀번호로 로그인을 시도합니다
$ psql -U postgres -W
Password for user postgres: 
psql: FATAL:  Peer authentication failed for user "postgres"

PostgreSQL버전은

$ psql --version
psql (PostgreSQL) 9.1.5
contains support for command-line editing

내가 뭘 잘못하고 있니?

감사합니다

UPDATE 나는 변화를 만든 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                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

그런 다음 다시 시작했습니다 postgres

$ sudo /etc/init.d/postgresql restart
 * Restarting PostgreSQL 9.1 database server                                                                                                                                               [ OK ] 

다시 로그인을 시도했지만 실패했습니다

$ psql -U postgres -W
Password for user postgres: 
psql: FATAL:  Peer authentication failed for user "postgres"

아마도 이전 비밀번호는 여전히 ~ / .pgpass 파일에 저장됩니다.

아니, 거기에 암호 프롬프트가 있습니다. pg_hba.conf암호 인증을 허용하지 않는 방식으로 설정되어 있다고 생각 합니다.

@willglynn, 내 업데이트를 확인하십시오, 변경 후에도 다시 실패합니다pg_hba.conf
daydreamer

답변:


9

willglynn이 말했듯이, 아마도 pg_hba.conf 파일 일 것입니다.

다음 줄이있는 경우 :

local   all    all     peer

그런 다음 다음으로 변경하십시오.

local   all    all     md5

그런 다음 새 비밀번호로 로그인 할 수 있어야합니다 (올바르게 입력했다고 가정) :)


안녕하세요 @David, 당신이 언급 한대로 시도했지만 여전히 실패합니다. 업데이트 한 내용을 확인하십시오. 감사합니다
daydreamer

사용자의 peer로컬 (UNIX 도메인 소켓) 연결에 적용되는 행이 여전히 있습니다 postgres. 파 엔드가 OS postgres사용자 로 실행되고 있지 않으면 실패 합니다. 더 잘 이해 하려면 pg_hba.conf 설명서 를 참조하십시오 .

나는 달릴 수 있었지만 django manage.py syncdb, 나는 pg_hba.conf당신이 언급 한 문서 에 대해 계속 읽을 것이다. 당신의 도움에 감사드립니다
daydreamer

방금 추가해야했습니다-h localhost
Mike

5

pg_hba.conf파일 을 변경하는 것 외에도 추가하고 싶었습니다.

local   all    all     peer

local   all    all     md5

허용 된 답변에 따라 OP와 동일한 작업을 수행 한 후 로그인 할 수있는 유일한 방법은 -h로그인하려고 할 때 플래그 를 전달하는 것 입니다.

$ psql -U postgres -h localhost

바라건대, 이것은 미래에 누군가를 도울 것입니다. 그것은 나를 미치게했다!


0

당신은 이것을 가지고 있습니다 ...

# 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                                     md5

이것에 의해 변경 :

# Database administrative login by Unix domain socket
local   all             postgres                                md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
#local   all             all                                     md5

postgresql 서비스를 다시 시작하십시오.

sudo /etc/init.d/posgresql restart

나를위한이 일


변경시 pg_hba.confPostgres를 다시 시작할 필요가 없습니다. 구성을 다시로드하면 충분합니다. 예 pg_ctl ... reload또는select pg_reload_conf()
a_horse_with_no_name

그냥 다시로드 ... 난 몰랐어 ... 감사합니다
이스라엘 L 로사 스

-1

암호를 여러 번 변경하고 여기에 언급 된 모든 것을 시도한 후에 미치게되는 사람들은 사용자의 유효 기간 만료를 확인해야합니다. psql 9.x에서와 같이 '만료되지 않음'으로 설정할 수 있습니다.

ALTER ROLE <username> VALID UNTIL 'infinity';

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