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");
ここで私が見逃していることを知っていますか?
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ファイルのドキュメント を参照してください。
この行を変更できる場合:
Host all all 192.168.0.1/32 md5
これとともに:
Host all all all md5
これで問題が解決するかどうかを確認できます。
しかし、別の考慮事項は、postgresql port(5432)がハッカーによるパスワード攻撃に対して非常に開かれていることです(おそらく、彼らはパスワードをブルートフォースすることができます)。 postgresqlのポート5432を「33333」または別の値に変更して、この構成を認識できないようにすることができます。
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");
この問題を解決するには、これを試すことができます。
まず、pg_hba.confを見つけて次のように記述します。
local all all md5
その後、pgサーバーを再起動します。
postgresql restart
または
Sudo /etc/init.d/postgresql restart
ローカルデータベースに接続しようとして同様の問題を抱えている人向け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")
DBeaverでこのエラーが発生している場合、ソリューションは here 行で見つかりました:
@ lcustodioのSSLページで、SSLモードを設定します:SSLファクトリを空白のままにするか、org.postgresql.ssl.NonValidatingFactoryを使用します。
[ネットワーク]-> [SSL]タブで、[SLLを使用する]チェックボックスをオンにして、[アドバンス]-> [SSLモード] = [必須]に設定すると動作します。
以下のようなエラーが発生した場合:
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
ところで、私の場合は、独立したプロパティとしてではなく、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&password=secret"/>
</dataSource>
これは機能せず、エラーが発生していました:
<properties
user="fred"
password="secret"
url="jdbc:postgresql://server:port/mydb"/>
pGHOST変数も確認してください。
ECHO $ PGHOST
ローカルマシン名と一致するかどうかを確認する