基本上我正在尝试创建一个程序,它需要有一些授权。
当应用程序启动时,它会直接进入登录屏幕。
我希望用户名和密码文本框读取数据库,如果它们匹配,则进入下一个表单,但如果它们不匹配,则会出现一个消息框。
我还想创建一组人,这样如果某一组人登录,他们会进入某种表单,而如果另一组人登录,我希望他们进入不同的表单。
此外,我希望密码框为*而不是可见文本。
任何人都可以帮忙吗,这是我到目前为止的代码...
dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;" dbSource = "数据源 = D:/Users.mdb"
con.ConnectionString = dbProvider & dbSource
con.Open()
sql = "SELECT * FROM tblUsers"
da = New OleDb.OleDbDataAdapter(sql, con)
da.Fill(ds, "Users")
con.Close()
MaxRows = ds.Tables("Users").Rows.Count
inc = -1
If UserIDTextBox.Text = ds.Tables("tblUsers").Rows(0).Item("UserID") & User_PasswordTextBox.Text = ds.Tables("tblUsers").Rows(0).Item("Password") Then
MsgBox("This have worked correctly!")
Else
MsgBox("This has not worked, try again!")
End If
最佳答案
您需要了解的第一件也是最重要的事情是,编写自己的身份验证系统几乎总是一个坏主意。这样做很容易,似乎似乎是正确的,甚至通过了所有测试,但仍然存在微妙的、难以发现的错误,直到一年后您发现这些错误时才会出现六个月前你就被破解了。始终尽可能依赖平台中提供的任何身份验证功能。
您需要知道的下一件事是您不会将密码存储在数据库中。曾经。处理密码匹配的正确方法是使用盐以某种简单的方式更改原始密码,这样简单的字典密码现在将不再产生可以通过谷歌查找轻松逆转的值,然后使用加密哈希像 bcrypt、scrypt 或(如果你确实需要的话)sha1 之类的算法。不要使用 md5。这方面的例子很容易在谷歌上找到,并且会比我在这里更好地解释它。当有人想要登录时,您对他们尝试的密码执行相同的步骤,现在仅比较哈希值。如果您不这样做,您的用户密码成为公众所知只是时间问题。
接下来我注意到代码中的数据库连接处理存在问题。您拥有的代码不能保证关闭连接。 con.Close()
应该始终位于Finally block 中,并且出于偏好,我喜欢使用Using
block 简写。
最后,在接近底部的地方,您尝试使用 VB 的字符串连接运算符 (&
) 作为逻辑 AND
。哎呀。您想在此处使用 AndAlso
运算符。
关于sql - 使用 Access 存储用户名和密码并通过 Visual Basic 打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7271817/