PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Général » Connexion distante à PostgresSQL 9.6 sur Centos 6 (VPS Vultr) » 17/10/2016 12:06:21

Je confirme que cela fonctionne.
Ne me reste plus qu'à sécuriser davantage avec un filtrage sur l'adresse IP.

#2 Re : Général » Connexion distante à PostgresSQL 9.6 sur Centos 6 (VPS Vultr) » 17/10/2016 12:02:10

Aha !

Voici la commande magique "service iptables save", qui permet alors de sauver la commande nouvellement appliquée dans le fichier /etc/sysconfig/iptables.
Suivie d'un "service iptables restart", la bouille du fichier iptables est nettement plus sympa:

[root@alp01 pgsql-9.6]# iptables -L -n -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:5432
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
(...)

@rjuju: Nos messages ce sont croisés.
C'est le message de TrevorH de ce fil qui m'a débloqué https://www.centos.org/forums/viewtopic.php?t=27145
mais vous avez vu tout juste avec le "service iptables save".
Encore merci !

#3 Re : Général » Connexion distante à PostgresSQL 9.6 sur Centos 6 (VPS Vultr) » 17/10/2016 11:45:47

Si une règle correspond elle est appliquée et ça s'arrête là, sinon ça continue avec la règle suivante.

Merci pour cet éclairage utile.


il n'y a d'ailleurs aucune trace de vos règles sur le port 5432

Effectivement. Cela m'étonne ...


Pouvez-vous plutôt renvoyer le résultat de la commande « iptables -L -n -v »

Avec plaisir. Voici donc la version verbeuse :

[snoopy@serveur01 ~]$ iptables -L -n -v
iptables v1.4.7: can't initialize iptables table `filter': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.
sudo su
[root@serveur01 snoopy]# iptables -L -n -v                                                                                                                         Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
  454 29734 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
 114K   15M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
  134  9770 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
 8634  518K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
 6259  332K REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 160K packets, 27M bytes)
 pkts bytes target     prot opt in     out     source               destination

Toujours pas de trace du port 5432.


Vous êtes sûr que la base postgres est bien disponible si vous coupez iptables ?

Oui, aussitôt que j'entre "service iptables stop", j'arrive à accéder à la base "pluto" (pour reprendre mon exemple) ainsi qu'à la base "postgres" via pgAdmin III.

J'ai encore tenté ceci :

iptables -I INPUT 1 -p tcp --dport 5432 -j ACCEPT

ainsi que suggéré dans la réponse plébiscitée ici : http://serverfault.com/questions/556545 … ct-to-port
Ceci aussi bien avec iptables activé qu'avec iptables désactivé par un "service iptables stop".
Puis j'ai appliqué un "service iptables start/restart".
La règle ne semble pas être appliquée, car il n'y a aucun effet sur le résultat de "iptables -L -n -v".

#4 Re : Général » Connexion distante à PostgresSQL 9.6 sur Centos 6 (VPS Vultr) » 16/10/2016 21:13:44

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Bizarre cette instruction REJECT qui vient à la fin de la CHAIN INPUT ; j'imagine qu'il faut
- soit la supprimer
- soit inverser l'ordre des instructions ACCEPT / REJECT en mettant REJECT au début puis en créant ensuite des exceptions avec ACCEPT.

C'est bien cela ?
Merci.

#5 Re : Général » Connexion distante à PostgresSQL 9.6 sur Centos 6 (VPS Vultr) » 14/10/2016 22:58:02

Merci beaucoup !

Désactiver le pare-feu rend effectivement possible l'accès distant à la base de données:

service iptables save
service iptables stop

J'essaie à présent de trouver la combinaison du pare-feu qui va permettre la connexion.
Idéalement, j'aimerais imposer une connexion SSH, mais je compte commencer par les choses "simples" avec une connexion classique sur le port 5432.

J'ai donc essayé de rajouter cette ligne dans pg_hba.conf afin d'assouplir temporairement les règles et qu'il n'y ait pas de filtrage sur l'IP:

host    all    all    0.0.0.0/0    md5

.

Je me suis également inspiré de la section consacrée à PostgreSQL du didacticiel "Iptables Essentials: Common Firewall Rules and Commands" :
https://www.digitalocean.com/community/ … postgresql
mais en n'imposant pas l'interface eth1 :

iptables -A INPUT -p tcp -m conntrack  --ctstate NEW,ESTABLISHED -p tcp -dport 5432 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

(Note: Je vois que cet exemple utilise conntrack et devrai éclaircir cela.)

puis j'ai redémarré les services iptables et postgresql :

service iptables start
service postgresql-9.6

Hélas pare-feu bloque toujours la connexion.

Des idées pour aller de l'avant ?
Merci.

