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 :

Cryptage des informations de connexion à une base de données SQL


Sujet :

VB.NET

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Cryptage des informations de connexion à une base de données SQL
    Bonjour à tous.
    J'ai un problème qui commence vraiment à me faire perdre la tête!
    Je développe une application au sein d'une entreprise. Elle doit être utilisée par une vingtaine de personnes.
    J'accède à une base de données en permanence et de multiples façons, j'ai donc utilisé les dataset de visual studio (je précise que je suis sous 2005).

    Je ne connaissais pas ces outils et je dois dire que c'est bien pratique, à un détail près : les chaînes de connexion utilisées!!!

    Lors de la connexion à la base, on définit une chaîne qui va être stockée dans my.settings sous le type ConnectionString (j'ai l'impression que c'est simplement un string en readonly).
    On ne peut donc pas, à ma connaissance, les modifier via le code.

    Lors de la compilation, un fichier app.config est créé et, Ô miracle, on retrouve cette chaîne de connexion intacte dans ce fichier.

    Le milieu dans lequel mon application sera utilisé n'a pas besoin d'être hautement sécurisé mais il ne faut peut-être pas abuser donc je ne veux pas laisser ça comme ça.

    J'ai lu énormément d'articles sur le cryptage mais la plupart concernent asp.
    Enfin, après de nombreuses heures de recherche je n'aboutis à rien.

    J'aimerais donc savoir si c'est possible de stocker la chaine de connexion dans un classe et de pouvoir y accéder via le dataset de façon à ce qu'elle ne soit pas stockée dans un fichier.

    Encore mieux, si un sauveur pouvait me trouver une méthode de cryptage compréhensible et rapide à mettre en oeuvre, je crois que je pourrais tomber amoureux.

    Je vous remercie par avance de toute réponse que vous pourrez m'apporter.

  2. #2
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    En apparence en effet les dataset créer en mode design sont attractives...

    Mais ça créer aussi des problèmes:

    - Apparemment, d'après ton projet, il n'est pas possible de changer de chaîne de connexion, et il est stocké dans un fichier en clair...

    Crypter la chaine oui, mais si tu peux pas la mettre a jour dans les dataadapter de tes datasets, ca servira a rien.

    - En plus de ça j'ai déjà rencontré de problèmes avec ces dataset: Si par malheur tu changes une données dans tes base de données, le dataset devient obsolète et bug. Du coup il faut supprimer et recréer... Pas marrant.

    Moi mon conseil c'est de refaire tes dataset a plat dans ton code. Gérer la chaîne de connexion dans une classe qui va écrire la chaîne de manière crypter dans un fichier.

    Mais si quelqu'un sait comment crypter les chaines de tes dataset, se sera mieux pour toi.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Il y a déjà eu plusieurs discussions à propos de la visibilité des chaînes de connection.

    Voici une petite synthèse:

    Il n'est pas possible de cacher de façon efficace une connection string stockée dans une application .Net. Même si cette dernière est stockée dans une classe il est toujours possible de la retrouver par ingénieurie à rebours. Si tu cryptes la chaîne, le problème est reporté sur la clé qui permet de decrypter la chaîne (qui se trouvera aussi quelque part dans ton code).

    Savoir que si le type sait dans quel fichier chercher ta chaîne, qu'il sait utiliser un utilitaire de management de BD, il sait probablement convertir un exe en code (ce qui est relativement simple en .Net)

    Mais que faire alors pour résoudre ta problématique?

    Utiliser une connection de type authentification Windows si disponible. Les droits se gèrent alors au niveau du compte dans l'active directory!

    Créer la chaîne dynamiquement lors de l'execution en demandant à l'utilisateur d'introduire les informations sensible. (un peu ce que tu veux faire, il y a quelque docs sur le sujet (rechercher dataset connectionstring at runtime) Par Ex: https://msmvps.com/blogs/deborahk/ar...t-runtime.aspx

    Faire en sorte que le compte dans la connection string n'ait pas plus de droit que nécessaire (plus facile à dire qu'à faire je l'accorde). Ex: Si ton programme n'est pas censé effacer des fiches clients, alors le compte dans la connection string ne doit pas pouvoir faire des delete sur la table concernée. Pour l'intégrité des données passer par des procédures stockée plutot que des requêtes.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci de vos réponses.

    J'ai finalement réussi à trouver la solution en faisant une recherche à l'aide de tes mots clefs sinople, les fameux "dataset connectionstring at runtime".

    Je vais donc dans my.settings et je remplace ma chaine par "xxx"

    J'affiche le code de my.settings et je rajoute :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Sub New()
     
                Me("nom_de_ma_chaine_de_connexion") = "chaine de connexion"
            End Sub
     
            Private Sub SettingsSavingEventHandler(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
     
                ' Add code to handle the SettingsSaving event here.
                Me("chaine") = "xxx"
            End Sub
    Je pense donc ne pas sauvegarder la chaine de connexion, ceci dit je ne trouve pas l'emplacement du fichier de config généré donc je ne peux pas être catégorique!
    Evidemment je dois changer à nouveau cette chaîne dés que je veux accéder aux dataset sous VS mais ça devrait aller, de toute façon il n'y a pas de solution miracle...

    En ce qui concerne l'authentification windows, je ne connais pas trop le principe mais je suppose qu'il est nécessaire de connaitre le nom de chaque session qui aura accès au programme et de lui donner les droits nécessaires sur le serveur SQL non?

    Merci.

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    En ce qui concerne l'authentification windows, je ne connais pas trop le principe mais je suppose qu'il est nécessaire de connaitre le nom de chaque session qui aura accès au programme et de lui donner les droits nécessaires sur le serveur SQL non?
    Je suis pas un fin spécialiste à ce niveau, mais je pense que conceptuellement ça doit être la même chose que la gestion des droits sur des fichiers avec l'active directory. Donc les droits par groupe ou utilisateurs, ça permet d'avoir une gestion plus unifiée des droits sur le système.

    Néanmoins il faut pas oublier que la solution dépend au final du niveau de sécurité que tu dois offrir.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/12/2012, 16h02
  2. Réponses: 3
    Dernier message: 19/03/2012, 02h24
  3. Réponses: 9
    Dernier message: 11/10/2010, 18h29
  4. Réponses: 1
    Dernier message: 27/07/2009, 14h29
  5. Réponses: 2
    Dernier message: 04/05/2007, 15h13

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