오류 발생: pgsql이 레일에서 작동하도록 하려고 할 때 사용자 "postgres"에 대한 피어 인증이 실패했습니다.
오류가 발생합니다.
FATAL: Peer authentication failed for user "postgres"
내가 포스트그레스를 레일즈와 함께 일하게 하려고 할 때.
여기 내, 내, 그리고 모든 흔적의 쓰레기통입니다.
pg_hba에서 md5로 인증을 변경하고 여러 가지를 시도해 보았지만 아무 것도 작동하지 않는 것 같습니다.
또한 Rails 3.2, FATAL:에 따라 새 사용자와 데이터베이스를 생성해 보았습니다. 사용자에 대한 피어 인증 실패(PG::Error)
가 pgadmin을 sudo -u postgres psql -l
.
내가 어디서 잘못되고 있는지 알아요?
당신의 문는여당것다입니의신입니다.pg_hba.conf
파일*.
다음 줄:
local all postgres peer
해야 할 일:
local all postgres md5
이 파일을 변경한 후에는 Postgre를 다시 시작하는 것을 잊지 마십시오.SQL Linux를 사용합니다.sudo systemctl restart postgresql
시스템의 : (으)로 표시됨:sudo service postgresql restart
).
하기 치기hba.conf
이 파일의 위치가 일치하지 않습니다.
사용할 수 있습니다.locate pg_hba.conf
에게 Postgrey에게 하십시오.SQL SQLSHOW hba_file;
파일 위치를 검색합니다.
는 일적인위는치입니다./etc/postgresql/[version]/main/pg_hba.conf
그리고./var/lib/pgsql/data/pg_hba.conf
.
다음은 다음에 대한 간략한 설명입니다.peer
대md5
공식 Postgre에 따른 옵션인증 방법에 대한 SQL 문서입니다.
피어 인증
피어 인증 방법은 커널에서 클라이언트의 운영 체제 사용자 이름을 가져와 허용된 데이터베이스 사용자 이름(선택적 사용자 이름 매핑 포함)으로 사용하는 방식으로 작동합니다.이 메서드는 로컬 연결에서만 지원됩니다.
암호 인증
암호 기반 인증 방법은 md5 및 암호입니다.이러한 방법은 연결을 통해 암호를 보내는 방법, 즉 각각 MD5 해시 및 일반 텍스트를 보내는 방법을 제외하고는 유사하게 작동합니다.
암호 "스니핑" 공격이 우려되는 경우 md5를 사용하는 것이 좋습니다.가능한 경우 일반 암호는 항상 사용하지 않아야 합니다.그러나 md5는 db_user_namespace 기능과 함께 사용할 수 없습니다.연결이 SSL 암호화로 보호되는 경우 암호를 안전하게 사용할 수 있습니다(SSL 인증서 인증이 SSL 사용에 의존하는 경우에는 SSL 인증서 인증이 더 나은 선택일 수 있음).
Postgresql을 설치한 후 아래 단계를 수행했습니다.
pg_hba.conf
Ubuntu의 Ubuntu 의다사용니합를예우를 합니다./etc/postgresql/13/main$ sudo nano pg_hba.conf
파일의 맨 아래에 있는 이 줄을 변경합니다. 이 줄은 설정의 첫 번째 줄이어야 합니다.로컬 모든 postgres 피어
로.
로컬 모든 사후 신탁
참고 사항:다른 사용자와도 연결하려면 다음을 변경해야 합니다.
로컬 모든 피어
로.
로컬 all md5
에디터를 했다면 double nano 으로 합니다.
Escape
,x
,y
,Enter
구성 파일을 저장합니다.서버 다시 시작
$ sudo service postgresql restart
출력:
* Restarting PostgreSQL 13 database server
psql에 로그인하고 암호를 설정
$ psql -U postgres db> ALTER USER postgres with password 'your-pass';
출력:
ALTER ROLE
참고 사항:다른 사용자가 있는 경우 암호도 필요합니다.
db> ALTER USER my_user with password 'your-pass';
그런 다음 다음을 입력합니다.
exit
으로 마막으변다니합경로지▁the다▁change▁finally니합경을 변경합니다.
pg_hba.conf
로컬 모든 사후 신탁
로.
로컬 모든 포스트그레스 md5
서버를 다시 시작합니다.
$ sudo service postgresql restart
출력:
* Restarting PostgreSQL 13 database server
postgres 사용자를 사용하여 psql에 로그인
postgresql 서버를 재시작하면 postgres 사용자가 선택한 암호를 수락합니다.
psql -U postgres
력출:
Password for user postgres:
psql (13.4 (Ubuntu 13.4-1.pgdg20.04+1))
Type "help" for help.
그리고 당신은 psql에 있습니다.
postgres=#
사이드 노트: 이제 동일한 기능이 사용됩니다.
my_user
사용자 및 암호를 추가한 경우:psql -d YOUR_DB_NAME -U my_user
의 새 암호를 묻는 메시지가 표시됩니다.
my_user
.
인증 방법 세부 정보:
신뢰 - 서버에 연결할 수 있는 사용자는 누구나 데이터베이스에 액세스할 수 있습니다.
피어 - 클라이언트의 운영 체제 사용자 이름을 데이터베이스 사용자 이름으로 사용하여 액세스합니다.
md5 - 암호 기반 인증
localhost(127.0.0.1)를 통해 연결하는 경우 해당 문제가 발생하지 않아야 합니다.pg_hba.conf를 많이 사용하지 않고 대신 연결 문자열을 조정합니다.
psql -U someuser -h 127.0.0.1 database
여기서 일부 사용자는 연결할 사용자이고 데이터베이스는 연결할 권한이 있는 데이터베이스입니다.
데비안에게 포스트그레스를 설정하기 위해 제가 하는 일은 다음과 같습니다.
http://www.postgresql.org/download/linux/debian/ (Wheezy 7.x)
as root …
root@www0:~# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list
root@www0:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
root@www0:~# apt-get update
root@www0:~# apt-get install postgresql-9.4
root@www0:~# su - postgres
postgres@www0:~$ createuser --interactive -P someuser
Enter password for new role:
Enter it again:
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) n
postgres@www0:~$ createdb -O someuser database
postgres@www0:~$ psql -U someuser -h 127.0.0.1 database
맛있게 드세요!
이것은 나에게 효과가 있었습니다!!
sudo -u postgres psql
sudo psql --host=localhost --dbname=database-name --username=postgres
이것으로 나의 문제가 해결되었습니다.
문제의 합니다.pg_hba.conf
명령은 다음과 같습니다.
find / -name 'pg_hba.conf' 2>/dev/null
그런 다음 구성 파일을 변경합니다.
Postgresql 9.3
Postgresql 9.4
다음 단계는 DB 인스턴스 재시작입니다.
service postgresql-9.3 restart
문제가 있는 경우 암호를 다시 설정해야 합니다.
ALTER USER db_user with password 'db_password';
- 이 /etc/postgresql/9.x/main/으로 이동하여 pg_hba.conf 파일을 엽니다.
내 경우:
$> sudo nano /etc/postgresql/9.3/main/pg_hba.conf
- 피어를 md5로 교체
따라서 다음과 같이 변경됩니다.
Unix 도메인 소켓 로컬 모든 postgres 피어에 의한 데이터베이스 관리 로그인
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
다음 항목:
Unix 도메인 소켓에 의한 데이터베이스 관리 로그인 local all postgres md5
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
그런 다음 pg 서버를 다시 시작합니다.
$> sudo 서비스 postgresql 다시 시작
다음은 postgres와 연결하는 데 사용되는 방법의 목록입니다.
# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi",
# "krb5", "ident", "peer", "pam", "ldap", "radius" or "cert". Note that
# "password" sends passwords in clear text; "md5" is preferred since
# it sends encrypted passwords.
참고: 아직 생성하지 않은 경우 사용자를 postgres합니다.생성하면 해당 사용자 자격 증명을 사용하여 postgres 서버에 액세스할 수 있습니다.
팁: Postgres를 다시 시작한 후에도 작동하지 않으면 터미널을 닫고 다시 엽니다.
구성을 변경하지 않고 가장 간단한 솔루션입니다.(ubuntu) 사용자를 변경한 다음 데이터베이스 CLI에 연결합니다.
sudo -i -u postgres
psql
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-18-04 에서 가져온
복제된 서버에서 데이터 디렉토리를 이동하는 중에 postgres로 로그인하는 데 문제가 발생했습니다.이렇게 postgres 비밀번호를 재설정하는 것이 저에게 효과가 있었습니다.
root# su postgres
postgres$ psql -U postgres
psql (9.3.6)
Type "help" for help.
postgres=#\password
Enter new password:
Enter it again:
postgres=#
저도 같은 문제가 있었습니다.
depa의 해결책은 전적으로 맞습니다.
Postgre를 사용하도록 구성된 사용자가 있는지 확인하십시오.SQL.
파일 확인:
$ ls /etc/postgresql/9.1/main/pg_hba.conf -l
이 파일의 권한은 당신이 psql을 등록한 사용자에게 주어져야 합니다.
더.당신이 지금까지 좋다면..
@depa의 지침에 따라 업데이트합니다.
예.
$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf
그런 다음 변경합니다.
기본 구성을 유지하되 특정 사용자/db 연결에 대해 소켓 연결을 사용하여 md5 인증을 수행하려면 "local all/all" 행 앞에 "local" 행을 추가합니다.
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local dbname username md5 # <-- this line
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
대부분의 솔루션은 편집을 제안합니다.pg_hba.conf
.
파일을 으로 구성파일편지않사는용경기의됩로다니하면만에 .postgres
명령을 사용합니다.
sudo -i -u postgres
사를생니다합성용자▁를 생성합니다.postgres
다시 .이제 psql 명령을 다시 시도합니다.
추가할 수도 있습니다.postgres
다음 명령을 사용하여 암호를 사용합니다(루트 사용자여야 함).
passwd postgres
이 포스트그레에 따르면 이것은 효과가 있기 때문입니다.SQL 설명서,
피어 인증
피어 인증 방법은 커널에서 클라이언트의 운영 체제 사용자 이름을 가져와 허용된 데이터베이스 사용자 이름(선택적 사용자 이름 매핑 포함)으로 사용하는 방식으로 작동합니다.이 메서드는 로컬 연결에서만 지원됩니다.
Postgres 서버를 만든 후 다시 시작해야 한다는 것을 알게 된 후, 위의 편집은 저에게 효과가 있었습니다.unbuntu의 경우:
sudo /etc/init.d/postgresql restart
MODE 피어를 pg_hba.conf(/etc/postgresql/9.1/main/pg_hba.conf | line 85)에서 신뢰로 변경하면 문제가 해결됩니다.md5를 추가하면 암호가 필요하므로 암호를 사용하지 않도록 해야 하는 경우 md5 대신 trust를 사용합니다.
사용하다host=localhost
관련하여
PGconn *conn = PQconnectdb(
"host=localhost user=postgres dbname=postgres password=123"
);
다음 단계를 따르십시오.
. 먼저 /etc/postgresql/{yourpg version}/main 디렉토리로 이동합니다.
제 버전은 10입니다. 그러면:
cd /etc/postgresql/10/main
. 여기에 pg_hba.conf 파일이 있습니다. 여기서 몇 가지 변경을 수행하려면 sudo 액세스가 필요할 수 있습니다.
sudo nano pg_hba.conf
. 파일을 아래로 스크롤하여 찾을 수 있습니다.
# Database administrative login by Unix domain socket
local all postgres peer
여기서 피어를 다음과 같이 md5로 변경합니다.
# Database administrative login by Unix domain socket
local all all md5
피어는 UNIX 사용자의 신뢰성을 신뢰한다는 의미이므로 신뢰하지 않습니다.
암호를 입력하라는 메시지가 표시됩니다. md5는 항상 암호를 요청하고 MD5와 해시한 후에 유효성을 검사한다는 의미입니다.
이제 파일을 저장하고 Postgres 서버를 다시 시작합니다.
sudo service postgresql restart
이제 괜찮을 겁니다.
이 오류는 호스트를 제공하지 않을 때 발생할 수 있습니다.다음 시나리오는 이와 유사합니다.
user@homepc:psql -d test_db -U test_user
FATAL: psql: : : test_user" 피어 인증 실패 "test_user" 파일입니다.
user@homepc:psql -h localhost -d test_db -U test_user
사용자 test_user의 는 다음과 .
호스트를 제공하여 psql 명령줄에서 문제가 해결되었습니다.레일에서 진행할 수 있도록 연결 구성의 호스트를 제공해 보십시오.
다음 명령은 나에게 적용됩니다.
psql -d myDb -U username -W
Method를 trust로 설정하면 됩니다.
#TYPE DATABASE USER ADDRESS METHOD
local all all trust
그리고 postgres 서버를 다시 로드합니다.
# service postgresql-9.5 reload
pg_hba.conf를 변경할 경우 RESTART postgres 서버가 필요하지 않습니다.다시 로드합니다.
pg_config는 호환성 정보를 위한 것으로, 확장 및 클라이언트 프로그램이 Postgre에 대해 컴파일하고 연결하는 데 도움이 됩니다.SQL. 활성 Postgre에 대해 아무것도 알지 못합니다.시스템의 SQL 인스턴스(바이너리만 해당)입니다.
pg_hba.conf는 Pg가 설치된 방식에 따라 다른 많은 위치에 나타날 수 있습니다.표준 위치는 데이터베이스의 data_directory 내에서 pg_hba.conf이지만(/home, /var/lib/pgsql, /var/lib/postgresql/[version]/, /opt/postgres/ 등) 사용자와 패키지 관리자는 원하는 위치에 배치할 수 있습니다.불행하게도.
pg_hba.conf를 찾는 유일한 유효한 방법은 실행 중인 Postgre에 문의하는 것입니다.SQL 인스턴스의 위치는 pg_hba.conf입니다. 또는 sysadmin에게 위치를 문의하십시오.pg를 시작할 때 init 스크립트가 -chba_file=/some/other/path와 같은 매개 변수를 전달할 수 있기 때문에 datadir 위치를 묻고 postgresql.conf를 구문 분석하는 것조차 신뢰할 수 없습니다.
당신이 하고 싶은 것은 Postgre에게 물어보는 것입니다.SQL:
SHOW hba_file;
이 명령은 슈퍼유저 세션에서 실행되어야 하므로 셸 스크립팅을 위해 다음과 같은 내용을 작성할 수 있습니다.
psql -t -P format=unaligned -c 'show hba_file';
환경 변수 PGUSER, PGDATABASE 등을 설정하여 연결이 올바른지 확인합니다.
예, 사용자가 연결할 수 없으면(예: pg_hba.conf 편집을 마친 후) 수정하기 위해 pg_hba.conf를 찾을 수 없다는 점에서 이것은 닭과 달걀의 문제입니다.
또 다른 옵션은 ps 명령의 출력을 보고 포스트마스터 데이터 디렉토리 인수 -D가 표시되는지 확인하는 것입니다.
ps aux | grep 'postgres *-D'
pg_hba.conf는 데이터 디렉토리 안에 있을 것이기 때문입니다(데비안/우분투 또는 일부 파생상품에 있고 해당 패키지를 사용하지 않는 경우).
특히 Postgre를 사용하는 Ubuntu 시스템을 대상으로 하는 경우Debian/Ubuntu 패키지에서 설치된 SQL은 조금 더 쉬워집니다.당신은 누군가가 그들의 홈 디렉토리에서 initdb'd data dir 또는 엔터프라이즈에 대해 수동으로 컴파일한 소스 Pg를 다룰 필요가 없습니다./opt 등에 DBPg 설치데비안/우분투 다중 버전 페이지 관리자인 pg_wrapper에게 Postgre 위치를 물어볼 수 있습니다.SQL에서 pg_wrapper의 pg_lsclusters 명령을 사용하고 있습니다.
연결할 수 없는 경우(Pg가 실행되고 있지 않거나 연결하려면 pg_hba.conf를 편집해야 함) 시스템에서 pg_hba.conf 파일을 검색해야 합니다.Mac과 Linux에서는 sudo find / -type f-name pg_hba.conf와 같은 것이 좋습니다.그런 다음 같은 디렉터리에 있는 PG_VERSION 파일을 확인하여 올바른 Postgre인지 확인합니다.SQL 버전(둘 이상인 경우). pg_hba.conf가 /etc/에 있으면 무시하고 대신 상위 디렉토리 이름입니다.동일한 Postgre에 대한 두 개 이상의 데이터 디렉토리가 있는 경우데이터베이스 크기를 확인하고 ps에서 실행 중인 postgres의 명령줄을 확인하여 데이터 디렉토리 -D 인수가 편집 중인 위치와 일치하는지 확인해야 합니다. https://askubuntu.com/questions/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711
다른 많은 답변들은 다양한 구성 파일의 설정과 관련이 있습니다.pg_hba.conf
적용해야 하며 100% 정확합니다.그러나 올바른 구성 파일을 수정하고 있는지 확인합니다.
파일 될 수 의 기본 할 수 있습니다.-D
선택.
psql 세션 중에 다음 명령을 사용하여 구성 파일이 읽히는 위치를 표시할 수 있습니다(psql을 시작할 수 있다고 가정).이는 일부 사용자에게 도움이 될 수 있는 문제 해결 단계일 뿐입니다.
select * from pg_settings where setting~'pgsql';
또한 postgres 사용자의 홈 디렉토리가 예상되는 위치에 있는지 확인해야 합니다.당신의 프롬프트가 표시될 것이기 때문에 이것을 간과하기 쉽기 때문에 이렇게 말합니다.~
홈 디렉토리의 실제 경로 대신 사용할 수 있습니다.의 설치에서는 홈 를 " " " postgres "로 기본 설정합니다./var/lib/pgsql
.
원래대로 설정되지 않은 경우 postgresql 서비스를 중지하고 루트로 로그인하는 동안 다음 명령을 사용합니다.또한 postgres 사용자가 다른 세션에 로그인하지 않았는지 확인합니다.
usermod -d /path/pgsql postgres
합니다. PGDATA 변수를 입력합니다.echo $PGDATA
다음과 유사한 것을 출력해야 합니다.
/path/pgsql/data
설정되지 않았거나 예상과 다른 내용을 표시하는 경우 시작 파일 또는 RC 파일(예: .profile 또는 .bash.rc)을 검사합니다. 이 파일은 OS 및 셸에 따라 크게 달라집니다.컴퓨터에 적합한 시작 스크립트를 결정했으면 다음을 삽입할 수 있습니다.
export PGDATA=/path/pgsql/data
내 시스템을 위해, 나는 이것을 배치했습니다./etc/profile.d/profile.local.sh
그래서 모든 사용자가 접근할 수 있었습니다.
이제 정상적으로 데이터베이스를 초기화할 수 있으며 모든 psql 경로 설정이 정확해야 합니다!
레일과 관련된 이 문제에 직면하여 암호와 올바른 권한을 가진 사용자 이름을 이미 작성했다는 것을 알고 있다면 database.yml 파일의 끝에 다음을 입력하기만 하면 됩니다.
host: localhost
전체 파일은 아래와 같습니다.
development:
adapter: postgresql
encoding: unicode
database: myapp_development
pool: 5
username: root
password: admin
host: localhost
당신은 당신을 만질 필요가 없습니다.pg_hba.conf
철철철철철철철철철철철철철철철철철철철철해피 코딩
나의 문제는 서버를 입력하지 않았다는 것입니다.자리 표시자 때문에 기본값인 줄 알았는데 localhost를 입력했더니 작동했습니다.
클라우드 9에서 이 파일을 찾으려면 다음을 수행할 수 있습니다.
sudo vim /var/lib/pgsql9/data/pg_hba.conf
를 누릅니다.I
하려면 편집/삽입, 름누를 누릅니다.ESC
후 3번 입력:wq
하고 종료합니다.
저의 경우에는 pg_hba.conf 파일의 내용을 편집하거나 볼 수조차 없었습니다.
효과가 있었던 것은 다음과 같습니다.
/etc/postgresql/14/main$ sudo vi pg_hba.conf
sudo 권한이 있는 Vi 편집기.
CentOS 7, PG 10에서 파일 경로는
/var/lib/pgsql/10/data/pg_hba.conf
언급URL : https://stackoverflow.com/questions/18664074/getting-error-peer-authentication-failed-for-user-postgres-when-trying-to-ge
'programing' 카테고리의 다른 글
Xcode 10 - 이미지 리터럴을 더 이상 사용할 수 없습니다. (0) | 2023.06.01 |
---|---|
헤로쿠: 다른 지역 깃 지점을 헤로쿠/마스터에게 푸시하는 방법 (0) | 2023.06.01 |
터미널에서 루비 스크립트를 실행하는 방법은 무엇입니까? (0) | 2023.06.01 |
단일 RSpec 테스트를 실행하는 방법은 무엇입니까? (0) | 2023.06.01 |
Gradle DSL 메서드를 찾을 수 없습니다. 'runProguard' (0) | 2023.06.01 |