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 25/11/2008 00:27:58

chaps31
Membre

Impossible de faire exécuter des requêtes SQL...

Lorsque je tape dans mon projet Xcode (Objective -C qui compile aussi le C):

PQsendQuery(conn,"CREATE USER nouvelUtilisateur PASSWORD 'sonMotdePasse'");

Rien ne se crée... Pourtant il retourne 1, la requête est bien passée (libpq est bien intégrée ien sûr)

Si je lance la requête SQL directement via pgAdmin III : CREATE USER nouvelUtilisateur PASSWORD 'sonMotdePasse'
Idem j'ai un message comme quoi la requête s'est bien déroulée mais pas de création d'utilisateur.. SOS qu'ai-je oublié ?

Merci.

PS : je vais rajouter SUPERUSER mais cela ne change pas grand chose au problème..

Hors ligne

#2 25/11/2008 00:35:00

gleu
Administrateur

Re : Impossible de faire exécuter des requêtes SQL...

Pour votre projet en Objective-C, aucune idée. Pour pgAdmin, si vous avez exécuté cette requête et que vous n'avez pas récupéré d'erreur, alors l'utilisateur est créé. Comment vérifiez-vous que l'utilisateur a bien été créé ? rappelez-vous qu'il faut rafraichir la liste des utilisateurs de pgAdmin vu que vous n'êtes pas passé par l'interface graphique.


Guillaume.

Hors ligne

#3 25/11/2008 11:53:14

chaps31
Membre

Re : Impossible de faire exécuter des requêtes SQL...

Merci, ça fonctionne. Mais je me retrouve face à 2 problèmes à nouveau (je débute avec postgres désolé).

- l'utilisateur postgres a visiblement un mot de passe et de toute manière j'en ai mis un pour le nouvel utilisateur, mais je peux me connecter via ses 2 utilisateurs sans spécifier le mot de passe... Comment est-ce possible ? Car bien sur je veux protéger ma base de données.

- Le problème initial venait de libpq et que la création de l'utilisateur n'était pas la seule requête, car je ne peux pas enchainer 2 PQsendQuery , j'ai un message d'erreur comme quoi une commande est déjà en cours, donc dans un seul PQsendQuery j'ai mis 2 requêtes séparée par un point virgule mais ça ne marche pas.... Comment enchainer plusieurs commandes ? Idéalement avec plusieurs fonctions de libpq enchainées pour rendre le code plus clair.

Encore merci de votre aide.

Hors ligne

#4 25/11/2008 13:00:52

gleu
Administrateur

Re : Impossible de faire exécuter des requêtes SQL...

Toute la partie configuration des accès/authentification est décrite sur http://docs.postgresqlfr.org/8.3/client … ation.html

