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:
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:
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:
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:
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
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