防止用户绕过 MS Access 上的登录表单
Posted
技术标签:
【中文标题】防止用户绕过 MS Access 上的登录表单【英文标题】:Prevent users from being able to bypass a login form on MS Access 【发布时间】:2018-02-15 20:32:53 【问题描述】:我创建了一个登录表单,其中包含用于用户类型(管理员、用户)的组合框和用于密码的文本框。表单代码如下。
Private Sub txtPassword_AfterUpdate()
If IsNull(Me.cboUser) Then
MsgBox "You need to select a user!", vbCritical
Me.cboUser.SetFocus
Else
If Me.txtPassword = Me.cboUser.Column(2) Then
If Me.cboUser.Column(3) = True Then
MsgBox "Password does not match, please re-enter!", vboOkOnly
Me.txtPassword = Null
Me.txtPassword.SetFocus
End If
DoCmd.OpenForm "FE1"
Me.Visible = False
Else
MsgBox "Password does not match, please re-enter!", vboOkOnly
Me.txtPassword = Null
Me.txtPassword.SetFocus
End If
End If
End Sub
Private Sub cboUser_AfterUpdate()
Forms!frmLogin!cboUser.Column (2)
End Sub
它在技术上是有效的(用户可以使用他们的用户类型和密码登录),但他们也可以直接关闭它并访问数据库的其余部分。
如何阻止这种情况发生?
【问题讨论】:
禁用 X 关闭按钮。禁用右键单击快捷菜单。隐藏导航窗格。 【参考方案1】:您既可以启用Modal
属性,也可以禁用CloseButton
属性:
请注意,使用Modal
属性时,您需要在完成后关闭表单:DoCmd.Close acForm, Me.Name
而不是Me.Visible = False
但是,这仍然远离适当的安全性。
如果您拒绝使用 VBA 关闭表单,它会变得更安全:
Private Sub Form_Unload(Cancel As Integer)
Cancel = True
If Me.txtPassword = Me.cboUser.Column(2) And Not Me.cboUser.Column(3) Then
Cancel = False
End If
End Sub
关于拒绝通过 VBA 关闭的警告:这也会在关闭数据库时触发,如果人们没有输入正确的密码,则拒绝关闭数据库!任何人在没有有效密码的情况下打开它,要么必须通过任务管理器终止访问,要么精通技术以绕过它(我提到它不安全,对吗?),或者通过强制关闭他们的计算机来终止它。
但是,为了接近真正的基于用户的安全性,您将不得不完全改变您的设计。我在this answer中提供了我的考虑和一个更合适设计的样本
【讨论】:
以上是关于防止用户绕过 MS Access 上的登录表单的主要内容,如果未能解决你的问题,请参考以下文章
MS Access 2010 上的可编辑文本框 - 行为正确吗?