【问题标题】:Change password in access database through visual basic form通过visual basic表单更改access数据库中的密码
【发布时间】:2015-04-12 03:41:47
【问题描述】:

我目前有一个表单,您可以在其中输入usernamepassword,它会在访问中创建一个记录。从那里,每当它要求usernamepassword 时,你输入你的,它会检查它是否正确。我让所有这些工作正常,但现在我有一个单独的表格,您可以在其中更改password,但我不知道该怎么做。这是我目前所拥有的:

Dim con As OleDbConnection = New OleDbConnection()
Dim cmd As OleDbCommand
Dim sql = "SELECT UN, PW FROM Users WHERE UN='" & cmbUser.Text & "' AND PW='" & txtOldPass.Text & "'"
cmd = New OleDbCommand(sql, con)
con.ConnectionString = ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=../Database.mdb")
con.Open()
Dim dr As OleDbDataReader = cmd.ExecuteReader

Try
   If dr.Read = False Then
      MsgBox("Password is incorrect!")
      txtOldPass.Text = ""
      txtNewPass.Text = ""
      txtNewPassConf.Text = ""
   ElseIf txtNewPass.Text <> txtNewPassConf.Text Then
      MsgBox("Passwords do not match!")
      txtOldPass.Text = ""
      txtNewPass.Text = ""
      txtNewPassConf.Text = ""
   Else
      'This is where the change password code goes
      MsgBox("You password has been changed!")
      cmbUser.SelectedIndex = -1
      txtOldPass.Text = ""
      txtNewPass.Text = ""
      txtNewPassConf.Text = ""
   End If
Catch ex As Exception
   MsgBox(ex.Message)
End Try
con.Close()

如您所见,一切似乎都运行良好。只需要代码来更改 PW 单元格的值。我想我可以使用sql 字符串,但我不确定具体如何。提前致谢!

【问题讨论】:

  • 这是一种创建 SQL 的糟糕方式,也是一种存储密码的非常糟糕的方式

标签: database vb.net passwords


【解决方案1】:

您可以使用此代码。

请注意,传递给数据库的值应该通过参数传输(对于您的初始 SELECT 也是如此),而不是将字符串连接在一起以形成命令文本。 (Sql注入,解析问题,命令文本更清晰)

   .....
   Else
      'This is where the change password code goes
      Dim cmdText = "UPDATE Users SET PW = @pwd " & _
                    "WHERE UN = @uname AND PW = @oldpwd"
      dr.Close()
      OleDbCommand cmdUpdate = new OleDbCommand(cmdText, con)
      cmdUpdate.Parameters.AddWithValue("@pwd",txtNewPass.Text) 
      cmdUpdate.Parameters.AddWithValue("@uname",cmbUser.Text) 
      cmdUpdate.Parameters.AddWithValue("@pwd",txtOldPass.Text) 
      cmdUpdate.ExecuteNonQuery()
      MsgBox("You password has been changed!")
      cmbUser.SelectedIndex = -1
      txtOldPass.Text = ""
      txtNewPass.Text = ""
      txtNewPassConf.Text = ""
   End If

请记住,以明文形式存储密码是安全性的一大漏洞。任何可以获取 Access 文件的人都可以读取用户的密码。将密码存储在数据库中的最佳方法是通过单向加密方法。 (哈希和盐)

你可以在这个问题中找到更多信息

【讨论】:

  • 我知道这不是很安全,但是这个项目仅用于将票证输入数据库的工作。但非常感谢你的链接!它肯定会帮助我未来的项目! :)
猜你喜欢
  • 2013-09-25
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 2015-04-02
  • 1970-01-01
  • 2020-08-18
相关资源
最近更新 更多