psql : 치명적 : 사용자 "postgres"에 대한 ID 인증 실패


372

Ubuntu Karmic 상자에 PostgreSQL과 pgAdminIII을 설치했습니다.

pgAdminIII를 성공적으로 사용할 수 있지만 (예 : 연결 / 로그온) 명령 줄에서 동일한 사용자 이름 / pwd (psql 사용)를 사용하여 서버에 로그인하려고하면 오류가 발생합니다.

psql: FATAL:  Ident authentication failed for user "postgres"

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


이 stackoverflow 게시물은 나를 위해 일했습니다 : stackoverflow.com/a/18664239/2110769
Andrea Araldo

답변:


194

pg_hba.conf에서 적절한 설정을 했습니까?

https://help.ubuntu.com/stable/serverguide/postgresql.html을 참조 하십시오 .


36
이것은 나를 위해 작동하지 않습니다. 나는 그것에 시간을 보냈습니다! 터미널에서 psql 명령을 실행하기 만하면됩니다. 파일을 이렇게 보이게하려면 무엇이 필요합니까 ??
Sean

54
@SeanA 'sudo -u postgres psql'과 같은 것이 필요합니다
JLarky

8
잊지 말고 ';' psql에 대한 모든 문장의 끝에. 어리석게 들리지만 그는 hehe.
omrsin

42
@Robert : "postgresql이 가장 사용자 친화적이지 않은 DB"입니까? 언젠가 오라클을 사용해보십시오 ... :)
mivk

5
레일을 사용하는 사람들은 pg_hba.conf를 설정하고 'ident'를 'password'로 변경해야했습니다. 신뢰로 변경하지 못했습니다.
Abe Petrillo

412

다음 단계는 Ubuntu 12.04에 postgres 9.1을 새로 설치하는 데 사용됩니다. (우분투 14.04의 postgres 9.3.9에서도 작동했습니다.)

기본적으로 postgres는 'postgres'라는 사용자를 만듭니다. 우리는 그녀로 로그인하고 그녀에게 암호를 제공합니다.

$ sudo -u postgres psql
\password
Enter password: ...
...

또는 psql을 입력하여 로그 아웃하십시오 . 그런 다음 'postgres'로 연결합니다. 부분은 중요하다 : 그것은 이야기 , 그리고 (암호에 대해 상관하지 않는다) 피어 연결을 통해 우리는 (암호 인증을 사용하도록 구성되어) TCP 연결을 사용하여 연결하려면 해당 클라이언트를.\qctrl+d-h localhostpsql

$ psql -U postgres -h localhost

13
설정 PGHOST=localhost하면 -h매번 옵션 을 지정할 필요가 없습니다 . pg_*이것은와 같은 다른 명령과 도 작동합니다 pg_dump.
Sameer

1
여기에 설명되어 있습니다 : help.ubuntu.com/12.04/serverguide/postgresql.html
Hendra Uzia

2
이것은 PostgreSQL을 사용하여 Debian에 Mediawiki를 설치하는 데 필요했습니다.
mivk

2 년 후 Mac 에서도이 작업을 수행해야합니다 .
Manav

1
보안 문제가 있기 때문에
나쁩니다

161

파일을 편집을 /etc/postgresql/8.4/main/pg_hba.conf하고 교체 ident또는 peer중 하나에 의해 md5또는 trust당신이 자신의 컴퓨터 여부에 암호를 요청할지 여부에 따라. 그런 다음 다음을 사용하여 구성 파일을 다시로드하십시오.

/etc/init.d/postgresql reload

4
하나의 명령은 postgresql을 재시작합니다 : /etc/init.d/postgresql restart
Tyler Long

14
재 장전이 필요할 때 다시 시작해야하는 이유는 무엇입니까?
Frank Heikens

이 경우 : "/etc/init.d/postgresql-8.4 reload"
shaytac

