阻止用户绕过MS Access上的登录表单

时间:2018-02-15 20:32:53

标签: vba ms-access access-vba

我创建了一个登录表单,其中包含用户类型(管理员,用户)的组合框和密码的文本框。表格的代码如下。

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

技术上工作(用户可以使用他们的用户类型和密码登录),但他们也可以关闭它并访问数据库的其余部分。

如何阻止这种情况发生?

1 个答案:

答案 0 :(得分:2)

您可以启用Modal属性,并禁用CloseButton属性:

enter image description here

请注意,使用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关闭的警告警告:这也会在关闭数据库时触发,如果他们没有输入正确的密码,则会拒绝人们关闭数据库!任何人在没有有效密码的情况下打开它都要么必须通过任务管理器终止Access,要足够技术以绕过这个(我提到它不安全,对吗?),或者通过强行关闭他们的计算机来终止它。

但是,对于接近真实的基于用户的安全性,您必须完全改变您的设计。我在this answer

中提供了我的注意事项和样本,以便进行更合理的设计