【问题标题】:How to implement user-level security in Access 2007如何在 Access 2007 中实施用户级安全性
【发布时间】:2014-09-13 12:12:39
【问题描述】:

所以经过一番挖掘后,我意识到 Access 2007 没有内置的用户级安全选项。我需要做的是限制用户可以根据登录者编辑的记录(他们可以看到所有数据,但只有编辑自己的)。我在想我可以制作一个登录表单并分配密码然后从那里开始,但我想知道是否有更好的方法来做到这一点。

【问题讨论】:

    标签: security ms-access vba ms-access-2007


    【解决方案1】:

    对于数据库中表单的只读、读写用户权限,我们实现了以下表格、逻辑。

    我创建了一个权限表以及登录表。数据库中的每个屏幕都将对每个用户具有只读或读写权限。我将所有屏幕名称插入特权表。另一个表 UserPrivilege 将拥有用户及其权限。为用户分配权限只能由管理员用户完成。

    每个表单开始时的功能检查是否允许指定用户查看或编辑表单。如果他/她被授予只读权限,我们将锁定表单上所有通过控件循环的控件。否则,无事可做。或者在设计它们时将所有控件保持只读,并通过代码解锁它们以获得写入权限。

    向最终用户交付版本时,数据库窗口将保持隐藏状态。这可以防止对数据库中的表进行常规、简单的查看,在数据库窗口中打开表单、报告对象。在制作 mde/accde 之后,可以再做一些调整,这样用户就不容易直接查看表格。绕过启动、特殊键等。

    【讨论】:

      【解决方案2】:

      我也遇到过这个问题。我的解决方案(尚未被打破)就是这样做。制作一个带有密码的用户表和一个读取用户名、密码和用户类型表的登录表单。我使用了两种方法从那里开始:Case 语句为该用户的函数或全局变量(在模块中(枚举帮助))打开特定的导航表单,以及在每个表单的打开事件和更改中检查的 getter 函数AllowEditsAllowAdditions 之类的属性,如果是管理内容,甚至取消表单打开。

      此设置中最重要的部分是确保用户使用 Access Runtime。如果他们使用您正在开发的 Access 版本,他们可以稍微窥探一下并绕过这个问题。

      确保隐藏用户的表格。

      可以通过创建数据库的快捷方式并将/runtime 添加到快捷方式路径的末尾(带有空格)来强制访问运行时。

      它并不完美,但它适用于我的目的,它可能适用于你的目的。

      我在 2010 年确实做到了这一点,但 2007 年应该差不多。

      【讨论】:

      • 关于隐藏表格和将 /runtime 添加到链接的提示是金!谢谢。
      【解决方案3】:

      在 Access 中分配用户名/密码(尤其是访问后端)有许多值得指出的关键问题。首先,如果您不加密您的数据库,那么您的任何有能力去寻找它的用户都将能够找到它,因此可以完全访问它。如果您加密数据库,如果任何人都可以访问您的源代码,那么您就高兴了,因为他们将能够看到存储在代码中的数据库用户/密码。如果您使用其他 SQL 数据库,此问题仍然存在,但至少在这些情况下,您可以限制提供给 Access .accdb 文件的用户以具有某些权限。

      就我而言,我有 3 个安全级别。首先,我严格限制了我发送的内容,使得访问源代码变得非常困难,无论如何你都必须这样做。其次,我使用不同的数据库密码分配不同级别的访问(我使用的是 MySQL 后端,你可以对 SQLServer 后端做同样的事情,但使用 Jet 你就不走运了),所以即使用户可以看到数据库用户和密码,他们可以做的事情是有限的。第三,由于我部署在公司网络上,我利用 Windows 组,并使用它们过滤掉不同用户可见的内容。这样,用户只有在我们的网络上通过身份验证后才能使用表单。如果文件发现它不在网络上,它会自行删除并终止。

      Function IsMember(strDomain As String, strGroup _
      As String, strMember As String) As Boolean
          Dim grp As Object
          Dim strpath As String
      
          strpath = "WinNT://" & strDomain & "/"
          Set grp = GetObject(strpath & strGroup & ",group")
          IsMember = grp.IsMember(strpath & strMember)
      End Function
      
      Function GetCurrentUser() As String
          GetCurrentUser = VBA.Environ$("USERNAME")
      End Function
      
      Function GetCurrentDomain() As String
          GetCurrentDomain = VBA.Environ$("USERDOMAIN")
      End Function  
      

      【讨论】:

      • 你的数据库会自行删除吗?如果有人在家工作或出于某种原因将计算机从网络上拔下,这将如何工作?
      • 好吧,你不需要这样做,在我的情况下,每个有权访问它的人都在域计算机上工作,所以这不是问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多