0

这是我第一次运行任何类型的查询和/或通过 vb 连接到数据库。我已经在网上查找了我的问题,但没有找到我正在寻找的确切内容。

我的 Windows 应用程序上有一个简单的登录页面,它用完了一个紧凑的 .sdf 数据库。我需要添加一个允许用户更改密码的过程。

如果 textbox1 中的用户名和 textbox2 中的密码与我存储在数据库中的匹配,则将密码替换为 textbox3 的值。

到目前为止,我已经能够弄清楚如何创建一个新帐户并验证登录。我使用以下方式登录:

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

如何使用类似的东西来更改密码?

4

1 回答 1

3

正如@pickypg 所说,您绝对应该寻找与密码和用户名完全匹配的内容。此外,您应该考虑用户密码的单向哈希。这个答案很好地描述了存储纯文本密码的潜在危险。这篇文章有相关的资料,也很有趣。

除了你正在寻找的 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
于 2013-10-11T06:20:24.460 回答