IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Requête pour vérifier un mot de passe [11]


Sujet :

Requêtes PostgreSQL

  1. #1
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut Requête pour vérifier un mot de passe
    Bonjour à tous

    Je suis en train de développer une application IHM. A un certain moment j'offre à l'utilisateur la possibilité de changer son mot de passe de connexion à la bdd. Je lui donne donc un champ "ancien mot de passe" à saisir et deux champs "nouveau mot de passe". Ok je checke que les nouveaux mots de passe sont identiques et différents de l'ancien puis je checke que l'ancien mot de passe est bon puis je lance un alter role ... password ... pour modifier le mot de passe en bdd.

    Sauf que je ne sais pas comment faire l'étape "checker ancien mot de passe". Comment vérifier que le mot de passe entré est bien celui stocké dans pg_authid? En plus c'est l'IHM qui fait le check, IHM qui possède les droits de l'utilisateur lequel n'a pas le droit de lire pg_authid. Je pourrais tenter une nouvelle connexion avec ce mot de passe et checker si la connexion est/n'est pas acceptée mais d'une part je trouve ça lourd et d'autre part mon appli pourrait bien tourner dans des environnements qui ne nécessitent pas de mot de passe pour se connecter (methode "trust" dans pg_hba.conf).

    Voilà. Si quelqu'un sait comment monter cette requête...

    Merci à tous.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    En tentant une connexion avec le nom de l'utilisateur et son ancien mot de passe, avant la modification du mot de passe. Si la connexion fonctionne, c'est que le mot de passe est bon, sinon c'est qu'il n'est pas bon (dès lors que pg_hba.conf autorise bien la connexion de l'utilisateur en question à la base de données depuis le serveur d'application)...
    Parce que pour faire autrement, ça dépend du type de stockage des mots de passes sur le serveur PostgreSQL (MD5 ou SCRAM-SHA-256). Là, il faut hasher le mot de passe selon la même méthode et comparer au hash stocké dans PostgreSQL. Plus compliqué à mettre en œuvre.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ced Voir le message
    En tentant une connexion avec le nom de l'utilisateur et son ancien mot de passe, avant la modification du mot de passe. Si la connexion fonctionne, c'est que le mot de passe est bon, sinon c'est qu'il n'est pas bon (dès lors que pg_hba.conf autorise bien la connexion de l'utilisateur en question à la base de données depuis le serveur d'application)...
    Hé oui, c'était une idée que j'ai eue. Mais comme je l'ai dit, si mon appli est positionnée sur un serveur qui est en mode "trust" (et ça je ne maitrise pas), alors toute connexion sera acceptée même si pwd faux (j'ai déjà testé).

    Citation Envoyé par ced Voir le message
    Là, il faut hasher le mot de passe selon la même méthode et comparer au hash stocké dans PostgreSQL. Plus compliqué à mettre en œuvre.
    D'autant plus que je n'ai pas accès à pg_authid et pg_roles ne donne pas les mots de passe. Et il me semble que le hash, même s'il est md5, fait intervenir une espèce de graine permettant de rendre le hash plus ou moins aléatoire.

    Pour l'instant ma solution c'est quand l'utilisateur se connecte, je stocke le mot de passe qu'il saisit dans une variable spécifique de la fenêtre qui propose le changement. Ensuite quand il veut changer, je checke si le mot de passe qu'il saisit est le même que celui qui est enregistré. C'est pas très propre (il n'y a pas d'indépendance du module qui permet de changer le mot de passe et en POO on n'aime pas trop ça) mais je ne vois pas d'autre solution.
    C'est quand-même dommage qu'il n'y ait pas une requête/fonction toute faite permettant de dire "oui/non" mais je suppose que si elle existait, ce serait trop facile alors de créer des attaques brute force. Encore que ce genre d'attaque ne pourrait se faire que depuis une instance déjà connectée et la requête/fonction pourrait être verrouillée que pour l'utilisateur qui la lance ce qui limiterait le danger...

    Citation Envoyé par ced Voir le message
    ça dépend du type de stockage des mots de passes sur le serveur PostgreSQL (MD5 ou SCRAM-SHA-256)
    Ca se paramètre ça?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Hé oui, c'était une idée que j'ai eue. Mais comme je l'ai dit, si mon appli est positionnée sur un serveur qui est en mode "trust" (et ça je ne maitrise pas), alors toute connexion sera acceptée même si pwd faux (j'ai déjà testé).
    Le mode "trust", c'est mal . Il faut absolument l'éviter...
    Quoi qu'il en soit, l'authentification d'une connexion est la conjonction de 3 facteurs :
    1. l'adresse de l'hôte de connexion
    2. la base de donnée à laquelle on se connecter
    3. l'utilisateur qui se connecte

    Un serveur positionné en mode "trust", ça voudrait dire alors que vous autorisez la connexion de n'importe quel utilisateur depuis ce serveur en mode "trust". Déjà que pour l'utilisateur applicatif, c'est pas bien, mais pour l'ensemble des utilisateurs, c'est encore pire et encore plus déconseillé.
    Et donc, si vous mettez une vérification de mot de passe pour tout autre utilisateur que l'utilisateur applicatif (encore une fois, il faut le faire même pour l'utilisateur applicatif, et surtout pour celui-là), alors vous pouvez tester la connexion.

    Pour ce qui est de la configuration du mot de passe en MD5 ou en SCRAM-SHA-256, il faut, pour le second, être au moins en version 10. Ensuite, pour tous les comptes, c'est soit l'un, soit l'autre. Mais de mémoire, on ne peut pas faire cohabiter les deux...
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ced Voir le message
    Un serveur positionné en mode "trust", ça voudrait dire alors que vous autorisez la connexion de n'importe quel utilisateur depuis ce serveur en mode "trust". Déjà que pour l'utilisateur applicatif, c'est pas bien, mais pour l'ensemble des utilisateurs, c'est encore pire et encore plus déconseillé.
    Euh oui j'en ai bien conscience (je me suis un peu amusé avec pg_hba.conf pour regarder). Mais encore une fois, je ne suis pas maitre de l'endroit où sera installé mon appli. Moi je fournis l'appli et la bdd, c'est tout.

    Je vais quand-même aller poser la question/ouvrir un ticket sur le forum de l'équipe Postgres
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Bon, un mois après je reviens donner les conclusions de cette affaire.

    Je suis allé sur un forum dédié à Postgres et là j'ai eu ma réponse. Et en effet il n'y a pas moyen de checker un mot de passe par rapport au mot de passe stocké dans pg_authid.
    La solution qu'on m'a proposé est de créer dans ma bdd une table spécifique contenant les users et leurs mots de passe. Ce qui offre trois avantages
    • je peux maintenant vérifier le mot de passe de l'utilisateur quand il veut le changer
    • si en plus je rajoute des tables de gestion de droits d'accès, je peux alors supprimer les comptes de mes users dans Postgres et le remplacer par un compte dédié à l'application. C'est l'application qui se connecte à la bdd via son compte dédié puis l'user qui, en se connectant à l'application, n'aura que les droits que l'appli lui donne, droits lus dans ces tables de gestion. Et cela rend alors l'appli compatible avec un pooler de connexion (chose dont je ne m'étais pas préoccupé jusqu'alors)
    • l'utilisateur n'ayant pas de compte Postgres, ne pourra pas plugguer un linux portable sur le réseau et taper un psql ... pour entrer manuellement sur la bdd (chose qu'il est possible de faire actuellement)


    Bon ben voilà, pb résolu, merci à ced pour ses avis et conseils
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [LDAP] Requête pour vérifier le login et mot de passe
    Par NiGHtyWolf dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 10/03/2007, 22h44
  2. erreur 1045: Accès refusé pour l'utilisateur mot de passe : OUI
    Par antrax2013 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 31/05/2006, 17h03
  3. Pb pour récupérer des mots de passe
    Par m@thieu84 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 26/05/2006, 18h07
  4. Formulaire pour recuperer son mot de passe
    Par Jean73 dans le forum Langage
    Réponses: 4
    Dernier message: 28/03/2006, 12h30
  5. requêtes Multi Base avec Mot de Passe
    Par bohor2gannes dans le forum Access
    Réponses: 4
    Dernier message: 27/02/2006, 14h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo