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 user_name -h 127.0.0.1 -d db_name
어디
-h
로컬 서버의 호스트 이름 / IP이므로 Unix 도메인 소켓을 피하십시오-d
연결할 데이터베이스 이름입니다.
그런 다음 유닉스 도메인 소켓 연결이 아닌 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
인증하는 동안 일반 텍스트 비밀번호를 지정할 수도 있습니다 . 데이터베이스 서버에 로컬로만 액세스 할 수 있고 네트워크에 액세스 할 수 없다면이 두 가지 옵션은 중요하지 않습니다.
Important note: Definition order in pg_hba.conf
matters - rules are read from top to bottom, like iptables, so you probably want to add proposed rules above the rule:
host all all 127.0.0.1/32 ident
While @flaviodesousa's answer would work, it also makes it mandatory for all users (everyone else) to enter a password.
Sometime it makes sense to keep peer authentication for everyone else, but make an exception for a service user. In that case you would want to add a line to the pg_hba.conf that looks like:
local all some_batch_user md5
I would recommend that you add this line right below the commented header line:
# TYPE DATABASE USER ADDRESS METHOD
local all some_batch_user md5
You will need to restart PostgreSQL using
sudo service postgresql restart
If you're using 9.3, your pg_hba.conf would most likely be:
/etc/postgresql/9.3/main/pg_hba.conf
This works for me when I run into it:
sudo -u username psql
The easiest solution:
CREATE USER dev WITH PASSWORD 'dev';
CREATE DATABASE test_development;
GRANT ALL PRIVILEGES ON DATABASE test_development to dev;
ALTER ROLE dev CREATEROLE CREATEDB;
I simply had to add -h localhost
In my case I was using different port. Default is 5432. I was using 5433. This worked for me:
$ psql -f update_table.sql -d db_name -U db_user_name -h 127.0.0.1 -p 5433
For people in the future seeing this, postgres
is in the /usr/lib/postgresql/10/bin
on my Ubuntu server.
I added it to the PATH in my .bashrc file, and add this line at the end
PATH=$PATH:/usr/lib/postgresql/10/bin
then on the command line
$> source ./.bashrc
I refreshed my bash environment. Now I can use postgres -D /wherever
from any directory
참고URL : https://stackoverflow.com/questions/17443379/psql-fatal-peer-authentication-failed-for-user-dev
'IT' 카테고리의 다른 글
Visual Studio 2015 추가 디버그 옵션 비활성화 (0) | 2020.05.17 |
---|---|
dyld : 라이브러리가로드되지 않음 : Mac에서 brew를 사용하여 노드를 설치 한 후 PHP를 실행하는 /usr/local/opt/icu4c/lib/libicui18n.62.dylib 오류 (0) | 2020.05.16 |
iOS-CocoaPods로 빌드 실패 헤더 파일을 찾을 수 없습니다 (0) | 2020.05.16 |
SD 카드에 자동으로 디렉토리를 만드는 방법 (0) | 2020.05.16 |
수평 선형 레이아웃 안드로이드에서 위젯을 올바르게 정렬하는 방법은 무엇입니까? (0) | 2020.05.16 |