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

Langage SQL Discussion :

Tester l'existence d'une valeur et récupérer les valeurs correspondantes


Sujet :

Langage SQL

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 604
    Points : 206
    Points
    206
    Par défaut Tester l'existence d'une valeur et récupérer les valeurs correspondantes
    J'ai un table users. Je voudrais savoir comment tester si un user exite et récupérer si c'est le cas son pwd. J'ai pensé à utilisé les conditions if, else mais je suppose qu'on peut le faire avec une commande sql.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    user pwd
    a      0123
    b      9874
    Pour trouver qu'un user existe je fais ca mais après je ne vois pas trop comment faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT 1 FROM users Where user="a"

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'Etude Mainframe/AS400
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1 765
    Points : 10 748
    Points
    10 748
    Par défaut
    Tu peux faire un truc "basique" du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select coalesce(PSWD, "NON TROUVE") from users Where user='XXXXXXX'
    Tu auras le PSWD s'il y en a un sinon tu as "NON TROUVE".

  3. #3
    Membre confirmé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Points : 601
    Points
    601
    Par défaut
    Bonjour,

    globalement, récupérer le mot de passe d'un utilisateur n'est pas une bonne pratique. Le mot de passe stocké en base doit être hashé et ne doit plus avoir de valeur qu'en temps que comparaison avec un mot de passe hashé.

    Du coup, on aurait une table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    userId password_hash
    a        0x0E7AAB0B4FF0FD2DFB4F0233E2EE7A26CD08F173  
    b        0xF643A82F948DEFB922B12E50B950CEE130A934D6
    et on passe la commande (j'ai mis SHA1, mais ça peut être un autre algo)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select 1 from users where userId = 'a' and password_hash = HASHBYTES('SHA1', 'motdepasse')
    Si une ligne est renvoyée, le couple user/password existe et le user peut se connecter.
    Si aucune ligne n'est renvoyée, le user ne peut pas se connecter.

    note que tu peux en profiter pour remonter des informations pertinentes pour le user en lieu du "select 1".

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 604
    Points : 206
    Points
    206
    Par défaut
    Bonjour,
    merci de vos aides

    (j'avais pensé aux méthodes de hashage comme la méthode hash and salt, mais je ne savais pas qu'on pouvait le faire directement dans la requête ^^)

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Monstros Velu Voir le message
    Bonjour,

    globalement, récupérer le mot de passe d'un utilisateur n'est pas une bonne pratique. Le mot de passe stocké en base doit être hashé
    Non, ça c'est une grosse connerie. Le mot de passe doit être stocké tel quel sous forme chiffré. Il existe des bases données assez stupide pour proposer de ne stocker que le hash (un MD5 en général) ce qui permet de casser l'accès en peu de temps). Exemple PostgreSQL !
    https://paquier.xyz/postgresql-2/pos...uthentication/
    Documentation de PG : "Also, the MD5 hash algorithm is nowadays no longer considered secure against determined attacks"
    https://www.postgresql.org/docs/11/auth-password.html
    De plus le chiffrement doit être salé, sinon une attaque par analyse fréquentielle est possible !
    Dans les bons SGBDR (Oracle, SQL Server…) les mots de passe ont toujours été chiffrés. Aucun hash n'était stocké ni exposé….

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Membre confirmé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Points : 601
    Points
    601
    Par défaut
    Bonjour,

    je suis d'accord pour dire que ma réponse était trop rapide et qu'il faut utiliser un algorithme approprié et saler avec une valeur différente pour chaque mot de passe.
    Par contre, à mon avis, le mot de passe ne doit pas être simplement chiffré, et je trouve même que c'est inquiétant qu'il puisse l'être, car chiffrer le mot de passe permet au propriétaire de la base de donnée de le déchiffrer...

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    Si tu es sur certains SGBDR comme PostgreSQL oui; Si tu es sur Oracle ou SQL Server non !!!!! Le propriétaire d'une base ne doit pas pouvoir ouvrir une clef de chiffrement. D'autant plus s'il utilise un HSM ce que PG ne permets pas :
    https://fr.wikipedia.org/wiki/Hardware_Security_Module

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    Effectivement il est déconseillé de récupérer un password déjà en bdd, surtout que celui ci doit être chiffré, mais si tu veut voici la requette que je ferrai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT champsPassword FROM TableUser WHERE champsNomUser = $user
    champsPassword = le champs password
    TableUser = La table
    champsNomUser = le champs nom de l'utilisateur
    $user = le nom que tu récupérè de ton formulaire

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/01/2016, 10h42
  2. tester l'existence d'une valeur dans un tableau
    Par aymench1985 dans le forum MATLAB
    Réponses: 6
    Dernier message: 16/04/2015, 02h09
  3. tester l'existence d'une sous chaine + test de valeur numérique
    Par amad206 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 18/10/2010, 10h04
  4. Tester l'existence d'une valeur
    Par Tsatogua dans le forum VBA Access
    Réponses: 4
    Dernier message: 06/10/2009, 11h50
  5. [ADO] Tester l'existence d'une table
    Par nd25 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 05/09/2002, 13h55

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