1
이건 여기서 나를 위해 일했다. 피어에서 md5로 변경하면 충분합니다.
Jonatas CD 5

1
OK, 나는 PostgreSQL을 멍청한 놈,하지만 난 그에만보고해야 restart하지, 나를 위해 일 reload을 변경 한 후 --- /etc/postgresql/9.5/main/pg_hba.conf(변화 peertrust).
Mike O'Connor

91

클라이언트 인증에 실패하여이 오류가 발생합니다. 오류 메시지에 따라 모든 postgreSQL 연결에 대해 클라이언트 인증 방법을 "IDENT"로 설정하는 기본 postgres 구성이있을 수 있습니다.

사용 가능한 인증 설정 ( pg_hba.conf의 각 레코드에 대한)을 더 잘 이해 하려면 PostgreSQL 매뉴얼19.1 클라이언트 인증 섹션을 반드시 읽어야 하지만 다음은 버전 9.5 매뉴얼 의 문제를 해결하는 데 도움이되는 관련 스 니펫입니다. ) :

믿음

무조건 연결을 허용하십시오. 이 방법을 사용하면 PostgreSQL 데이터베이스 서버에 연결할 수있는 누구나 암호 나 다른 인증 없이도 원하는 PostgreSQL 사용자로 로그인 할 수 있습니다. 자세한 내용은 19.3.1 절을 참조하십시오.

받지 않다

무조건 연결을 거부하십시오. 이는 그룹에서 특정 호스트를 "필터링"하는 데 유용합니다. 예를 들어 거부 라인은 특정 호스트의 연결을 차단할 수 있지만, 이후 라인은 특정 네트워크의 나머지 호스트를 연결할 수 있습니다.

md5

클라이언트가 인증을 위해 MD5 해시 이중 암호를 제공해야합니다. 자세한 내용은 19.3.2 절을 참조하십시오.

암호

클라이언트가 인증을 위해 암호화되지 않은 비밀번호를 제공해야합니다. 암호는 네트워크를 통해 일반 텍스트로 전송되므로 신뢰할 수없는 네트워크에서는 사용하지 않아야합니다. 자세한 내용은 19.3.2 절을 참조하십시오.

gss

GSSAPI를 사용하여 사용자를 인증하십시오. TCP / IP 연결에만 사용할 수 있습니다. 자세한 내용은 19.3.3 절을 참조하십시오.

sspi

SSPI를 사용하여 사용자를 인증하십시오. 이것은 Windows에서만 사용 가능합니다. 자세한 내용은 19.3.4 절을 참조하십시오.

신분

클라이언트의 ID 서버에 접속하여 클라이언트의 운영 체제 사용자 이름을 확보하고 요청 된 데이터베이스 사용자 이름과 일치하는지 확인하십시오. ID 인증은 TCP / IP 연결에서만 사용할 수 있습니다. 로컬 연결에 지정된 경우 피어 인증이 대신 사용됩니다. 자세한 내용은 섹션 19.3.5를 참조하십시오.

동료

운영 체제에서 클라이언트의 운영 체제 사용자 이름을 확보하여 요청 된 데이터베이스 사용자 이름과 일치하는지 확인하십시오. 로컬 연결에서만 사용할 수 있습니다. 자세한 내용은 19.3.6 절을 참조하십시오.

ldap

LDAP 서버를 사용하여 인증하십시오. 자세한 내용은 19.3.7 절을 참조하십시오.

반지름

RADIUS 서버를 사용하여 인증하십시오. 자세한 내용은 섹션 19.3.8을 참조하십시오.

증명서

SSL 클라이언트 인증서를 사용하여 인증하십시오. 자세한 내용은 19.3.9 절을 참조하십시오.

운영 체제에서 제공하는 PAM (Pluggable Authentication Modules) 서비스를 사용하여 인증하십시오. 자세한 내용은 19.3.10 절을 참조하십시오.