#6 Général » Connexion distante à PostgresSQL 9.6 sur Centos 6 (VPS Vultr) » 14/10/2016 21:06:26

hypn0s
Réponses : 9

Bonjour,


J'ai pris un serveur virtuel (VPS) chez Vultr.com avec l'objectif de pouvoir accéder à ma base PostgreSQL depuis mon ordinateur avec pgAdmin, car c'est plus confortable qu'avec phpPgAdmin.


Chez Vultr, j'ai donc l'utilisateur "root" pour le serveur, auquel j'accède en SSH avec Putty.
J'ai ensuite créé un utilisateur Linux que l'on appellera "snoopy" avec un mot de passe.
Cet utilisateur a été inscrit dans le groupe "wheel" et comme super-administrateur dans le fichier des "sudoers". Il peut donc passer des commandes "sudo".


L'installation de PostgreSQL a été réalisée autant que possible avec des commandes "sudo" passées par l'utilisateur "snoopy".
Via Putty, psql fonctionne et j'ai pu créer un utilisateur PostgreSQL, que nous appellerons "pluto" une base du même nom:

CREATE USER pluto;
  ALTER USER pluto CREATEDB;
  CREATE DATABASE "pluto" OWNER pluto;
  GRANT ALL PRIVILEGES ON DATABASE "pluto" to pluto;

J'ai également donné sur cette base tous les privilèges à l'utilisateur "snoopy" :

CREATE USER snoopy;
  GRANT ALL PRIVILEGES ON DATABASE "pluto" to snoopy;

J'ai donné aux utilisateurs des mots de passe chiffrés par md5 en passant par la base template1 :

ALTER USER pluto with encrypted password 'le_mot_de_passe_de_pluto';
ALTER USER snoopy with encrypted password 'le mot_de_passe_de_snoopy';

J'ai édité le fichier postgresql.conf pour écouter sur toutes les adresses, devant toutefois passer par l'utilisateur "root" pour cela:

sudo su
cd /var/lib/pgsql/9.6/data/
nano postgresql.conf
  listen_adresses='*';
  port = 5432

Ctrl+X et Yes pour sauver.


et j'ai édité le fichier pg_hba.conf, également avec l'utilisateur "root" :

nano pg_hba.conf
  #IPv4 local connections:
  host    all    all    127.0.0.1/32 md5
  host    all    all    123.124.125.126/32  md5
  # L'adresse IP de la ligne précédente correspond à l'adresse IP publique de mon ordinateur , mais l'exemple est bien sûr fictif.

Ctrl+X et Yes pour sauver.


En tant que "root", j'ai également ouvert le port 5432 dans le pare-feu (enfin, je crois que ça le fait):

sudo su
cd /sbin
iptables -A INPUT -p tcp -m state --state NEW -m tcp -dport 5432 -j ACCEPT

Et j'ai bien sûr redémarré les services :

service iptables restart
service postgresql-9.6 restart

(Les deux retournent "OK".)

L'appel de la commande "hostname" retourne bien le nom de mon serveur :

hostname
  chien01

Alors voilà, je caressais le rêve que le serveur PostgreSQL réponde aux commandes passées depuis mon ordinateur et j'entre donc dans la ligne de commande de Window :

cd "C:\Program Files\PostgreSQL\9.5\bin"
psql -h 111.112.113.114 -U pluto -p 5432 -d pluto -W

J'entre alors le mot de passe PostgreSQL de l'utilisateur "pluto" et le message suivant m'est retourné :

psql n'a pas pu se connecter au serveur : Connexion timed out ( blabla / blabla )
  Le serveur est-il actif sur l'hôte <ici l'IP de mon instance VPS chez VULTR> et accepte-il les connexions TCP/IP sur le port 5432 ?


Le problème ne semble donc pas au niveau des identifiants mais bien de l'accès au serveur.


Où le problème peut-il bien se situer ?
Faut-il que j'ouvre des ports sur mon routeur ?


J'ai déjà essayé ceci sans succès:
- entrer dans la ligne de commande le mot de passe normal (non chiffré md5)
- entrer dans la ligne de commande le mot de passe chiffré md5
- me connecter avec l'utilisateur snoopy au lieu de pluto


Quelque chose m'échappe, mais quoi ?


Merci pour votre aide.

#7 Re : Migration » Deux répertoires "data" : marche à suivre accéder aux deux bases ? » 14/10/2016 19:46:29

Merci beaucoup, Guillaume et pardon pour ma réponse tardive.
Comme j'avais oublié à peu près tous les mots de passe, j'ai finalement choisi de passer par une réinstallation complète du logiciel utilisant PostgresSQL.

