Microsoft Access用户密码限制

时间:2015-04-16 15:47:26

标签: vba security ms-access access-vba

我正在尝试限制我的Access数据库被某些人使用,并根据他们的身份给这些人一些限制。我正在看几篇关于创建一个包含用户和密码的表并使用一些VBA代码进行验证的文章(或者其他类似的东西,我很VBA不识字)。有谁知道我在哪里可以找到关于如何做到这一步的一步一步的文章?

或者,也许在我有一个带有其他表单链接的表单的地方更简单。链接将显示“数据输入”,“管理器”等,并且链接可以受密码保护。即,当Manager单击Manager链接时,他必须输入密码,然后将其转到可以编辑任何和所有信息的表单。然而,当数据输入点击时,他们输入一个不同的密码,然后被带到一个表单,在那里他们只显示他们可以编辑的字段。

先谢谢你。

2 个答案:

答案 0 :(得分:1)

安全性是MS Access的关键点。如果要实现登录功能,我假设您的业务模型包含某些敏感信息。这种商业模式通常期望/需要的不仅仅是普通的软件设计技能。

首先,您需要从

开始定义/设计业务需求
  • 如果你可以开始使用MS Access。
  • 然后使用什么版本的MS Access
  • 单用户,多用户,本地访问或互联网访问
  • 如果MS Access提供的安全级别足够您。
  • 可扩展性
  • 等...

MS Access允许查看表格内容,这意味着,当您保存用户详细信息时,任何用户都可以访问该表格,这将查看用户详细信息并能够使用/绕过它们。

当您编译您的Access数据库到MDE或ACCDE时会获得某种安全性,这将阻止用户访问VBA功能或进入设计模式。这可能会在很多方面帮助您提高安全性。包括发布前端应用程序的更新。

回答有关用户访问级别的问题。我会亲自拆分数据库,以便在整个应用程序中维护集中数据。如果您的应用程序非常小,您可以在本教程中使用简单的登录表单功能。 http://www.databasedev.co.uk/login.html

要区分用户级别,您需要创建用户角色表并为每个用户分配角色。如果是,则允许执行操作,创建一个新功能,检查用户是否已分配给所请求的角色。如果没有警告用户。像这样的东西:

表格如下:

  • tbl_user:{user_id,user_name ....}
  • tbl_roles:{role_id,role_name,...}
  • tbl_user_roles:{role_id,user_id,assigned_date,...}

检查用户级别的简单功能:

Public Function FN_IS_USER_IN_ROLE(iUSER_ID As Long, iREQ_ROLE As String) As Boolean

    Dim MyDB As Database
    Dim MyRS As Recordset

   On Error GoTo FN_IS_USER_IN_ROLE_Error

    FN_IS_USER_IN_ROLE = False
    Dim SQL_GET As String
    SQL_GET = "SELECT tbl_user.user_name, tbl_roles.role_name " & _
              "FROM (tbl_user_roles INNER JOIN tbl_user ON tbl_user_roles.user_Id = tbl_user.user_id) INNER JOIN tbl_roles ON tbl_user_roles.role_id = tbl_roles.role_id " & _
              "WHERE (((tbl_user.user_id)=" & iUSER_ID & ") AND ((tbl_roles.role_name)='" & iREQ_ROLE & "')); "

    Set MyDB = CurrentDb
    Set MyRS = MyDB.OpenRecordset(SQL_GET)
    Dim mRc As Long
    mRc = Nz(MyRS.RecordCount, 0)
    If mRc > 0 Then
        FN_IS_USER_IN_ROLE = True
    End If


   On Error GoTo 0
    Set MyRS = Nothing
    Set MyDB = Nothing
   Exit Function

FN_IS_USER_IN_ROLE_Error:
    FN_IS_USER_IN_ROLE = False
    Dialog.Box "Error " & Err.Number & " (" & Err.description & ") in procedure FN_IS_USER_IN_ROLE", vbExclamation
End Function

并通过以下方式检查用户是否有足够的权限:

Dim PR As String
PR = "Admin"
If (FN_IS_USER_IN_ROLE(PR)) Then
    'Do something
Else
    'Me.Undo
    'Cancel = True
    MsgBox "You do not have sufficient permissions to perform this task!" & vbNewLine & "Required access level: " & PR, vbCritical, "Access denied.."
    Exit Sub
End If

试试这个,如果你成功了,请告诉我们。

答案 1 :(得分:0)

你想要一个front end/back end database。您可以在数据库工具 - >中找到Access中的拆分功能。 移动数据 - > Access Database 或者您可以通过创建另一个包含表单和linking表的数据库来手动构建两个DB。

后端是具有所有管理员访问权限的主数据库。这可以通过转到文件 - >进行密码保护。 信息 - > 使用密码加密。它包含所有数据表。

前端数据库是表单的用户界面。这与后端相关联,以便它可以更新已提供表单的后端。