따라서 ... 발생한 문제를 해결하기 위해 다음 중 하나를 수행 할 수 있습니다.

  1. 당신에 정의 된 인증 방법 (들) 변경 pg_hba.conf 에 파일 trust, md5또는 password당신이 거기에 정의 된 로컬 연결 기록을 위해 (보안과 단순성의 요구에 따라).

  2. pg_ident.conf운영 체제 사용자를 PostgreSQL 사용자에게 매핑하고 필요에 따라 해당 액세스 권한을 부여하도록 업데이트 하십시오.

  3. IDENT 설정은 그대로두고 액세스 권한을 부여 할 각 운영 체제 사용자에 대해 데이터베이스에 사용자를 작성하십시오. 사용자가 이미 OS에 의해 인증되고 로그인 한 경우 PostgreSQL은 추가 인증이 필요하지 않으며 데이터베이스에서 지정된 권한 (역할)에 따라 해당 사용자에게 액세스 권한을 부여합니다. 이것이 기본 구성입니다.

참고 : 위치 pg_hba.confpg_ident.confOS가 달려있다.


4
나에게 이것은 최선의 대답입니다. 이러한 모든 옵션을 알고 있으면 conf를 쉽게 조정할 수 있습니다. 특히 Dev 시스템에있을 때 시간을 낭비하지 않도록 모든 항목에 대해 'ident'를 설정하면됩니다. 감사합니다
venkatareddy

1
이것은 나에게도 도움이되었습니다. 필자의 경우 pg_hba.conf 파일이 peer로 설정되어 암호로 변경되었습니다. 바닐라 설치에서 postgres 사용자의 암호, sudo su-postgres psql, \ password는 암호를 설정해야했습니다. 그런 다음 사용자 이름 postgres와 암호를 설정하여 pdgadmin3에서 기본 연결을 시작하십시오.
edencorbin 2012 년

1
그리고 그 파일은 어디에 있습니까? 물론 버전간에 일관성이없는 것처럼 보이기 때문에 목록을 작성해야 할 수도 있습니다. '/'에서 find를 실행한다고 생각합니다.
JosephK

1
Ubuntu-16.04에서는 /etc/postgresql/9.6/main/pg_hba.conf입니다.
Mike O'Connor

1
psql을 처음 접하는 사람으로서 이것은 매우 큰 도움이되며 다양한 인증 방법을 수용 할 때 허용되는 답변이어야합니다
Vyrnach

45

-h localhost비트를 추가하기 만하면 작업이 완료되었습니다.


왜이 문제가 해결되는지 알고 있습니까?
Michael Pell

postgresql의 기본값은 합리적으로 설정되지 않았습니다. 그들은 지금까지 그것을 고쳤을 수도 있습니다. 분명히 기본 URL은 다음과 같아야합니다.this_computer = 'http://localhost'
boulder_ruby

15

환경 변수를 설정할 수 있습니다 PGHOST=localhost.

$ psql -U db_user db_name
psql: FATAL:  Peer authentication failed for user "db_user"

$ export PGHOST=localhost
$ psql -U db_user db_name

Password for user mfonline:

15

위의 어느 것도 당신을 위해 작동하지 않는 경우 :

나는 꽤 많은 Postgres 설치를 수행했지만 오늘 RedHat 6.5 시스템 (Postgres 9.3 설치)에서 flummoxed되었습니다. Aron이 위에서 보여준 일반적인 hba.conf 구성이 작동하지 않았습니다. 내 시스템이 IPV6을 사용하고 IPV4 구성을 무시하는 것으로 나타났습니다. 라인 추가하기 :

host    all             all             ::1/128                 password

로그인에 성공했습니다.


고마워 이단 Fedora 20을 실행 중이며 OP와 동일한 문제에 직면했습니다. IPV4 및 IPV6을 비밀번호로 변경 한 후 성공적으로 연결되었습니다.
Ibn Saeed

