[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
-
peer
UNIX 사용자의 신원 (신뢰성)을 신뢰한다는 의미입니다. 암호를 요구하지 않습니다. -
md5
는 항상 비밀번호를 요청하고로 해시 한 후 비밀번호를 확인 함을 의미합니다MD5
.
물론 특정 데이터베이스 나 사용자에 대해 더 구체적인 규칙을 만들 수도 있습니다. 일부 사용자에게는 peer
암호가 필요합니다.
pg_hba.conf
PostgreSQL이 실행중인 경우 변경 한 후 다시로드 ( 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;