Vba Microsoft Access登录系统&;管理员用户级安全

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."

在你问之前,我已经花了好几个星期的时间在谷歌上搜索,但都没有用。我目前正在为Microsoft Access 2007中的一家企业设计一个数据库系统。系统运行良好,但有些问题需要帮助解决

目前,我有两种形式

Login_FRM-作为登录屏幕的表单。目前这个盒子的代码是

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,我如何在主菜单表单中调用它?