#8 Migration » Deux répertoires "data" : marche à suivre accéder aux deux bases ? » 25/09/2016 18:47:37

hypn0s
Réponses : 2

Bonjour à tous,


Je suis face à la situation suivante :


1. une installation standard de PostgreSQL 9.5 sous Windows (contenant un inventaire créé avec le logiciel OpenConcerto)
    Les données de la base se trouvent dans C:\Windows\Programmes\PostgreSQL\9.5\data
    Cette installation de PostgreSQL comprend le serveur, ainsi que pgAdmin III.


2. un dossier "pgdata" situé ailleurs, résultant d'un copier-coller depuis un précédent ordinateur.
    Ce dossier contient une autre base de données, probablement sous PostgreSQL 8.3.


Avec MySQL, la situation est assez simple: chaque base est facilement identifiable par son nom et il suffit de copier quelques fichiers.


Avec PostgreSQL, je suis un peu perdu à ce niveau, car le dossier "data" contient une multitude de sous-dossiers, dont "base".
Ce dernier contient des sous-dossiers nommés par des numéros, mais impossible de dire qui est qui.
Je remarque seulement qu'il y a chaque fois un dossier "1" que je suppose être lié au fonctionnement de PostgreSQL (p.ex. une liste des bases).


Si les versions utilisées étaient les mêmes, suffirait-il de déplacer ces dossiers à l'exception du dossier "1" depuis "pgdata/base" vers "data/base" ?


Est-ce que cela pourrait aussi marcher si la nouvelle version est la 9.5 et l'ancienne une 8.x ou faut-il impérativement que je procède à un dumpall depuis l'ancien ordinateur?


Dans la variable d'environnement PGDATA, les emplacements des deux dossiers "data" sont mentionnés, mais cela ne suffit pas pour que pgAdmin III voie la base située dans le dossier "pgdata". (Il voit par contre bien celle du dossier C:\...\9.5\data).


Merci à qui saura éclairer ma lanterne.

#9 Re : Migration » Migration PostgreSQL 8.3.14 : locale French_Switzerland.UTF8 inconnue » 10/12/2012 18:40:33

Merci. Je pense que oui.
En fait, j'ai une installation de xampplite où PostgreSQL a été rajouté par compilation. J'ai donc un dossier xampplite\pgsql. Dans le php.ini, j'ai ces deux extensions activées:
extension=php_pdo_pgsql.dll
; et
extension=php_pgsql.dll

Dans la section [PostgresSQL] du php.ini, toutes les options sont par contre en commentaires (précédées du ";").

#10 Re : Migration » Migration PostgreSQL 8.3.14 : locale French_Switzerland.UTF8 inconnue » 10/12/2012 15:06:27

Rien. Ou plus exactement, je ne vois rien. Il y a peut-être un log PostgreSQL mais où ?

En fait, il semble que PHP n'est tout simplement pas parvenu à connecter la base, car dans les logs d'erreur d'Apache, je trouve ceci :

PHP Warning:  PHP Startup: Unable to load dynamic library '\\xampplite\\php\\ext\\php_pgsql.dll' - Cette application n'a pas pu démarrer car la configuration de l'application est incorrecte. Réinstaller l'application pourrait résoudre ce problème.\r\n in Unknown on line 0

Par contre, je ne me souviens pas d'avoir vu des erreurs au lancement avec "pg_ctl start" et par ailleurs pgAdmin III accède à la base sans problème.

#11 Re : PL/pgSQL » detection des relations spatiales » 07/12/2012 14:21:28

Bonjour,

Avez-vous vous regardé du côté de PostGIS ?
Sauf erreur, ça fait tout cela et c'est basé sur PostgreSQL.
Selon vos besoins, cela pourrait peut-être résoudre votre problème.

Voir notamment cette très bonne documentation : http://www.davidgis.fr/documentation/wi … index.html

Par contre, si vous prévoyez d'utiliser PostGIS sur un hébergement web, il vous faudra soit que celui-ci ait PostGIS préinstallé (ça existe mais ne court pas les rues) soit que vous preniez un serveur dédié afin de pouvoir compiler PostGIS.

Au-dessus de PostGIS vous avez également des surcouches comme CartoWeb par exemple pour une architecture cartographique de type client-serveur, mais expérience faite c'est assez galère au niveau de la gestion des dépendances. Pas évident de trouver les versions des librairies qui fonctionnent ensemble.

#12 Re : C et C++ » [RESOLU] Enregistrement d'une image dans une base pg » 07/12/2012 13:46:13

Bonjour Nouri,

Je n'ai pas testé votre requête, mais voici ce que je vérifierais en premier:

