2013-10-11 5 views
0

Это первый раз, когда я запускаю любые запросы и/или подключаюсь к базе данных через vb. Я искал свою проблему на линии, но не нашел точно, что я ищу.Обновить пароль, если имя пользователя и старый пароль совпадают

У меня есть простая страница входа в мое приложение для Windows, в которой заканчивается компактная база данных .sdf. Мне нужно добавить процедуру, которая позволяет пользователю сменить пароль.

Если имя пользователя в текстовом поле 1 и пароль в текстовом поле2 соответствуют тому, что я сохранил в моей базе данных, затем замените пароль на значения textbox3.

До сих пор я был в состоянии понять, как создать новую учетную запись и проверить журнал в I войти, используя следующие:.

SELECT  username, userpassword 
FROM   UserInfo 
WHERE  (username LIKE @username) AND (userpassword LIKE @userpassword) 

Тогда процедура на моей кнопке:

' Check if username or password is empty 
If txtPassword.Text = "" Or txtUserName.Text = "" Then 
    MessageBox.Show("Please complete the required fields..", "Authentication Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 

    'Clear all fields 
    txtPassword.Text = "" 
    txtUserName.Text = "" 

    'Focus on Username field 
    txtUserName.Focus() 

Else 

    'If the password and username match, open the main form. 
    If Not UserInfoTableAdapter1.Login(txtUserName.Text, txtPassword.Text) = Nothing Then 

     Dim frmWelcome As New frmWelcomePage 

     frmWelcome.Show() 
     Me.Hide() 

    Else 


     MessageBox.Show("You have entered an invalid user name or password", "Invalid Login", MessageBoxButtons.OK, MessageBoxIcon.Error) 

     'Clear all fields 
     txtPassword.Text = "" 
     txtUserName.Text = "" 

     'Focus on Username field 
     txtUserName.Focus() 

    End If 

End If 

Как я могу использовать что-то похожее на изменение пароля?

+6

Вы не хотите использовать 'LIKE' с паролем. Вместо этого используйте точное совпадение ('='). – pickypg

+0

@pickypg Спасибо, уже изменил его в моем файле. –

ответ

2

Как @pickypg сказал, что вам обязательно нужно найти точное совпадение с паролями и именами пользователей. Также вы должны учитывать односторонний хэш для пользовательских паролей. This answer хорошо описывает потенциальную опасность хранения паролей с открытым текстом. This article имеет соответствующую информацию и также является забавным.

Это в стороне SQL вы ищете может быть что-то вроде этого:

create procedure updateUserPassword 
@userName varchar(max) 
,@oldHashedPassword nvarchar(128) 
,@newHashedPassword nvarchar(128) 
as 
begin 
set nocount on; 
    if exists (select 1 from UserInfo where username = @userName and userpassword = @oldHashedPassword) 
    begin 
    update UserInfo set userPassword = @newHashedPassword where username = @userName; 
    end 
    else 
    begin 
    raiserror('No record found for user', 16, 1); 
    end 
end 
Смежные вопросы