Je reçois une erreur suivante lorsque j'essaie de me connecter à l'aide de DBI
DBI connect ('database = chaosLRdb; Host = 192.168.0.1; port = 5433', 'postgres', ...) A échoué: FATAL: aucune entrée de pg_hba.conf pour l'hôte "192.168.0.1", utilisateur "postgres", base de données "chaosLRdb", SSL désactivé
Voici mon fichier 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
Mon code Perl est
#!/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");
Puis-je savoir ce qui me manque ici?
Dans votre fichier pg_hba.conf, je vois des lignes incorrectes et déroutantes:
# 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
Je soupçonne que si vous avez md5 le mot de passe, cela pourrait fonctionner si vous coupez les lignes. Pour obtenir le md5, vous pouvez utiliser Perl ou le script shell suivant:
echo -n 'chaos123' | md5sum
> d6766c33ba6cf0bb249b37151b068f10 -
Alors, votre ligne de connexion aimerait quelque chose comme:
my $dbh = DBI->connect("DBI:PgPP:database=chaosLRdb;Host=192.168.0.1;port=5433",
"chaosuser", "d6766c33ba6cf0bb249b37151b068f10");
Pour plus d'informations, voici la documentation du fichier pg_hba.conf de postgres 8.X .
Si vous pouvez changer cette ligne:
Host all all 192.168.0.1/32 md5
Avec ça:
Host all all all md5
Vous pouvez voir si cela résout le problème.
Mais une autre considération est que votre port postgresql (5432) est très ouvert aux attaques par mot de passe avec des pirates (peut-être qu’ils peuvent forcer le mot de passe de force) Vous pouvez modifier votre port 5432 postgresql en "33333" ou une autre valeur, afin qu'ils ne puissent pas connaître cette configuration.
Votre configuration de serveur postgres semble correcte
Cela devrait permettre l’accès du client au serveur postgres. Cela me porte donc à croire que le nom d'utilisateur/mot de passe est en train d'échouer.
Host all all 127.0.0.1/32 md5
Host all all 192.168.0.1/32 trust
Testez-le en créant un utilisateur spécifique pour cette base de données
createuser -a -d -W -U postgres chaosuser
Puis ajustez votre script Perl pour utiliser le nouvel utilisateur créé
my $dbh = DBI->connect("DBI:PgPP:database=chaosLRdb;Host=192.168.0.1;port=5433", "chaosuser", "chaos123");
Pour résoudre ce problème, vous pouvez essayer ceci.
vous devez d’abord trouver votre pg_hba.conf et écrire:
local all all md5
après ce redémarrage pg serveur:
postgresql restart
ou
Sudo /etc/init.d/postgresql restart
Si vous obtenez une erreur comme celle ci-dessous:
OperationalError: FATAL: no pg_hba.conf entry for Host "your ipv6",
user "username", database "postgres", SSL off
puis ajoutez une entrée comme celle-ci, avec votre adresse mac.
Host all all [your ipv6]/128 md5
BTW, dans mon cas, c’était que je devais spécifier l’utilisateur/pwd dans l’URL, et non comme propriétés indépendantes, elles étaient ignorées et mon utilisateur de système d’exploitation était utilisé pour se connecter
Ma configuration est dans un fichier server.xml WebSphere 8.5.5
<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>
Cela ne fonctionnerait pas et recevait l'erreur:
<properties
user="fred"
password="secret"
url="jdbc:postgresql://server:port/mydb"/>
vérifiez également la variable PGHOST:
ECHO $ PGHOST
pour voir s'il correspond au nom de la machine locale
Pour ceux qui rencontrent cette erreur dans DBeaver, la solution a été trouvée ici à la ligne:
@lcustodio sur la page SSL, définissez le mode SSL: obligatoire et laissez la fabrique SSL vide ou utilisez org.postgresql.ssl.NonValidatingFactory
Sous Réseau -> onglet SSL, j'ai coché la case Utiliser SLL et défini l'option Avance -> SSL Mode = require et cela fonctionne maintenant.