web-dev-qa-db-ja.com

ホストのpg_hba.confエントリなし

DBIを使用して接続しようとすると、次のエラーが表示されます

 DBI connect( 'database = chaosLRdb; Host = 192.168.0.1; port = 5433'、 'postgres'、...)
 failed:FATAL:no pg_hba.conf entry for Host "192.168 .0.1 "、ユーザー" postgres "、データベース" chaosLRdb "、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

私のPerlコードは

#!/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");

ここで私が見逃していることを知っていますか?

54
Priya

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'dした場合、行をトリミングするとこれが機能する可能性があります。 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ファイルのドキュメント を参照してください。

34
Gray

この行を変更できる場合:

Host    all        all         192.168.0.1/32        md5

これとともに:

Host    all        all         all                   md5

これで問題が解決するかどうかを確認できます。

しかし、別の考慮事項は、postgresql port(5432)がハッカーによるパスワード攻撃に対して非常に開かれていることです(おそらく、彼らはパスワードをブルートフォースすることができます)。 postgresqlのポート5432を「33333」または別の値に変更して、この構成を認識できないようにすることができます。

18

Postgresサーバーの構成は正しいようです


Host    all         all         127.0.0.1/32          md5
Host    all         all         192.168.0.1/32        trust

そのデータベースの特定のユーザーを作成して、これをテストします


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");
6
adam

この問題を解決するには、これを試すことができます。

まず、pg_hba.confを見つけて次のように記述します。

local all all md5

その後、pgサーバーを再起動します。

postgresql restart

または

Sudo /etc/init.d/postgresql restart
3
uma

ローカルデータベースに接続しようとして同様の問題を抱えている人向け
con = psycopg2.connect(database="my_db", user="my_name", password="admin")、追加のパラメーターを渡そうとすると、次のことが1日の節約になりました。
con = psycopg2.connect(database="my_db", user="my_name", password="admin", Host="localhost")

1
Yauhen

DBeaverでこのエラーが発生している場合、ソリューションは here 行で見つかりました:

@ lcustodioのSSLページで、SSLモードを設定します:SSLファクトリを空白のままにするか、org.postgresql.ssl.NonValidatingFactoryを使用します。

[ネットワーク]-> [SSL]タブで、[SLLを使用する]チェックボックスをオンにして、[アドバンス]-> [SSLモード] = [必須]に設定すると動作します。

1
Guy Lowe

以下のようなエラーが発生した場合:

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

次に、MACアドレスとともに次のようなエントリを追加します。

Host   all    all       [your ipv6]/128         md5
0
shiddu mageppa

ところで、私の場合は、独立したプロパティとしてではなく、URLにuser/pwdを指定する必要があり、それらは無視され、OSユーザーが接続に使用されました

私の設定はWebSphere 8.5.5 server.xmlファイルにあります

<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>

これは機能せず、エラーが発生していました:

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

pGHOST変数も確認してください。

ECHO $ PGHOST

ローカルマシン名と一致するかどうかを確認する

0
Lynx Kepler