Projet

Général

Profil

Actions

Anomalie #347

fermé

Identifiants et mots de passe dans les URI des couches

Ajouté par Leslie Lemaire il y a plus de 3 ans. Mis à jour il y a plus de 3 ans.

Statut:
Fermé
Priorité:
Haut
Assigné à:
-
Version cible:
-
Début:
23/09/2020
Echéance:
% réalisé:

0%

Temps estimé:
# ref:

Description

Bonjour Alain,

Peut-être que tu es déjà en train d'améliorer ça, mais juste pour signaler le problème au cas où.

La manière dont tu construis la partie connexion des URI des couches fige leur forme sur soit "service" tout seul, soit "adresse + hôte + base + nom d'utilisateur".

lignes 384 à 388 et 521 à 525 d'asgard_menu_dialog (pourquoi deux fois, d'ailleurs ?) :

if self.uri.service() !='' :
    datasource_uri= 'vector:postgres:'+layername+':service='+self.uri.service()+end_datasource_uri
else:
    datasource_uri= 'vector:postgres:'+layername+':dbname='+self.uri.database()+' host='+ \
    self.uri.host()+' port='+self.uri.port()+' user='+self.uri.username()+end_datasource_uri

Or il existe toute une gamme d'autres formes de chaînes de connexion. En particulier, celles qui ne font pas apparaître le nom d'utilisateur et celles qui font apparaître le mot de passe (ce qu'on se gardera de recommander dans le cas général, mais ça ne paraît pas totalement illégitime pour consult.defaut). Dans l'état actuel des choses, avec ces deux formes, il est demandé à l'utilisateur de (re)saisir son mot de passe au moment où il tente de charger sa première couche via le menu. Et les URI enregistrées dans le projet QGIS n'ont pas la forme correspondant à la connexion de l'utilisateur.

Par exemple, si je me connecte avec le rôle postgres sur une connexion sans identifiant ni mot de passe enregistré, les URI des couches contiennent l'identifiant :

dbname='geobase_dev' host=localhost port=5432 user='postgres' sslmode=disable key='id' checkPrimaryKeyUnicity='1' table="c_foret_dfci"."table_1" sql=

C'est vraiment ennuyeux pour les projets QGIS partagés.

Pour les services de connexion, le problème est le même, voire pire, car le pg_service.conf ne contient pas nécessairement tous les paramètres. database, user, password et sslmode peuvent tout à fait être définis dans le paramétrage de la connexion QGIS.

La bonne chaîne de connexion à utiliser dans les URI des couches serait celle que contient uri après le bloc 166-193, alors que tu as déjà récupéré les paramètres stockés dans le fichier INI et pas encore demandé à l'utilisateur de s'authentifier. Il faudrait pouvoir stocker self.uri.connectionInfo() dans une autre variable à ce moment-là.

Mis à jour par alain ferraton il y a plus de 3 ans

  • Statut changé de Nouveau à Résolu

OK.
On mémorise les chaines de paramètres de 1ère utilisation de chaque connexion dans un dictionnaire
V0.1.3

Mis à jour par alain ferraton il y a plus de 3 ans

V 0.1.3 déposé sur Osmose...
A tester...merci des retours.

Mis à jour par Leslie Lemaire il y a plus de 3 ans

ça m'a l'air tout bon !

Mis à jour par alain ferraton il y a plus de 3 ans

  • Statut changé de Résolu à Fermé

super !
je ferme le ticket

Actions

Formats disponibles : Atom PDF