我创建了一个登录表单,其中包含用户类型(管理员,用户)的组合框和密码的文本框。表格的代码如下。
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
技术上工作(用户可以使用他们的用户类型和密码登录),但他们也可以关闭它并访问数据库的其余部分。
如何阻止这种情况发生?
答案 0 :(得分:2)
您可以启用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关闭的警告警告:这也会在关闭数据库时触发,如果他们没有输入正确的密码,则会拒绝人们关闭数据库!任何人在没有有效密码的情况下打开它都要么必须通过任务管理器终止Access,要足够技术以绕过这个(我提到它不安全,对吗?),或者通过强行关闭他们的计算机来终止它。
但是,对于接近真实的基于用户的安全性,您必须完全改变您的设计。我在this answer
中提供了我的注意事项和样本,以便进行更合理的设计