[postgresql] psql : 치명적 : 사용자“dev”에 대한 피어 인증에 실패했습니다

새 사용자를 만들 때 데이터베이스에 로그인 할 수 없습니다.
나는 이렇게 이렇게 :

postgres@Aspire:/home/XXX$ createuser dev
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y

그런 다음 데이터베이스를 작성하십시오.

postgres@Aspire:/home/XXX$ createdb -O dev test_development

그 후 psql -U dev -W test_development로그인을 시도 하지만 오류가 발생합니다.

psql: FATAL:  Peer authentication failed for user "dev"

문제를 해결하려고했지만 실패했습니다.



답변

시험:

psql -U user_name  -h 127.0.0.1 -d db_name

어디

  • -U 데이터베이스 사용자 이름입니다
  • -h 로컬 서버의 호스트 이름 / IP이므로 Unix 도메인 소켓을 피하십시오
  • -d 연결할 데이터베이스 이름입니다.

그런 다음 Unix 도메인 소켓 연결이 아닌 Postgresql에 의한 “네트워크”연결로 평가되므로 다음과 같이 “로컬”연결로 평가되지 않습니다 pg_hba.conf.

local   all             all                                     peer


답변

기본적으로 인증을 psql사용하여 UNIX 소켓을 통해 연결 하므로 peer현재 UNIX 사용자와 사용자 이름이 같아야합니다 psql. 당신은 UNIX 사용자를 만들어야합니다 그래서 dev다음과 같이 로그인 dev또는 사용 sudo -u dev psql test_development하여 데이터베이스에 액세스하기위한 (그리고 psql해야 하지 암호를 요청).

임시 쿼리 를 위해 데이터베이스에 연결하려는 경우와 같이 UNIX 사용자를 만들 수 없거나 원하지 않는 경우 psql --host=localhost --dbname=test_development --username=dev(@meyerson answer에서 지적한대로) 소켓 연결을 사용 하면 즉각적인 문제가 해결됩니다.

그러나 피어 메소드 대신 Unix 소켓을 통해 비밀번호 인증을 강제하려면 다음 pg_hba.conf* 행을 변경하십시오 .

…에서

# TYPE DATABASE USER ADDRESS METHOD
local  all      all          peer

# TYPE DATABASE USER ADDRESS METHOD
local  all      all          md5
  • peerUNIX 사용자의 신원 (신뢰성)을 신뢰한다는 의미입니다. 암호를 요구하지 않습니다.

  • md5는 항상 비밀번호를 요청하고로 해시 한 후 비밀번호를 확인 함을 의미합니다 MD5.

물론 특정 데이터베이스 나 사용자에 대해 더 구체적인 규칙을 만들 수도 있습니다. 일부 사용자에게는 peer암호가 필요합니다.

pg_hba.confPostgreSQL이 실행중인 경우 변경 한 후 다시로드 ( pg_ctl reload) 또는 다시 시작 ( sudo service postgresql restart) 하여 구성을 다시 읽어야합니다 .

* 파일 pg_hba.conf은 대부분/etc/postgresql/9.x/main/pg_hba.conf

편집 : @Chloe, @JavierEH, @Jonas Eicher, @fccoelho, @Joanis, @Uphill_의 의견 답변에 포함 된 의견.


답변

피어 인증은 postgres가 운영 체제에 로그인 이름을 요청하고이를 인증에 사용함을 의미합니다. postgres에서 피어 인증을 사용하여 “dev”사용자로 로그인하려면 운영 체제의 “dev”사용자 여야합니다.

인증 방법에 대한 자세한 내용은 Postgresql 설명서를 참조하십시오 .

힌트 : 더 이상 인증 방법이 작동하지 않으면 서버를 네트워크에서 분리하고 “localhost”에 “trust”방법을 사용하십시오 ( “trust”방법이 활성화 된 상태에서 네트워크를 통해 서버에 연결할 수 없는지 다시 확인하십시오).


답변

지정할 때 :

psql -U user

peer별도로 지정하지 않는 한 기본적으로 인증을 사용하는 UNIX 소켓을 통해 연결됩니다 pg_hba.conf.

다음을 지정할 수 있습니다.

host    database             user             127.0.0.1/32       md5
host    database             user             ::1/128            md5

지정된 database및의 루프백 인터페이스 (IPv4 및 IPv6 모두)에서 TCP / IP 연결을 가져옵니다 user.

변경 후 postgres를 다시 시작하거나 구성을 다시로드해야합니다. 최신 RHEL / Debian 기반 배포판에서 작동하는 재시작 :

service postgresql restart

새로 고침은 다음과 같은 방식으로 작동합니다 :

pg_ctl reload

그러나 명령은 PATH 구성에 따라 다를 수 있습니다-postgres가 설치된 방식에 따라 절대 경로를 지정해야 할 수도 있습니다.

그런 다음 다음을 사용할 수 있습니다.

psql -h localhost -U user -d database

TCP / IP를 통해 user지정된 로그인하십시오 database.
md5은 암호화 된 비밀번호를 나타내며, password인증하는 동안 일반 텍스트 비밀번호를 지정할 수도 있습니다 . 데이터베이스 서버에 로컬로만 액세스 할 수 있고 네트워크에 액세스 할 수 없다면이 두 가지 옵션은 중요하지 않습니다.

중요 사항 :pg_hba.conf 문제의
정의 순서 -규칙은 iptables와 같이 위에서 아래로 읽히므로 규칙 위에 제안 된 규칙을 추가 할 수 있습니다.

host    all             all             127.0.0.1/32            ident


답변

@flaviodesousa의 답변은 효과가 있지만 모든 사용자 (다른 사람)가 암호를 입력해야합니다.

때때로 다른 사람의 피어 인증을 유지하는 것이 합리적이지만 서비스 사용자에게는 예외가됩니다. 이 경우 pg_hba.conf에 다음과 같은 행을 추가하려고합니다.

local   all             some_batch_user                         md5

주석 처리 된 헤더 행 바로 아래에이 행을 추가하는 것이 좋습니다.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             some_batch_user                         md5

다음을 사용하여 PostgreSQL을 다시 시작해야합니다.

sudo service postgresql restart

9.3을 사용하는 경우 pg_hba.conf는 다음과 같습니다.

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


답변

내가 그것을 실행할 때 이것은 나를 위해 작동합니다 :

sudo -u username psql


답변

가장 쉬운 해결책 :

CREATE USER dev WITH PASSWORD 'dev';
CREATE DATABASE test_development;
GRANT ALL PRIVILEGES ON DATABASE test_development to dev;
ALTER ROLE dev CREATEROLE CREATEDB;