Concernant PQsendQuery, tu peux enchaîner plusieurs requêtes à condition de toutes les séparer par un point-virgule (pas vrai pour certaines instructions à mon souvenir, CREATE DATABASE étant dans ce cas... c'est pour cela que pgAdmin exécute deux ensembles de requêtes).


Guillaume.

Hors ligne

#5 25/11/2008 19:16:29

chaps31
Membre

Re : Impossible de faire exécuter des requêtes SQL...

Là je sèche, tout fonctionne maintenant sauf que par défaut postgre ne tient pas compte des mots de passe, je cré un utilisateur avec mot de passe, je me connecte via ce user sans mot de passe, et ça marche...   
Une base avec un owner utilsateurX et l'utilisateur postgre par défaut y accède sans problème... J'ai beau lire la doc je ne comprends pas pourquoi il n'y a aucun contrôle d'accès, ni aux utilisateurs via leur mot de passe ni à la base...

SOS, je bloque complètement, je pensais que par défaut quand on cré un utilisateur avec mot de passe il faut le donner pour se logger sous cette utilisateur et si une base a un owner, par défaut sans avoir touché aux privilèges seul lui devrait pourvoir accéder à la base... Désolé mais vraiment je ne comprend pas , cela ne me parait pas logique.

Sinon tout fonctionne et à partir des appels de mon projet via libpq, impeccable, sauf cette absence de controle de la part du serveur...

Merci par avance du temps pris à me répondre.

Dernière modification par chaps31 (25/11/2008 19:18:29)

Hors ligne

#6 26/11/2008 10:58:22

gleu
Administrateur

Re : Impossible de faire exécuter des requêtes SQL...

As-tu lu la doc dont j'ai donné l'URL ?

Méthode d'authentification trust
Autorise la connexion sans condition. Cette méthode permet à quiconque peut se connecter au serveur de bases de données de s'enregistrer sous n'importe quel utilisateur PostgreSQL™ de son choix sans mot de passe. Voir la Section 21.2.1, « Authentification trust » pour les détails.

Dernière modification par gleu (26/11/2008 10:58:40)


Guillaume.

Hors ligne

#7 26/11/2008 12:50:24

chaps31
Membre

Re : Impossible de faire exécuter des requêtes SQL...

Merci pour ta réponse, oui j'ai parcouru la doc, mais je suis un peu largué, après réflexion, je pense comprendre que lors de son installation postgre est en trust pour pouvoir accéder la première fois via l'utilisateur par défaut postgres sans mot de passe. Mais je ne vois pas comment modifier cet état.

De plus comme l'utilisateur postgres a visiblement un mot de passe je pense qu'il faut que je le modifie avant de quitter "l'état" trust. Ai-je raison ?

Donc comment arrivé à modifier cet état ? Je retourne dans la doc...

Hors ligne

#8 26/11/2008 15:18:15

gleu
Administrateur

Re : Impossible de faire exécuter des requêtes SQL...

L'utilisateur postgres n'en a pas par défaut. Mais si l'authentification réclame un mot de passe, l'utilisateur doit obligatoirement avoir un mot de passe. Il faut donc ajouter un mot de passe. La commande ALTER USER est fait, entre autres, pour cela : http://docs.postgresqlfr.org/8.3/sql-alteruser.html

Ensuite, il faut changer l'authentification. md5 est généralement la méthode utilisée.


Guillaume.

Hors ligne

#9 27/11/2008 14:08:23

chaps31
Membre

Re : Impossible de faire exécuter des requêtes SQL...

Le soucis est que je ne vois pas comment changer les autorisations...

Je pensais que je créerais un utilisateur avec mot de passe une base de donnée avec comme propriétaire cet utilisateur, et que seul lui y aurait accès et bien sûr après son identification avec mot de passe, rine de plus logique. C'est incompréhensible que ça ne fonctionne pas comme cela... C'est pour ça que j'imagine que par défaut postgres est en trust, ou qu'il y a un réglage à faire que je ne connais pas...

J'ai beau lire la doc je ne vois pas, est-ce réellement normal que postgre par défaut ne tienne pas compte des mots de passe des propriétaires des bases... Pas très sécurisé... D'où la suspicion de mode trust actif mais je ne trouve pas comment vérifier cela ni comment le modifier...

SOS...

Dernière modification par chaps31 (27/11/2008 14:22:14)

Hors ligne

#10 27/11/2008 14:55:48

gleu
Administrateur

Re : Impossible de faire exécuter des requêtes SQL...

Il y a ce que fait PostgreSQL par défaut et ce que fait le package que tu installes.

Il faut que tu trouves le fichier pg_hba.conf dans ton système et que tu le modifies pour que PostgreSQL n'utilise pas trust mais md5 comme méthode d'authentification. Une fois modifié, il faut recharger la configuration de PostgreSQL. Tu peux aussi simplement relancer PostgreSQL, le résultat sera le même.


Guillaume.

Hors ligne

#11 27/11/2008 16:47:54

chaps31
Membre

Re : Impossible de faire exécuter des requêtes SQL...

Le seul que je trouve est pg_hba.conf.sample...  Il n'y a pas moyen d'accéder à ça via pgadmin3 ou ligne de commande ou encore mieux dans la bibliothèque libpq ?
Merci

Hors ligne

#12 27/11/2008 23:09:01

gleu
Administrateur

Re : Impossible de faire exécuter des requêtes SQL...

Les fichiers de configuration sont heureusement non modifiables à partir de la libpq.

pgAdmin3 te permet d'y accéder à condition d'avoir installé la bibliothèque nécessaire et exécuter le script d'install, ce qui me semble fort peu probable dans ton cas.

Pour en revenir au pg_hba.conf, tu l'as forcément. Je suppose que tu es sur Mac (Xcode est une bonne indication), tout dépend du package que tu as installé. Un moyen simple de le savoir est de se connecter au serveur (avec psql ou pgadmin) et de lancer la commande

show hba_file;

qui t'indiquera le chemin complet vers le fichier pg_hba.conf.


Guillaume.

Hors ligne

#13 01/12/2008 18:54:01

chaps31
Membre

Re : Impossible de faire exécuter des requêtes SQL...

Merci, ça avance, j'ai trouvé le fichier, j'ai pu l'ouvrir en modifiant ses permissions d'accès, en effet toutes les méthodes étaient en trust, j'ai tout modifié en md5, et... ça ne change rien... connection avec n'importe quel mot de passe...
Alors j'ai vérifié, mes utilisateurs n'ont pas de mot de passe lorsque je double clique sur leur nom... J'ai recréé dans pgadmin un utilisateur avec password='motdepasse', il apparait au rafraichissement dans la liste des roles de connection, mais si je double clique il n'a pas de mot de passe non plus.. J'en met un, je réouvre il n'en a pas ... Je ne comprends plus...

SOS... Comment garder les mots de passe ? Et pour le fichier pg_hba.conf je suis obligé de l'ouvrir manuellement pour le modifier ? Il n'y a pas de requête qui le fait ?

Hors ligne

#14 02/12/2008 00:33:04

gleu
Administrateur

Re : Impossible de faire exécuter des requêtes SQL...

Une fois le fichier pg_hba.conf modifié, il faut recharger la config au niveau du serveur. Il est aussi possible de simplement redémarrer le serveur.

Concernant pgAdmin, ce n'est pas que l'utilisateur n'en a pas, c'est que pgAdmin ne l'affiche pas. Donc les mots de passe sont bien conservés, mais ils ne sont pas affichés.

Enfin, toujours concernant pg_hba.conf, non, pas de requête possible pour le modifier.


Guillaume.

Hors ligne

Pied de page des forums