programing

호스트에 대한 pg_hba.conf 항목이 없습니다.

yoursource 2021. 1. 15. 19:51
반응형

호스트에 대한 pg_hba.conf 항목이 없습니다.


DBI를 사용하여 연결하려고하면 다음 오류가 발생합니다.

DBI 연결 ( 'database = chaosLRdb; host = 192.168.0.1; port = 5433', 'postgres', ...) 
실패 : 치명적 : 호스트 "192.168.0.1", 사용자 "postgres", 데이터베이스 "chaosLRdb"에 대한 pg_hba.conf 항목 없음, SSL 꺼짐

다음은 내 pg_hba.conf 파일입니다.

# "local" is for Unix domain socket connections only
local   all         all                               md5
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5

host    all         postgres    127.0.0.1/32          trust

host    all        postgres     192.168.0.1/32        trust

host    all        all         192.168.0.1/32        trust

host    all        all         192.168.0.1/128        trust

host    all        all         192.168.0.1/32        md5

host    chaosLRdb    postgres         192.168.0.1/32      md5
local    all        all         192.168.0.1/32        trust

내 펄 코드는

#!/usr/bin/perl-w
use DBI;
use FileHandle;

print "Start connecting to the DB...\n";

@ary = DBI->available_drivers(true);
%drivers = DBI->installed_drivers();
my $dbh = DBI->connect("DBI:PgPP:database=chaosLRdb;host=192.168.0.1;port=5433", "postgres", "chaos123");

내가 여기서 무엇을 놓쳤는 지 알 수 있을까요?


pg_hba.conf 파일에 잘못되고 혼란스러운 줄이 있습니다.

# fine, this allows all dbs, all users, to be trusted from 192.168.0.1/32
# not recommend because of the lax permissions
host    all        all         192.168.0.1/32        trust

# wrong, /128 is an invalid netmask for ipv4, this line should be removed
host    all        all         192.168.0.1/128       trust

# this conflicts with the first line
# it says that that the password should be md5 and not plaintext
# I think the first line should be removed
host    all        all         192.168.0.1/32        md5

# this is fine except is it unnecessary because of the previous line
# which allows any user and any database to connect with md5 password
host    chaosLRdb  postgres    192.168.0.1/32        md5

# wrong, on local lines, an IP cannot be specified
# remove the 4th column
local   all        all         192.168.0.1/32        trust

암호를 md5하면 줄을 다듬 으면 작동 할 수 있다고 생각합니다. md5를 얻으려면 perl 또는 다음 쉘 스크립트를 사용할 수 있습니다.

 echo -n 'chaos123' | md5sum
 > d6766c33ba6cf0bb249b37151b068f10  -

따라서 연결 라인은 다음과 같습니다.

my $dbh = DBI->connect("DBI:PgPP:database=chaosLRdb;host=192.168.0.1;port=5433",
    "chaosuser", "d6766c33ba6cf0bb249b37151b068f10");

자세한 내용 은 postgres 8.X의 pg_hba.conf 파일 문서를 참조하십시오 .


이 줄을 변경할 수있는 경우 :

host    all        all         192.168.0.1/32        md5

이것으로 :

host    all        all         all                   md5

이것이 문제를 해결하는지 확인할 수 있습니다.

그러나 또 다른 고려 사항은 postgresql 포트 (5432)가 해커의 암호 공격에 매우 개방적이라는 것입니다 (아마도 암호를 무차별 대입 할 수 있음). postgresql 포트 5432를 '33333'또는 다른 값으로 변경할 수 있으므로이 구성을 알 수 없습니다.


postgres 서버 구성이 올바른 것 같습니다.


host    all         all         127.0.0.1/32          md5
host    all         all         192.168.0.1/32        trust
클라이언트에서 postgres 서버에 대한 액세스 권한을 부여해야합니다. 그래서 사용자 이름 / 비밀번호가 실패한 것이라고 믿게됩니다.

해당 데이터베이스에 대한 특정 사용자를 만들어이를 테스트합니다.


createuser -a -d -W -U postgres chaosuser

그런 다음 새로 생성 된 사용자를 사용하도록 perl 스크립트를 조정합니다.


my $dbh = DBI->connect("DBI:PgPP:database=chaosLRdb;host=192.168.0.1;port=5433", "chaosuser", "chaos123");


이 문제를 해결하려면 이것을 시도 할 수 있습니다.

먼저 pg_hba.conf를 찾아서 다음과 같이 작성하십시오.

local all all md5

그 후 pg 서버를 다시 시작하십시오.

postgresql restart

또는

sudo /etc/init.d/postgresql restart

For those who have the similar problem trying to connect to local db and trying like
con = psycopg2.connect(database="my_db", user="my_name", password="admin"), try to pass the additional parameter, so the following saved me a day:
con = psycopg2.connect(database="my_db", user="my_name", password="admin", host="localhost")


For those who are getting this error in DBeaver the solution was found here at line:

@lcustodio on the SSL page, set SSL mode: require and either leave the SSL Factory blank or use the org.postgresql.ssl.NonValidatingFactory

Under Network -> SSL tab I checked the Use SLL checkbox and set Advance -> SSL Mode = require and it now works.


also check the PGHOST variable:

ECHO $PGHOST

to see if it matches the local machine name


If you are getting an error like the one below:

OperationalError: FATAL:  no pg_hba.conf entry for host "your ipv6",
                  user "username", database "postgres", SSL off

then add an entry like the following, with your mac address.

host   all    all       [your ipv6]/128         md5

BTW, in my case it was that I needed to specify the user/pwd in the url, not as independent properties, they were ignored and my OS user was used to connect

My config is in a WebSphere 8.5.5 server.xml file

<dataSource 
    jndiName="jdbc/tableauPostgreSQL" 
    type="javax.sql.ConnectionPoolDataSource">
    <jdbcDriver 
        javax.sql.ConnectionPoolDataSource="org.postgresql.ds.PGConnectionPoolDataSource" 
        javax.sql.DataSource="org.postgresql.ds.PGPoolingDataSource" 
        libraryRef="PostgreSqlJdbcLib"/>
    <properties 
        url="jdbc:postgresql://server:port/mydb?user=fred&amp;password=secret"/>
</dataSource>

This would not work and was getting the error:

<properties 
    user="fred"
    password="secret"
    url="jdbc:postgresql://server:port/mydb"/>

ReferenceURL : https://stackoverflow.com/questions/1406025/no-pg-hba-conf-entry-for-host

반응형