如何在Access 2007中实现用户级安全性

时间:2014-07-22 15:21:29

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

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

3 个答案:

答案 0 :(得分:2)

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

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

确保隐藏用户的表格。

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

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

我在2010年做了这个,但2007年应该差不多了。

答案 1 :(得分:2)

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

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

每个表单开始时的函数检查指定的用户是否可以查看或编辑表单。如果他/她被给予只读,我们将锁定所有控制循环thr'表格上的控件。否则,无事可做。或者将所有控件保持为只读设计它们并解锁它们。写权限的代码。

当交付最终用户版本时,数据库窗口将保持隐藏状态。这可以防止通常,简单地查看数据库中的表,打开表单,报告数据库窗口中的对象。在制作mde / accde之后,可以进行更多调整,以便用户无法直接查看表格。绕过启动,特殊键等。

答案 2 :(得分:1)

在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