我已经看到了很多有关如何创建安全数据库密码的问题。 我将介绍一种使用MD5加密算法对密码进行加密的方法,以实现最大的安全性。
首先,您需要下载附件的类模块(clsMD5.txt)并将其导入数据库。 这个类模块是我们要讲的内容的核心。 感谢Robert Hubley编写它-您是我的英雄!
接下来,您的数据库需要一个users表。 我们以这个为例。
tblUsers
Field Type
UserID AutoNum PK
strLastName Text
strFirstName Text
strMI Text
strUserName Text (no duplicates)
strPassword Text (encrypted)
strPermissions Text (access permissions)
现在,您将需要某种类型的“编辑用户选项”表单供用户创建密码。建立表单,并为密码添加一个UNBOUND文本框控件。
我们将其称为txtTempPassword。
确保将“输入掩码”设置为“密码”,以便没有人可以监视密码。
因此,我们有以下内容:
Object Name Bound To
Form frmUserOptions tblUsers
Text Box txtTempPassword Unbound
现在,在txtTempPassword的AfterUpdate事件上,使用以下代码:
strPassword = DigestStrToHexStr(Me.txtTempPassword)
DigestStrToHexStr()函数可以将您的纯文本密码转换为安全的MD5加密的十六进制乱码。
现在,当用户尝试登录到您的自定义登录表单时您会怎么做?
您的登录表单可能会遵循以下基本结构:
Object Name Bound To
---------------------------------------------------
Form frmLogin Unbound
Text Box txtUsername Unbound
Text Box txtPassword Unbound
Button cmdLogin
在按钮的OnClick事件中,您将具有用于对照表检查输入的用户名和密码的文本的代码,以查看是否存在匹配项。
显然,现在密码已加密,不会。
解决方案是使用相同的DigestStrToHexStr()函数对搜索字符串进行加密。
考虑以下:
Private Sub cmdLogin_Click()
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT UserID, strUsername, strPassword FROM tblUsers", dbOpenSnapshot)
'first, see if the username is valid
rs.FindFirst "strUsername = '" & Me.txtUsername & "'"
If rs.NoMatch Then GoTo ErrorOut
'next, check the password
If rs!strPassword = DigestStrToHexStr(Me.txtPassword) Then
DoCmd.Close
'open switchboard and run any other code
End If
Exit Sub
'close the app if the login was incorrect
ErrorOut:
MsgBox "Username/password combination is invalid." & _
vbCrLf & vbCrLf & "Exiting application.", vbCritical
Application.Quit
End Sub
显然,您将需要个性化此代码以供使用,但这就是这个主意。
使用安全的MD5加密密码制作数据库,玩得开心!