Anomalie #347
ferméIdentifiants et mots de passe dans les URI des couches
0%
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 alain ferraton il y a plus de 3 ans
- Statut changé de Résolu à Fermé
super !
je ferme le ticket