1) Le fichier signalé comme manquant existe-t-il bien et avec la même extension ?
    (Je veux dire, il porte bien l'extension ".JPG" et non ".JPEG" ?

2) Essayez de mettre "C:\" à la place de "c:/" ?
    Les slash "/" sont utilisés pour les chemins sous Unix/Linux et les "\" antislash par pour les chemins sous Windows.
    Bien que les logiciels conçus sur Unix / Linux acceptent souvent sous Windows les chemins à la sauce Unix/Linux,   j'essaierais quand même d'écrire le chemin à la sauce Windows pour voir.

3) Windows est insensible à la casse, mais comme PostgreSQL vient plutôt du monde Unix/Linux, essayez de respecter strictement la casse des caractères de vos chemins et noms de fichiers, c'est-à-dire les majuscules et minuscules. Par exemple "C:" au lieu de "c:". Ceci ne résoudra peut-être pas votre problème, mais au moins vous éliminez une cause d'erreur possible.

Je pars toujours du principe que les ordis sont des machines pénibles et qu'il faut les caresser dans le sens du poil...
En éliminant tout ce qui pourrait potentiellement poser problème, vous gagnez quelques certitudes qui vous aident ensuite à traquer les bugs.

#13 Re : Migration » Migration PostgreSQL 8.3.14 : locale French_Switzerland.UTF8 inconnue » 07/12/2012 13:31:20

Merci d'avoir répondu si rapidement et pour vos conseils.

Si vous migrez le serveur complet vers la même version de PostgreSQL, pourquoi ne pas tout simplement copier les fichers ? (après avoir arrêté le serveur bien sûr).

J'ai essayé de migrer mon site par "copier-coller" comme vous le suggérez. Une partie de mon site repose sur MySQL et l'autre sur PostgreSQL. Après ce copier-coller, la partie utilisant MySQL fonctionne mais pas celle utilisant PostgreSQL.

Les dossiers d'installation (y.c. chemin complet) sont les mêmes des deux côtés, y.c. pour le répertoire de PostgreSQL et celui des données.

Les variables d'environnement PGDATA, PGPORT et PATH sont également initialisées avec les mêmes chemins des deux côtés.

J'ai comparé les fichiers "http.conf" et "php.ini" avec un éditeur de code qui me signale les différences et il ne semble pas y en avoir.
Les fichiers .htaccess sont également identiques.

Mais sur le serveur de destination rien ne s'affiche.
Le code source est vide et un validateur HTML me signale l'erreur "end of document in prolog".

Avec PgAdmin III, j'arrive pourtant à voir les rôles et les tables. Tout semble correct à ce niveau.
J'imagine avoir oublié de contrôler quelque chose au niveau de la configuration du serveur, mais qu'est-ce que ça pourrait donc être?

#14 Migration » Migration PostgreSQL 8.3.14 : locale French_Switzerland.UTF8 inconnue » 02/12/2012 23:13:26

hypn0s
Réponses : 6

Bonjour,

J'essaie de migrer une base PostgreSQL (version 8.3.14) d'un ordi vers un autre, les deux étant sous XP Pro.

J'ai compris que je dois utiliser pg_dump et pg_restore, mais ce n'est pas très clair pour moi dans quel ordre doit se faire la migration, notamment quant à la création des rôles. Est-ce que ça se fait avant ou après le pg_dump / pg_restore ou est-ce que les rôles sont transférés avec ?

Dans un premier temps j'ai compilé PostgreSQL sur la nouvelle machine, avec les commandes configure, make et make install. Lors de l'étape "configure", l'option --enable-nls="fr de" a été activée.
Après l'installation, les variables d'environnement PATH, PGDATA, PGPORT ont été établies.

A présent, j'essaie de créer le cluster. A l'époque j'avais noté ces 3 commandes :

1) initdb -E=UTF8 --locale=French_Switzerland.UTF8 -U=MonDbSuperUtilisateur -w

2) pg_ctl -U=postgres start

3) CREATE ROLE w36710 WITH CREATEDB CREATEROLE NOLOGIN CONNECTION LIMIT=10 PASSWORD=monMotDePasse ENCRYPTED

La commande initdb fonctionne, mais la locale est automatiquement basculée sur French_Switzeland.1252 (Le "codepage" de Windows.) Or j'aimerais vraiment utiliser UTF8.

A l'époque, je pense que j'avais trouvé comment avoir cette locale French_Switzerland.UTF8, mais je ne parviens plus à trouver une liste des locales acceptées et comment éventuellement en rajouter.

Par ailleurs, la bonne approche est-elle de créer le cluster avec initdb, puis écraser ce qui a été fait avec pg_restore?

Ou faut-il plutôt utiliser pg_dump / pg_restore avec l'option "-C" ?

Merci beaucoup.

Pied de page des forums

Propulsé par FluxBB