1
당신은 매우 환영합니다. 프로그래밍이나 시스템 문제가 발생했을 때 다른 게시물에서 많은 이점을 얻었습니다. 조금만 돌려 줘서 다행입니다.
Ethan Brown

1
이것은 Fedora 32에서 내 목숨을 구했습니다!
Rami

12

위의 모든 답변 중에서 아무것도 효과가 없었습니다. 데이터베이스에서 사용자 암호를 수동으로 변경해야했고 갑자기 작동했습니다.

psql -U postgres -d postgres -c "alter user produser with password 'produser';"

다음 설정을 사용했습니다.

pg_hba.conf

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

다음 명령에 대한 연결이 마지막으로 완료되었습니다.

psql -U produser -d dbname -h localhost -W 

이것에 따라 조셉이 나를 도와주었습니다. 특히 테스트를 돕기 위해 마지막에 연결 명령이 있습니다. 또한 누군가 궁금해하는 경우를 대비하여 Postgresql 서비스를 다시 시작합니다 (그러나 암시 함). 많이 감사합니다!
할린

10

포트 113을 수신하는 ID 서버를 설치해야한다는 것을 알았습니다.

sudo apt-get install pidentd
sudo service postgresql restart

그리고 나서 정체성은 효과가있었습니다.


10

흠 ...

pgAdminIII에서 사용자 이름과 비밀번호로 연결할 수 있지만 연결할 수없는 경우 psql 두 프로그램이 데이터베이스에 다르게 연결되었을 수 있습니다.

[다른 데이터베이스에 연결하는 경우 먼저 동일한 데이터베이스에 연결해보십시오. 아래를 참조하십시오.]

에서 PostgreSQL의 : 문서 : 9.3 : psql의 :

호스트 이름을 생략하면 psql은 Unix 도메인 소켓을 통해 로컬 호스트의 서버에 연결하거나 TCP / IP를 통해 Unix 도메인 소켓이없는 시스템의 로컬 호스트에 연결합니다.

와 같은 것을 실행하지 않고 psql ... -h host_name ...Ubuntu를 실행 psql하는 경우 Unix 도메인 소켓을 통해 연결해야하므로 PostgreSQL이 postgres 사용자 의 비밀번호 인증 방법 중 하나를 허용하도록 구성되어 있지 않을 수 있습니다.

다음을 실행하여 테스트 할 수 있습니다.

sudo -u postgres psql

위의 작동하면 서버가 아마 사용하도록 구성된 피어 바이 로컬 연결에 대한 인증 포스트 그레스의 사용자, 즉 확인에 사용자 이름의 OS를 묻는 당신있는 거 포스트 그레스 .

그래서 그것은 아마 당신의 있는 pg_hba.conf의 파일

파일의 전체 경로는 /etc/postgresql/9.3/main/pg_hba.conf 와 같습니다 . 예를 들어 다음과 같이 볼 수 있습니다 .sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more

psql명령 에서 호스트 이름을 생략하는 경우 pg_hba.conf 파일에 다음 항목을 추가하면 연결할 수 있어야 합니다.

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  md5

