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

Delphi Discussion :

Saisie des données via DBEdit dans un champ varbinary(MAX) d'une table SQL server


Sujet :

Delphi

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 202
    Points : 108
    Points
    108
    Par défaut Saisie des données via DBEdit dans un champ varbinary(MAX) d'une table SQL server
    salut à tous,

    J'ai une table USER (Nom varchar(20), Prenom varchar(20), Mot_pass varbinary(MAX)). A partir de delphi, j'ai creee une fenetre de saisie pour remplir les trois champ. Apres avoir saisie les données dans le champ mot_pass qui est de type varbinary(MAX), j'ai un message d'error "Imposible d'acceder au champ mot_pass comme type text".

    Comment contourner ce problème?

    Merci pour votre soutien.

  2. #2
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Bonjour

    Par curiosité, pourquoi ce choix de type pour le champ en question ?

    Quel ensemble de composants est utilisé pour l'accès à la base de données ?
    si c'est FireDAC, peut-être qu'un remapping l'aiderait ? (ça peut se trouver au niveau du TFDConnection et de son assistant)

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 452
    Points : 24 860
    Points
    24 860
    Par défaut
    Effectivement, un mot de passe hashé par un SHA256 donne un binaire mais tu peux ensuite convertir ce binaire en hexa/base64 pour le stockage en base de donnée, les SELECT futur de comparaison d'un mdp avec son hash sera plus aisé ...
    Beaucoup de lib propose un Digest en Hexa issu du SHA256
    Evidemment, l'utilisateur saisi le mot de passe, double le champ de saisie pour une confirmation
    n'utilise pas de TDBEdit mais de TEdit (+ passwordChar), vérifie que le mot de passe est bon, complexe, puis effectue le hash et tu fais manuellement un INSERT/UPDATE du mot de passe en SQL bindé.

    Sinon, oui, tout le monde oublie la couche d'accès, ADO, SDAC, FD, ... il y en a tellement, des comportements variables surtout sur un sujet spécial comme un BLOB et un TBlobField

    Il n'y a aucune raison de lire le mpd !
    le mdp hashé est toujours utilisé dans un WHERE et ne pas oublier d'utiliser des Paramètres pour réduire le risque d'injection SQL.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 202
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par pprem Voir le message
    Bonjour

    Par curiosité, pourquoi ce choix de type pour le champ en question ?

    Quel ensemble de composants est utilisé pour l'accès à la base de données ?
    si c'est FireDAC, peut-être qu'un remapping l'aiderait ? (ça peut se trouver au niveau du TFDConnection et de son assistant)
    Par curiosité, pourquoi ce choix de type pour le champ en question ? pour que le mot de passe ne soit pas lisible à partir de la base.

    Quel ensemble de composants est utilisé pour l'accès à la base de données ? TADOconnection

  5. #5
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 202
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Effectivement, un mot de passe hashé par un SHA256 donne un binaire mais tu peux ensuite convertir ce binaire en hexa/base64 pour le stockage en base de donnée, les SELECT futur de comparaison d'un mdp avec son hash sera plus aisé ...
    Beaucoup de lib propose un Digest en Hexa issu du SHA256
    Evidemment, l'utilisateur saisi le mot de passe, double le champ de saisie pour une confirmation
    n'utilise pas de TDBEdit mais de TEdit (+ passwordChar), vérifie que le mot de passe est bon, complexe, puis effectue le hash et tu fais manuellement un INSERT/UPDATE du mot de passe en SQL bindé.

    Sinon, oui, tout le monde oublie la couche d'accès, ADO, SDAC, FD, ... il y en a tellement, des comportements variables surtout sur un sujet spécial comme un BLOB et un TBlobField

    Il n'y a aucune raison de lire le mpd !
    le mdp hashé est toujours utilisé dans un WHERE et ne pas oublier d'utiliser des Paramètres pour réduire le risque d'injection SQL.
    Evidemment, l'utilisateur saisi le mot de passe, double le champ de saisie pour une confirmation
    n'utilise pas de TDBEdit mais de TEdit (+ passwordChar), vérifie que le mot de passe est bon: Je crois que ça marche bien avec le TEdit1.

    Merci à vous tous.

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

Discussions similaires

  1. Réponses: 21
    Dernier message: 12/07/2021, 11h43
  2. Réponses: 2
    Dernier message: 20/01/2016, 09h55
  3. Réponses: 1
    Dernier message: 26/12/2013, 11h46
  4. [AC-2007] Saisie des données via un formulaire
    Par Abed_H dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 27/03/2010, 09h57
  5. Réponses: 5
    Dernier message: 17/01/2007, 15h02

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