如何让Access VBA登录的用户名与密码校验区分大小写
VBA登录校验区分大小写修改方案
核心修改逻辑如下:
- 修复原有开发者账号校验漏洞:原有逻辑仅校验用户名、密码长度就放行开发者账号,无内容匹配规则,本次补充区分大小写的内容校验
- 调整数据库账号校验逻辑:Access SQL默认不区分大小写,调用
StrComp函数做二进制级字符串比对,实现大小写敏感校验
修改后完整代码如下:
Private Sub cmdLogin_Click() On Error GoTo cmdLogin_ClickErr ' 第一套逻辑:开发者账号校验,使用vbBinaryCompare实现区分大小写匹配 If StrComp(Me.txtUserName, "Developer", vbBinaryCompare) = 0 And StrComp(Me.txtPassword, "-Brty4587TRYIN", vbBinaryCompare) = 0 Then TempVars.Add "UserName", "Developer" TempVars.Add "Password", "-Brty4587TRYIN" TempVars.Add "Admin", "-1" Else Dim rs As Recordset ' 第二套逻辑:数据库账号校验,SQL中使用StrComp的0参数(二进制比对)实现区分大小写 Set rs = CurrentDb.OpenRecordset("Select * From TLKPeople Where StrComp(Username, '" & Me.txtUserName & "', 0) = 0 And StrComp([Password], '" & Me.txtPassword & "', 0) = 0", dbOpenDynaset, dbSeeChanges) If Not rs.EOF Then TempVars.Add "UserName", rs!UserName.Value TempVars.Add "Password", rs!Password.Value TempVars.Add "Admin", rs!Admin.Value TempVars.Add "ReadOnly", rs!ReadOnly.Value TempVars.Add "StdUser", rs!STDUser.Value TempVars.Add "OpsUser", rs!OpsUser.Value Else MsgBox "Your login as failed!", vbOKOnly, "Login Failed" Exit Sub End If rs.Close Set rs = Nothing End If If Nz(TempVars!UserName, 0) = "Developer" Then DoCmd.ShowToolbar "Ribbon", acToolbarYes End If DoCmd.Close acForm, Me.Name DoCmd.OpenForm "MenuMain" DoEvents Exit Sub cmdLogin_ClickErr: MsgBox ("Err: " & Err.Number & " " & Err.Description) End Sub
注意事项
- StrComp函数第三个参数传
0(对应常量vbBinaryCompare)时执行区分大小写的二进制比对,传1时执行不区分大小写的文本比对 - 本次同步修复了原有开发者账号仅校验长度即可登录的严重安全问题,修改后只有输入完全匹配大小写的开发者账号密码才能进入开发者权限
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

