Ubuntu Karmic 상자에 PostgreSQL과 pgAdminIII을 설치했습니다.
pgAdminIII를 성공적으로 사용할 수 있지만 (예 : 연결 / 로그온) 명령 줄에서 동일한 사용자 이름 / pwd (psql 사용)를 사용하여 서버에 로그인하려고하면 오류가 발생합니다.
psql: FATAL: Ident authentication failed for user "postgres"
이제이 문제를 해결하는 방법이 있습니까?
Ubuntu Karmic 상자에 PostgreSQL과 pgAdminIII을 설치했습니다.
pgAdminIII를 성공적으로 사용할 수 있지만 (예 : 연결 / 로그온) 명령 줄에서 동일한 사용자 이름 / pwd (psql 사용)를 사용하여 서버에 로그인하려고하면 오류가 발생합니다.
psql: FATAL: Ident authentication failed for user "postgres"
이제이 문제를 해결하는 방법이 있습니까?
답변:
pg_hba.conf에서 적절한 설정을 했습니까?
https://help.ubuntu.com/stable/serverguide/postgresql.html을 참조 하십시오 .
다음 단계는 Ubuntu 12.04에 postgres 9.1을 새로 설치하는 데 사용됩니다. (우분투 14.04의 postgres 9.3.9에서도 작동했습니다.)
기본적으로 postgres는 'postgres'라는 사용자를 만듭니다. 우리는 그녀로 로그인하고 그녀에게 암호를 제공합니다.
$ sudo -u postgres psql
\password
Enter password: ...
...
또는 psql
을 입력하여 로그 아웃하십시오 . 그런 다음 'postgres'로 연결합니다. 부분은 중요하다 : 그것은 이야기 , 그리고 (암호에 대해 상관하지 않는다) 피어 연결을 통해 우리는 (암호 인증을 사용하도록 구성되어) TCP 연결을 사용하여 연결하려면 해당 클라이언트를.\q
ctrl+d
-h localhost
psql
$ psql -U postgres -h localhost
PGHOST=localhost
하면 -h
매번 옵션 을 지정할 필요가 없습니다 . pg_*
이것은와 같은 다른 명령과 도 작동합니다 pg_dump
.
파일을 편집을 /etc/postgresql/8.4/main/pg_hba.conf
하고 교체 ident
또는 peer
중 하나에 의해 md5
또는 trust
당신이 자신의 컴퓨터 여부에 암호를 요청할지 여부에 따라. 그런 다음 다음을 사용하여 구성 파일을 다시로드하십시오.
/etc/init.d/postgresql reload
restart
하지, 나를 위해 일 reload
을 변경 한 후 --- /etc/postgresql/9.5/main/pg_hba.conf
(변화 peer
에 trust
).
클라이언트 인증에 실패하여이 오류가 발생합니다. 오류 메시지에 따라 모든 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 절을 참조하십시오.
따라서 ... 발생한 문제를 해결하기 위해 다음 중 하나를 수행 할 수 있습니다.
당신에 정의 된 인증 방법 (들) 변경 pg_hba.conf
에 파일 trust
, md5
또는 password
당신이 거기에 정의 된 로컬 연결 기록을 위해 (보안과 단순성의 요구에 따라).
pg_ident.conf
운영 체제 사용자를 PostgreSQL 사용자에게 매핑하고 필요에 따라 해당 액세스 권한을 부여하도록 업데이트 하십시오.
IDENT 설정은 그대로두고 액세스 권한을 부여 할 각 운영 체제 사용자에 대해 데이터베이스에 사용자를 작성하십시오. 사용자가 이미 OS에 의해 인증되고 로그인 한 경우 PostgreSQL은 추가 인증이 필요하지 않으며 데이터베이스에서 지정된 권한 (역할)에 따라 해당 사용자에게 액세스 권한을 부여합니다. 이것이 기본 구성입니다.
참고 : 위치 pg_hba.conf
및 pg_ident.conf
OS가 달려있다.
/etc/postgresql/9.6/main/pg_hba.conf
입니다.
-h localhost
비트를 추가하기 만하면 작업이 완료되었습니다.
this_computer = 'http://localhost'
환경 변수를 설정할 수 있습니다 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:
위의 어느 것도 당신을 위해 작동하지 않는 경우 :
나는 꽤 많은 Postgres 설치를 수행했지만 오늘 RedHat 6.5 시스템 (Postgres 9.3 설치)에서 flummoxed되었습니다. Aron이 위에서 보여준 일반적인 hba.conf 구성이 작동하지 않았습니다. 내 시스템이 IPV6을 사용하고 IPV4 구성을 무시하는 것으로 나타났습니다. 라인 추가하기 :
host all all ::1/128 password
로그인에 성공했습니다.
위의 모든 답변 중에서 아무것도 효과가 없었습니다. 데이터베이스에서 사용자 암호를 수동으로 변경해야했고 갑자기 작동했습니다.
psql -U postgres -d postgres -c "alter user produser with password 'produser';"
다음 설정을 사용했습니다.
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
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를 묻는 당신있는 거 포스트 그레스 .
파일의 전체 경로는 /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
. 어디에 넣을지 의문이 있다면, 주석을 달지 않은 첫 줄 앞에 놓으십시오.
에서 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!
문제는 여전히 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.
fedora26 및 postgres9.6
먼저, root 사용자로 로그인 한 후 다음 명령으로 psql에 입력하십시오.
$ su postgres
그때
$ psql
에 psql
hba_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
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
이 모든 작업을 수행했지만 여전히 작동하지 않으면 해당 사용자의 만료를 확인하십시오.
인정해야 할 오류를 해결하는 데 더 많은 시간을 보냈습니다.
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
주석을 달아보십시오.
이 문제를 해결하기위한 한 가지 방법은 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
:이 다음 후 동일한 issuse했다 우분투 12.04에 레일 개발을위한 PostgreSQL의 설치를
다른 답변을 시도했지만 "config / database.yml"
development:
adapter: postgresql
encoding: unicode
database: (appname)_development
pool: 5
username: (username you granted appname database priviledges to)
password:
CentOS에서 사용하는 경우 위의 솔루션을 만든 후 postgres를 다시로드해야 할 수 있습니다.
systemctl restart postgresql-9.3.service
postgresql
systemctl status | grep postgres
이것은 나를 위해 일했다 : 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