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

VB.NET Discussion :

VB .NET et SQL server 2008 R2 [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2011
    Messages : 43
    Par défaut VB .NET et SQL server 2008 R2
    Bonjour,

    Je rencontre un problème avec mes données stockées avec SQL Server. Lorsque je récupère mes données dans la base de données, il y a des espaces apparus dans mes champs. exemple : démo réelle
    au lieu de :démo réelle.

    Est ce que mon problème peut venir de mon type de champs dans la base (nchar 15) ou bien de ma requète SQL d'insertion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     req = " insert into T_UTILISATEUR (Login, Password, Nom, Prenom)" _
                & "values ( '" & TxtLogin.Text & "' , '" & TxtMdp.Text & "' , '" & TxtNom.Text & "' , '" & TxtPrenom.Text & "' )"
    Merci d'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par julien_33 Voir le message
    Est ce que mon problème peut venir de mon type de champs dans la base (nchar 15)
    A priori c'est pour ça, oui. Le type nchar est de longueur fixe, les valeurs plus courtes sont complétées avec des espaces il me semble... Utilise nvarchar à la place.

    Citation Envoyé par julien_33 Voir le message
    ou bien de ma requète SQL d'insertion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     req = " insert into T_UTILISATEUR (Login, Password, Nom, Prenom)" _
                & "values ( '" & TxtLogin.Text & "' , '" & TxtMdp.Text & "' , '" & TxtNom.Text & "' , '" & TxtPrenom.Text & "' )"
    A priori ça ne vient pas de là, mais il faut absolument que tu changes ça... essaie de créer un utlisateur qui s'appelle "O'Hara" par exemple, et tu comprendras pourquoi. Là encore ce serait pas trop grave (juste une erreur sans conséquence), mais si l'utilisateur a la bonne idée de se prénommer Robert'); DROP TABLE T_UTILISATEUR; --, tu vas commencer à avoir de sérieux problèmes

    Pour éviter les problèmes d'injection SQL, utilise des requêtes paramétrées. c'est un peu plus long à écrire, mais c'est pas compliqué et c'est infiniment plus sûr. Sans compter que ça t'épargne aussi les problèmes avec les nombres et les dates, dont le format dépend de la culture courante...

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2011
    Messages : 43
    Par défaut
    Bonsoir Tomlev,

    Merci pour ta réponse, je vais essayé ça et te tiens au courant.

    Peux tu m'en dire plus sur les requêtes paramétrées s'il te plait. Je ne connais pas.

    Encore merci.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par julien_33 Voir le message
    Peux tu m'en dire plus sur les requêtes paramétrées s'il te plait. Je ne connais pas.
    Bah je t'ai indiqué un tuto, qu'est-ce qu'il te faut de plus ? (le tuto est en C#, mais c'est pareil en VB)

    C'est des requêtes où au lieu de mettre les valeurs directement dans la requête, tu mets à la place des paramètres, et tu fournis les valeurs séparément :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    req = " insert into T_UTILISATEUR (Login, Password, Nom, Prenom)" _
                & "values (@Login, @Password, @Nom, @Prenom)"
    Using command As New SqlCommand(req, connection)
        command.Parameters.Add("@Login", SqlDbType.NVarChar).Value = TxtLogin.Text
        command.Parameters.Add("@Password", SqlDbType.NVarChar).Value = TxtPassword.Text
        command.Parameters.Add("@Nom", SqlDbType.NVarChar).Value = TxtNom.Text
        command.Parameters.Add("@Prenom", SqlDbType.NVarChar).Value = TxtPrenom.Text
        command.ExecuteNonQuery()
    End Using
    Soit dit en passant, normalement on enregistre pas des mots de passe en clair dans la DB, on enregistre juste un hash du mot de passe.

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2011
    Messages : 43
    Par défaut
    Tout d'abord, je te présente mes excuses, je n'avais pas vu le lien dans ta réponse pour les requètes paramétrées et merci pour ton exemple.

    J'ai également fait quelques recherches sur les hash de mot de passe mais je n'ai rien trouvé d'explicite sur la manière de créer un hash de mot de passe ni comment l'utiliser après.

    Merci d'avance pour ton aide.

    PS : C'est bien le type de champs dans la base qui est la source de mes espaces non souhaités.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par julien_33 Voir le message
    J'ai également fait quelques recherches sur les hash de mot de passe mais je n'ai rien trouvé d'explicite sur la manière de créer un hash de mot de passe ni comment l'utiliser après.
    Tu calcules le hash (MD5 ou SHA1 par exemple), avec une méthode dans ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Imports System.IO
    Imports System.Security.Cryptography
     
    ...
     
    Public Shared Function ComputePasswordHash(ByVal password As String) As String 
            Dim bytes As Byte() = Encoding.UTF8.GetBytes(password)
            Dim algo As SHA1 = SHA1.Create()
            Dim hashBytes As Byte() = algo.ComputeHash(bytes)
            Dim hash As String = BitConverter.ToString(hashBytes).Replace("-", "").ToLower()
            Return hash
    End Function
    Ca te donne une chaine hexadécimale, que tu stockes dans la DB à la place du password.

    Ensuite, quand tu veux vérifier si le mot de passe saisi est correct, tu prends son hash et tu compares à celui qui est stocké dans la DB. C'est plus sûr, parce que si quelqu'un arrive à s'introduire dans la DB et à voler les données, il n'a pas les passwords mais seulement les hash... et il n'y a pas de moyen simple de retrouver le mot de passe à l'origine du hash (de ce point de vue là, MD5 n'est pas très sûr, un moyen assez rapide de le "casser" à été trouvé il n'y a pas très longtemps ; il vaut mieux utiliser SHA1, SHA256 ou autre)

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

Discussions similaires

  1. Deployement d'une app vb.net avec sql server 2008
    Par devman2011 dans le forum VB.NET
    Réponses: 8
    Dernier message: 14/05/2015, 01h41
  2. Réponses: 1
    Dernier message: 02/11/2012, 12h17
  3. [Débutant] VB.NET et SQL Server 2008 - connexion à ma base de données
    Par chouchachaimouta dans le forum VB.NET
    Réponses: 1
    Dernier message: 18/04/2012, 02h03
  4. VB.NET et sql server 2008
    Par lordthelos dans le forum VB.NET
    Réponses: 1
    Dernier message: 31/10/2011, 18h37
  5. vb.net et sql server 2008
    Par gentelmand dans le forum VB.NET
    Réponses: 3
    Dernier message: 21/02/2009, 18h16

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