Vba Microsoft Access登录系统&;管理员用户级安全
在你问之前,我已经花了好几个星期的时间在谷歌上搜索,但都没有用。我目前正在为Microsoft Access 2007中的一家企业设计一个数据库系统。系统运行良好,但有些问题需要帮助解决 目前,我有两种形式 Login_FRM-作为登录屏幕的表单。目前这个盒子的代码是Vba Microsoft Access登录系统&;管理员用户级安全,vba,ms-access,Vba,Ms Access,在你问之前,我已经花了好几个星期的时间在谷歌上搜索,但都没有用。我目前正在为Microsoft Access 2007中的一家企业设计一个数据库系统。系统运行良好,但有些问题需要帮助解决 目前,我有两种形式 Login_FRM-作为登录屏幕的表单。目前这个盒子的代码是 If IsNull(Me.Username) Or Me.Username = "" Then MsgBox "You must enter the username of an active employee."
If IsNull(Me.Username) Or Me.Username = "" Then
MsgBox "You must enter the username of an active employee.", vbOKOnly, "Required Data"
Me.Username.SetFocus
Exit Sub
End If
If IsNull(Me.PasswordLookup) Or Me.PasswordLookup = "" Then
MsgBox "You must provide a password.", vbOKOnly, "Required Data"
Me.PasswordLookup.SetFocus
Exit Sub
End If
Me.PasswordLookup.Value = DLookup("[Password]", "User_TBL", "[Username] ='" & Me.Username & "'")
If Me.PasswordLookup.Value = Me.PasswordLookup.Value Then
DoCmd.OpenForm "MainMenu_FRM"
Else
MsgBox "Incorrect Username or Password. Please try again.", vbOKOnly, "Please try again"
Me.PasswordLookup.SetFocus
Exit Sub
End If
End Sub
这会检查是否为null等,但也会检查用户TBL中存储的字段,以查看用户是否可以获得访问权限
我还有MainMenu_FRM,它是数据库所有进程的主要跳板
基本上,我想做的是只允许用户访问Admin菜单,如果在user_TBL中注册为Admin(是/否)
我将非常感谢任何人的帮助
谢谢
下面是整个过程的简要概述
我是按照同样的思路设计的,我发现从用户登录的结果将用户权限插入到
TempVars()
中是很有用的。它只在登录时更新,而不在数据库中的任何其他位置更新
,但有一个更好的描述
在任何旨在限制访问权限的按钮(打开表单)上,onclick事件将评估用户权限变量。因此,如果不允许用户使用表单,我可以拥有一个
MsgBox
。我认为最好给每个人一个登录屏幕,然后在他们尝试访问管理屏幕时检查他们是否是管理员。我认为你需要做的事情比你想象的要简单
只需在main menu FRM
的形式load中执行if语句,该语句只启用管理员的按钮,并设置默认值,以便对其他人禁用该语句。然后只有管理员才能单击它
为什么管理员也不必登录呢?只要让他们登录,并在他们登录后适当地设置他们的权限
i、 e.在属性中将main菜单上的每个按钮设置为Enabled=no
Private Sub Form_Load()
'****Admin****
If strUserAccess = "Admin" Then
Me.buttonThatTakesYouSomewhere.Enabled = True
Me.buttonThatTakesYouSomewhereElse.Enabled = True
'****USER****
ElseIf strUserAccess = "User" Then
Me.buttonThatTakesUsersSomewhere.Enabled = True
Me.buttonThatTakesUsersSomewhereElse.Enabled = True
end if
end sub
此外,出于安全原因,请确保您为代码输入密码并禁用shift override,以便任何人都不能破坏任何内容
根据他们的登录名(您可以在登录屏幕上将其设置为tempvar)使用DLookup从表中查找他们的访问级别
根据评论的第二部分。
我从未在dlookup中调用过临时变量,所以我只能尝试一下。
如果它不起作用,你可能需要用谷歌搜索如何正确操作。它可能需要或多或少的引号
dim strUserAccess as String
strUserAccess = DLookup("fieldname", "tablename", "[UserName]="" & TempVars("Username").value & "")
if strUserAccess = "Admin" then
...
等等。
我可能打错了Dlookup,我也不是100%确定这是否有效,但它应该可以 您知道这是薄薄的,只适用于不了解MS Access的用户?@Remou如果要使用accdb文件,他们还有什么其他选择?看起来像这样的登录控件更适合于不恶意使用数据库的用户,有点像“流量控制”,而不是任何真正的安全性。@Brad据我所知,accdb没有其他选项,只要OP知道这只是“流量控制”就可以了。我不希望有人认为他们可以在这样的设置中安全地存储敏感信息。保护代码项目是一个好主意,但是禁用移位覆盖很容易撤消,特别是在2003年以后的版本中,用户级安全性已经消失。我认为Accde版本可能更好。该系统永远不会真正被使用,只是用于学校项目,所以不要担心黑客攻击。汉克斯·塞思,我已经在主菜单表单中完成了,我如何知道在我的登录屏幕按钮中实现第二位?代码在顶部,顺便说一句,我不知道你在问什么。不过我能猜到。我认为您需要在主表单的表单加载顶部添加一个DLookup for Access level,并在从登录屏幕登录后引用用户名。最简单的方法可能是在主屏幕顶部放置一个可见但锁定的文本框,其中显示用户的登录名,然后引用该文本框以使用dlookup获取其访问级别,然后再设置权限。不确定如何进行匹配,我对vba不太在行,我已将用户名和密码存储在登录表单“Dim username as tempvars Dim PasswordLookup as TempVar”中作为TempVar,我如何在主菜单表单中调用它?