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

C# Discussion :

compatibilité d'une vue sql server et application C#


Sujet :

C#

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut compatibilité d'une vue sql server et application C#
    Bonjour,

    J'ai crée une application C# qui est un forum.

    Un utilisateur est invité à saisir son username + mot de passe via une interface graphique.

    Volontairement, j'ai choisi de stocker le mot de passe au format Varbinary car il doit être crypté quand il est inséré dans la BDD.


    Ces données sont insérées ensuite dans la BDD sql serveur dans la table Forum_Registration

    Voici le code d'insertion des données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
     protected void Btn_Registration_Click(object sender, EventArgs e)
            {
                try
                {
     
                    using (SqlConnection connexion = new SqlConnection(ConnectionStrings.FrCon))
                    {
                        //on remplace  txtusername.Text et txtpassword.Text , txtfullname.Text , @rbl_gender.SelectedItem.Text,txtdob.Text,txtemailid.Text par le nom d'un paramètre 
     
                        sqlquery = "Insert into Forum_Registration values (@username , @password)";
     
                        sqlCommand = new SqlCommand(sqlquery, connexion);
     
     
     
                        //création et déclaration des paramètres @username, @password,@fullname,@rbl_gender,@txtdob,@emailid
                        sqlCommand.Parameters.Add(new SqlParameter("@username", SqlDbType.NVarChar));
                        //insérer un message de saisie selon une expression régulière 
     
                        sqlCommand.Parameters.Add(new SqlParameter("@password", SqlDbType.VarBinary));
     
     
                        //attribution de valeur aux paramètres 
                        sqlCommand.Parameters["@username"].Value = txtusername.Text;
     
                        //pour l'instant je ne crypte et décrypte qu'en appelant des procédures sql serveur
                        //appel de la procédure stockée 
     
     
     
                        sqlCommand.Parameters["@password"].Value = txtpassword.Text;
     
     
                        //ouverture de la connexion 
                        connexion.Open();
     
                        sqlCommand.ExecuteNonQuery();
     
                    }//fin de using
     
                }//fin de try
    Au niveau BDD, j'ai crée :
    -une procédure de création de clef symétrique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CREATE SYMMETRIC KEY MA_CLEF
    WITH ALGORITHM = AES_256 
    ENCRYPTION BY PASSWORD = 'P@ssw0rd !';
    Voici le code du trigger d'insertion du mot de passe crypté dans la BDD

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    CREATE TRIGGER E_I_IU_Forum_Registration
    ON [dbo].[V_Forum_Registration]
    INSTEAD OF INSERT, UPDATE
    AS
    BEGIN
    IF NOT EXISTS(SELECT * FROM deleted)
       INSERT INTO Forum_Registration(username, password)
       SELECT username, ENCRYPTBYKEY(KEY_GUID('MA_CLEF'), password)
       FROM   inserted;
    ELSE
       UPDATE FR
       SET    password = ENCRYPTBYKEY(KEY_GUID('MA_CLEF'), i.password)
       FROM   inserted AS i JOIN Forum_Registration AS FR
    	ON i.username = FR.username;
    END
    -une vue sql dont voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE VIEW [dbo].[V_Forum_Registration]
    AS
    SELECT username, CAST(DECRYPTBYKEY(password) AS VARCHAR(100)) AS password
    FROM   [dbo].[Forum_Registration];
    Cette création de vue implique que les données soient au format Varbinary dans la BDD, ce qui n'est pas le cas .

    Je vous remercie beaucoup de votre aide pour résoudre cette situation bloquante.

    Bien cordialement.

    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par new_wave Voir le message
    Volontairement, j'ai choisi de stocker le mot de passe au format Varbinary car il doit être crypté quand il est inséré dans la BDD.
    Cette facon de proceder est etrange ! En general on hash ou on crypte le mot de passe dans l'application, avant de transmettre les infos a la DB. La raison principale est qu'on essaie de limiter au maximum les intermediaires et le temps pendant lequel le mot de passe reste en clair.

    Tu vas me dire ok, mais mes serveurs sont sur mon LAN et mon LAN est securise. Ok, par contre le jour ou tu as une intrusion et une attaque par exemple de type man in the middle, comment est-ce que tu pourras t'assurer que tu communiques bien avec le vrai serveur SQL et avec le vrai serveur Web ?

    Autre problematique, hasher ou crypter un mot de passe est une operation couteuse surtout au niveau du CPU. Le serveur Web est en general plus a meme de gerer ce genre de choses que le serveur de base de donnees, notamment parce que ce dernier a besoin de beaucoup de RAM et de CPU pour tourner, surtout pour les requetes complexes. Donc il faut bien estimer les charges de travail induites et la disponibilite du hardware pour pouvoir realiser ce genre d'operation sans que cela ne perturbe les performances de l'application.

    Pour finir, si tu souhaites proceder comme ca malgre tout, je te conseille de passer par une procedure stockee/function plutot que de vouloir tout integrer directement dans une vue et un trigger. Ca te permettra notamment de mieux gerer les exceptions.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut comptatibilité d'une vue sql serveur et application C#
    Bonjour et merci de ton conseil.

    J'ai également travaillé le cryptage du mot de passe .

    Je souhaite savoir comment fonctionnent les deux façons de faire .

    Je considère le sujet comme résolu.

    Bien cordialement.

    new_wave
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

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

Discussions similaires

  1. Accéder à une vue SQL server distant
    Par Schnain dans le forum VB.NET
    Réponses: 12
    Dernier message: 17/12/2014, 15h28
  2. Réponses: 0
    Dernier message: 03/07/2014, 17h09
  3. Créer une vue SQL Server sur fichier texte
    Par surcouf1 dans le forum Développement
    Réponses: 2
    Dernier message: 24/05/2011, 21h19
  4. Droits sur les vues d'une base SQL server 2000
    Par mioux dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/04/2007, 16h13
  5. [VB]Importer une vue SQL Server via Visual Basic
    Par NoViceDel dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 24/05/2006, 19h57

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