psql: 치명적:사용자 "postgres"에 대한 ID 인증 실패
Postgre를 설치했습니다.SQL 및 pgAdmin내 우분투 카믹 박스에 III.
pgAdmin을 사용할 수 있습니다.III 성공적으로(즉, 연결/로그온) 그러나 명령줄에서 동일한 사용자 이름/pwd를 사용하여 서버에 로그인하려고 하면(psql 사용) 다음 오류가 표시됩니다.
psql: FATAL: Ident authentication failed for user "postgres"
이제 이 문제를 해결하는 방법을 아는 사람이 있습니까?
다음 단계는 Ubuntu 12.04에서 postgres 9.1을 새로 설치할 때 작동합니다. (Ubuntu 14.04에서도 postgres 9.3.9에서 작동됨)
기본적으로 postgres는 'postgres'라는 사용자를 만듭니다.우리는 그녀로 로그인하고 그녀에게 비밀번호를 알려줍니다.
$ sudo -u postgres psql
\password
Enter password: ...
...
에서 합니다.psql
를 \q
또는ctrl+d
그런 다음 우리는 '포스트그레스'로 연결됩니다. 그-h localhost
부분은 중요합니다: 그것은 그것을 말합니다.psql
암호 인증을 사용하도록 구성된 TCP 연결을 사용하여 연결하려는 클라이언트이며, 암호에 상관없이 피어 연결을 사용하지 않습니다.
$ psql -U postgres -h localhost
pg_hba.conf에서 적절한 설정을 했습니까?
방법은 https://ubuntu.com/server/docs/databases-postgresql 을 참조하십시오.
을 편집합니다./etc/postgresql/8.4/main/pg_hba.conf
를 대체합니다.ident
또는peer
쪽인가에 md5
또는trust
사용자 컴퓨터에서 암호를 요청할지 여부에 따라 달라집니다.그런 다음 다음 구성 파일을 다시 로드합니다.
/etc/init.d/postgresql reload
클라이언트 인증에 실패했기 때문에 이 오류가 발생하고 있습니다.오류 메시지에 따라 모든 Postgre에 대해 클라이언트 인증 방법을 "IDENT"로 설정하는 기본 Postgres 구성이 있을 수 있습니다.SQL 연결.
Postgre에서 섹션 19.1 클라이언트 인증을 반드시 읽어야 합니다.(pg_hba.conf의 각 레코드에 대해) 사용 가능한 인증 설정을 더 잘 이해하기 위한 SQL 설명서가 있지만 (버전 9.5 설명서의) 현재 발생하고 있는 문제를 해결하는 데 도움이 되는 관련 코드 조각이 있습니다.
신뢰
무조건 연결을 허용합니다.이 메서드는 Postgre에 연결할 수 있는 모든 사용자에게 허용됩니다.Postgre로 로그인할 SQL 데이터베이스 서버암호나 다른 인증이 필요 없는 SQL 사용자입니다.자세한 내용은 섹션 19.3.1을 참조하십시오.
불합격
연결을 무조건 거부합니다.이 기능은 그룹에서 특정 호스트를 "필터링"하는 데 유용합니다. 예를 들어, 거부 라인은 특정 호스트의 연결을 차단할 수 있는 반면, 이후 라인은 특정 네트워크의 나머지 호스트의 연결을 허용합니다.
md5
클라이언트가 인증을 위해 이중 MD5 해시 암호를 제공하도록 요구합니다.자세한 내용은 섹션 19.3.2를 참조하십시오.
비밀번호
클라이언트가 인증을 위해 암호화되지 않은 암호를 제공하도록 요구합니다.암호는 네트워크를 통해 일반 텍스트로 전송되므로 신뢰할 수 없는 네트워크에서는 사용할 수 없습니다.자세한 내용은 섹션 19.3.2를 참조하십시오.
gss
GSSAPI를 사용하여 사용자를 인증합니다.TCP/IP 연결에만 사용할 수 있습니다.자세한 내용은 섹션 19.3.3을 참조하십시오.
스파이
SSPI를 사용하여 사용자를 인증합니다.Windows에서만 사용할 수 있습니다.자세한 내용은 섹션 19.3.4를 참조하십시오.
동일한
클라이언트의 ID 서버에 연결하여 클라이언트의 운영 체제 사용자 이름을 얻고 요청된 데이터베이스 사용자 이름과 일치하는지 확인합니다.ID 인증은 TCP/IP 연결에서만 사용할 수 있습니다.로컬 연결에 대해 지정하면 피어 인증이 대신 사용됩니다.자세한 내용은 섹션 19.3.5를 참조하십시오.
또래
운영 체제에서 클라이언트의 운영 체제 사용자 이름을 가져와 요청한 데이터베이스 사용자 이름과 일치하는지 확인합니다.로컬 연결에서만 사용할 수 있습니다.자세한 내용은 섹션 19.3.6을 참조하십시오.
ld
LDAP 서버를 사용하여 인증합니다.자세한 내용은 섹션 19.3.7을 참조하십시오.
반지름
RADIUS 서버를 사용하여 인증합니다.자세한 내용은 섹션 19.3.8을 참조하십시오.
확실한
SSL 클라이언트 인증서를 사용하여 인증합니다.자세한 내용은 섹션 19.3.9를 참조하십시오.
팸
운영 체제에서 제공하는 PAM(Pluggable Authentication Module) 서비스를 사용하여 인증합니다.자세한 내용은 섹션 19.3.10을 참조하십시오.
현재 발생하고 있는 문제를 해결하기 위해 다음 중 하나를 수행할 수 있습니다.
에정인방변다니에 합니다.
pg_hba.conf
을 로다철하에 합니다.trust
,md5
또는password
(보안 및 단순성 요구사항에 따라 다름) 여기에서 정의한 로컬 연결 레코드에 대한 정보를 제공합니다.pg_ident.conf
를 Postgre Postgre 매니다에 .SQL 사용자는 필요에 따라 해당 액세스 권한을 부여합니다.IDENT 설정은 그대로 두고 액세스 권한을 부여할 각 운영 체제 사용자에 대한 사용자를 데이터베이스에 생성합니다.사용자가 이미 OS에 의해 인증되고 로그인된 경우 PostgreSQL은 추가 인증을 요구하지 않으며 데이터베이스에서 할당된 권한(역할)에 따라 해당 사용자에게 액세스 권한을 부여합니다.이것이 기본 구성입니다.
참고: 위치의 :pg_hba.conf
그리고.pg_ident.conf
OS에 종속됩니다.
게추가다니합하단순▁the를 추가하면 됩니다.-h localhost
위해 이었습니다.
중 당신에게 것이 : 위의항목중하사수용없경우는할도:
저는 Postgres 설치를 꽤 많이 했지만, 오늘 RedHat 6.5 시스템(Postgres 9.3 설치)에서 당황했습니다.Aron이 위에 표시한 일반적인 hba.conf 구성이 작동하지 않았습니다.알고 보니 시스템에서 IPV6를 사용하고 IPV4 구성을 무시하고 있었습니다.라인 추가:
host all all ::1/128 password
성공적으로 로그인할 수 있습니다.
페도라26 및 postgres9.6의 경우
먼저 user root로 기록한 후 다음 명령을 사용하여 topsql을 입력합니다.
$ su postgres
그리고나서
$ psql
psql
of 는 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
저의 경우, 솔루션은 여기에 있습니다: (관련자를 위해) 포스트그레스에 로그인합니다.
sudo -i -u postgres
psql
ALTER USER postgres WITH PASSWORD 'postgres'; # type your password here
안부 전해요
환 변 설 할 수 있 니 다습을 설정할 수 있습니다.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:
음...
pgAdminpgAdmin에서 사용자 할 수 있지만 로 연결할 수 없습니다.psql
그러면 그 두 프로그램은 아마도 다르게 데이터베이스에 연결되어 있을 것입니다.
[다른 데이터베이스에 연결하는 경우, 먼저 동일한 데이터베이스에 연결해 보십시오.아래를 참조하십시오.
호스트 이름을 생략하면 psql은 Unix 도메인 소켓을 통해 로컬 호스트의 서버에 연결하거나, Unix 도메인 소켓이 없는 시스템의 TCP/IP를 통해 로컬 호스트에 연결합니다.
다음과 같은 작업을 수행하지 않을 경우psql ... -h host_name ...
그리고 당신은 우분투를 운영하고 있습니다.psql
Unix 도메인 소켓을 통해 연결해야 하므로 PostgreSQL이 postgres 사용자에 대한 암호 인증 방법 중 하나를 허용하도록 구성되어 있지 않습니다.
다음을 실행하여 테스트할 수 있습니다.
sudo -u postgres psql
위에서 설명한 내용이 작동하면 서버가 postgres 사용자의 로컬 연결에 피어 인증을 사용하도록 구성되어 있을 수 있습니다. 즉, 사용자 이름을 OS에 요청하여 postgres임을 확인합니다.
그래서 아마도 당신의 pg_hba.conf 파일일 것입니다.
파일의 전체 경로는 /etc/postgresql/9.3/main/pg_hba.conf와 같습니다.예를 들어 다음과 같이 볼 수 있습니다.sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more
.
에서 호스트 psql
다음 항목을 pg_syslog.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
그것을 어디에 두어야 할지 의문이 든다면, 논평되지 않은 첫 번째 줄 앞에 놓으십시오.
pg_hba.conf에 대한 자세한 정보
Postgre에서SQL: 문서: 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!
위의 모든 답변 중에서 저에게 효과가 있는 것은 없었습니다.데이터베이스에서 사용자 비밀번호를 수동으로 변경해야 하는데 갑자기 작동했습니다.
psql -U postgres -d postgres -c "alter user produser with password 'produser';"
다음 설정을 사용했습니다.
pg_pg.conf
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
포트 113을 수신하는 ID 서버를 설치해야 했습니다.
sudo apt-get install pidentd
sudo service postgresql restart
그리고 아이덴티티가 작동했습니다.
문제는 여전히 당신의 pg_hba.conf 파일입니다.다음 줄:이 파일은 /etc/postgres/variion/main에서 찾을 수 있습니다.
local all postgres peer
Should be
local all postgres md5
공식 Postgre에 따르면 두 가지 옵션에 대한 간략한 설명입니다.인증 방법에 대한 SQL 문서입니다.
피어 인증
피어 인증 방법은 커널에서 클라이언트의 운영 체제 사용자 이름을 가져와 허용된 데이터베이스 사용자 이름(선택적 사용자 이름 매핑 포함)으로 사용하는 방식으로 작동합니다.이 메서드는 로컬 연결에서만 지원됩니다.
암호 인증
암호 기반 인증 방법은 md5 및 암호입니다.이러한 방법은 연결을 통해 암호를 보내는 방법, 즉 각각 MD5 해시 및 일반 텍스트를 보내는 방법을 제외하고는 유사하게 작동합니다.
암호 "스니핑" 공격이 우려되는 경우 md5를 사용하는 것이 좋습니다.가능한 경우 일반 암호는 항상 사용하지 않아야 합니다.그러나 md5는 db_user_namespace 기능과 함께 사용할 수 없습니다.연결이 SSL 암호화로 보호되는 경우 암호를 안전하게 사용할 수 있습니다(SSL 인증서 인증이 SSL 사용에 의존하는 경우에는 SSL 인증서 인증이 더 나은 선택일 수 있음).
이 파일을 변경한 후에는 Postgre를 다시 시작하는 것을 잊지 마십시오.SQL Linux를 사용합니다.sudo service postgresql restart.
에서 Postgre Postgre에 9.3에 대한 제 은 bash를 사용하는 이었습니다.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
그것을 논평해 보세요.
이 모든 작업을 수행했지만 여전히 작동하지 않으면 해당 사용자의 만료를 확인합니다.
나는 비슷한 문제가 있었고 IP6 주소에 대한 모든 ID 메서드를 제거할 때 pg_hba.conf에서 수정했습니다(기계에 IP4만 있음에도 불구하고).
host all all 127.0.0.1/32 password
host all all ::1/128 password
#for pgAdmin running at local network
host all all 192.168.0.0/24 md5
이 문제를 해결하는 한 가지 해킹은 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_syslog.conf를 다음으로 설정합니다.
# Database administrative login by Unix domain socket
local all postgres md5
CentOS에서 사용하는 경우 위의 해결책을 만든 후에 postgres를 다시 로드해야 할 수도 있습니다.
systemctl restart postgresql-9.3.service
Postgre의 구성 문제와 관련이 있습니다.SQL 설치:
아래에 언급된 conf 파일에서 # TYPE DATABASE USER ADDRESS MODE 섹션 구성
업데이트할 방법(md5)을 사용자의 파일 위치에 따라 /var/lib/pgsql/10/data/pg_hba.conf를 찾아 편집합니다.아래와 같이 비교하여 구성에 대한 항목이 없는 경우 파일의 항목을 업데이트합니다.
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 0.0.0.0/0 md5
# IPv6 local connections:
host all all ::1/128 md5
아래에 언급된 conf 파일에서 연결 및 인증 섹션 구성
파일 위치를 기반으로 /var/lib/pgsql/10/data/postgresql.conf를 찾아서 편집합니다. 수신 대기 주소 및 포트 업데이트
listen_addresses = '*' // # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
port = 5432 // Set port as 5432
Postgre를 다시 시작합니다.SQL:
sudo systemctl restart postgresql-10 # Update service name based on your installation
윈도우즈의 경우 pb_gba.confie를 편집하지 않으려면 이 메서드를 MD5(기본값)로 유지하고 PGadmin의 쿼리 도구에서 이 쿼리를 실행하여 새 사용자를 생성합니다.
CREATE USER admin WITH PASSWORD 'secret'
cmd 단위로
psql "dbname=Main_db host=127.0.0.1 user=admin password=secret port=5432
여기서 dbname은 postgresql의 db입니다.
저는 이것을 따라한 후에도 같은 문제를 겪었습니다: Postgre.Ubuntu 12.04에서 Rails 개발을 위한 SQL 설정
다른 답변을 시도했지만 "config/database.yml"만 있으면 되었습니다.
development:
adapter: postgresql
encoding: unicode
database: (appname)_development
pool: 5
username: (username you granted appname database priviledges to)
password:
이 문제를 해결하기 위해 pdAdmin을 다시 설치해야 했습니다.
brew cask reinstall pgadmin4
GCP SQL에서 테라폼을 통해 사용자 이름과 비밀번호를 프로비저닝했는데, 문제는 테라폼을 통해 비밀번호가 제대로 설정되지 않아 적절한 수정은 아니지만 정확한 원인을 파악하기 위한 것입니다.
나는 GCP 콘솔에서 사용자의 비밀번호를 변경했고 그것이 작동했습니다.
이것은 저에게 효과가 있었습니다: 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
언급URL : https://stackoverflow.com/questions/2942485/psql-fatal-ident-authentication-failed-for-user-postgres
'programing' 카테고리의 다른 글
Git, 오리진/마스터를 커밋으로 재설정하는 방법은 무엇입니까? (0) | 2023.06.01 |
---|---|
원격 사이트에서 사용할 수 있는 모든 버전의 보석을 나열하려면 어떻게 해야 합니까? (0) | 2023.06.01 |
presentViewController 및 탐색 모음 표시 (0) | 2023.06.01 |
두 문자열을 연결하여 전체 경로를 만드는 방법 (0) | 2023.06.01 |
엑셀에서 셀을 KB, MB, GB 등으로 포맷하려면 어떻게 해야 합니까? (0) | 2023.06.01 |