[ pg_hba.conf 파일의 주석 처리 된 줄은# .]

당신이 경우에 하는 당신의 호스트 이름을 포함하여 psql명령을,이 항목을 대신 추가 :

# Connection type   Database   User       IP addresses   Method
host                all        postgres   127.0.0.1/32   md5

를 통해 다른 항목을 연결하기 전에 항목을 입력해야합니다 psql. 어디에 넣을지 의문이 있다면, 주석을 달지 않은 첫 줄 앞에 놓으십시오.

pg_hba.conf 에 대한 추가 정보

에서 PostgreSQL의 : 문서 : 9.3 :있는 pg_hba.conf 파일 [굵게 강조 광산]

연결 유형 , 클라이언트 주소 , 요청 된 데이터베이스사용자 이름 이 일치하는 첫 번째 레코드가 인증을 수행하는 데 사용됩니다. "fall-through"또는 "backup"은 없습니다. 하나의 레코드를 선택하고 인증에 실패하면 후속 레코드는 고려되지 않습니다. 일치하는 레코드가 없으면 액세스가 거부됩니다.

인증 방법에서 레코드가 일치 하지 않습니다 . 따라서 pg_hba.conf 파일에 다음 항목이 포함 된 경우 :

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  peer

그러면 다음을 통해 연결할 수 없습니다 .

psql -u postgres

이러한 항목 중 하나가 이전 항목 pg_hba.conf 파일 에없는 경우 :

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  md5
local               all        postgres                  password   # Unencrypted!
local               all        all                       md5
local               all        all                       password   # Unencrypted!

2
게임에 늦었지만, 진지하게, 내가 이해하도록 물건을 올바르게 설명하기 위해 노력해 주셔서 감사합니다!
Jeffrey 'jf'Lim

10

제 경우에는 해결책을 여기에 : (관심있는 사람들을 위해) postgres에 로그인하십시오

sudo -i -u postgres
psql
ALTER USER postgres WITH PASSWORD 'postgres'; # type your password here

문안 인사


7

문제는 여전히 pg_hba.conf 파일입니다. 이 줄 :이 파일은 / etc / postgres / varion / main에서 찾을 수 있습니다

local   all             postgres                                peer
Should be

local   all             postgres                                md5

인증 방법에 대한 공식 PostgreSQL 문서에 따라 두 옵션에 대한 간단한 설명입니다.

피어 인증

피어 인증 방법은 커널에서 클라이언트의 운영 체제 사용자 이름을 가져 와서 허용되는 데이터베이스 사용자 이름으로 사용합니다 (선택적인 사용자 이름 매핑 사용). 이 방법은 로컬 연결에서만 지원됩니다.

비밀번호 인증

비밀번호 기반 인증 방법은 md5 및 비밀번호입니다. 이러한 방법은 암호가 연결을 통해 전송되는 방식, 즉 각각 MD5 해시 및 일반 텍스트를 제외하고 비슷하게 작동합니다.

비밀번호 "스니핑"공격에 관심이있는 경우 md5가 선호됩니다. 가능하면 일반 암호는 항상 피해야합니다. 그러나 md5는 db_user_namespace 기능과 함께 사용할 수 없습니다. 연결이 SSL 암호화로 보호되면 비밀번호를 안전하게 사용할 수 있습니다 (SSL 사용에 의존하는 경우 SSL 인증서 인증이 더 나은 선택 일 수 있음).

이 파일을 변경 한 후에는 PostgreSQL 서버를 다시 시작해야합니다. Linux를 사용하는 경우sudo service postgresql restart.


7

fedora26 및 postgres9.6

먼저, root 사용자로 로그인 한 후 다음 명령으로 psql에 입력하십시오.

$ su postgres  

그때

$ psql

psqlhba_file의 위치 찾기 ==> 수단pg_hba.conf

postgres=# show hba_file ; 
 hba_file  
--------------------------------------   
 /etc/postgresql/9.6/main/pg_hba.conf  
(1 row)  

파일 pg_hba.conf변경에서 사용자에 대한 액세스 권한

host all all 127.0.0.1/32 md5

6

bash 쉘의 Mac OSX에서 PostgreSQL 9.3에 대한 내 솔루션 sudo은 데이터 폴더로 이동 한 다음 필요한 모든 줄을 pg_hba.conf파일에 추가하여 모든 사용자를 신뢰할 수 있고 로그인 할 수있게하는 것이 었습니다. :

# in bash_profile edit PGDATA environmental variable
open ~/.bash_profile

# append this line to bash_profile
export PGDATA="/Library/PostgreSQL/9.3/data"

# reload bash_profile
source ~/.bash_profile

# open pg_hba.conf in vim
sudo vi /Library/PostgreSQL/9.3/data/pg_hba.conf

# append these two lines to the end of the pg_hba.conf file
local   all   all                  trust
host    all   all   127.0.0.1/32   trust

# can now login as user in bash
psql -d <db_name> -U <user_name> -W

1
이것은 개발 서버에는 적합하지만 프로덕션 환경에서는 더 이상 이러한 설정으로 데이터베이스에 연결하기 위해 암호가 필요하지 않으므로 권장하지 않습니다.
Michael


4

인정해야 할 오류를 해결하는 데 더 많은 시간을 보냈습니다.

pg_hba.conf의 인증 구성 순서는 귀하의 경우와 관련이 있습니다. 기본 구성 파일은 바닐라 설치에 여러 줄을 포함합니다. 이 기본값은 인증 시도 조건과 일치하여 인증에 실패 할 수 있습니다. .conf 파일 끝에 추가 된 추가 구성에 관계없이 실패합니다.

사용중인 구성 라인을 확인하려면 메시지의 기본 로그 파일을 확인하십시오. 이 같은 것을 볼 수 있습니다

LOG:  could not connect to Ident server at address "127.0.0.1", port 113: Connection refused
FATAL:  Ident authentication failed for user "acme" 
DETAIL:  Connection matched pg_hba.conf line 82: "host     all             all             127.0.0.1/32            ident"

이 기본 줄이 거부를 일으키는 것으로 나타났습니다.

host    all             all             127.0.0.1/32            ident

주석을 달아보십시오.


3

이 문제를 해결하기위한 한 가지 방법은 pg_hba.conf를 편집하는 것입니다.

sudo vi /etc/postgresql/9.3/main/pg_hba.conf

일시적으로

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

이제 완료되었습니다. 보안을 위해

sudo -u postgres psql template1
ALTER USER postgres with encrypted password 'your_password';

다시 돌아가서 pg_hba.conf를

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

1

비슷한 문제가 있었고 IP6 주소에 대해서도 모든 ID 메소드를 제거 할 때 pg_hba.conf 에서 수정했습니다 (시스템에 IP4 만 있음에도 불구하고).

host all all 127.0.0.1/32 password
host all all ::1/128 password
#for pgAdmin running at local network
host all all 192.168.0.0/24 md5


0

CentOS에서 사용하는 경우 위의 솔루션을 만든 후 postgres를 다시로드해야 할 수 있습니다.

systemctl restart postgresql-9.3.service

이제 막postgresql
Neil Chowdhury

@NeilChowdhury postgresql 서비스는 여전히 리눅스 시스템에서 서비스 이름 버전을 가지고 있습니다. 이 명령을 실행하면 다음을 볼 수 있습니다systemctl status | grep postgres
Ikrom

0

이 문제를 해결하려면 pdAdmin을 다시 설치해야했습니다.

brew cask reinstall pgadmin4

0

Windows의 경우 pb_gba.conf를 편집하지 않으려면 (즉, 메소드를 MD5 (기본값)로 남겨두고, PGadmin의 쿼리 도구 에서이 쿼리실행 하여 새 사용자를 작성하십시오.)PGadmin

CREATE USER admin WITH PASSWORD 'secret'

그런 다음 cmd에서

psql "dbname=Main_db host=127.0.0.1 user=admin password=secret port=5432

여기서 dbname은 postgresql의 db입니다.

여기에 이미지 설명을 입력하십시오


-3

이것은 나를 위해 일했다 : http://tecadmin.net/fatal-ident-authentication-failed-for-user-postgres/#

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

1
이를 통해 localhost의 모든 사용자가 모든 사용자로 로그인 할 수 있습니다. 이 동작은 링크의 어느 곳에서도 언급되지 않았습니다. 그리고 예, 데비안 정보 페이지는 같은 것을 포함합니다.
rkapl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.