因此,在进行一些挖掘之后,我意识到Access 2007没有内置的用户级安全选项。我需要做的是限制用户可以根据登录的人编辑的记录(他们可以看到所有数据但只能编辑自己的)。我以为我可以登录表格并分配密码并从那里开始,但我想知道是否有更好的方法来做到这一点。
答案 0 :(得分:2)
我也一直面临着这个问题。我的解决方案(尚未被打破)就是这样做的。使用密码和登录表单创建用户表,该表格读取用户名,密码和用户类型的表。我使用了两种方法从那里开始:Case
语句为该用户的函数打开特定的导航表单或全局变量(在模块中(枚举帮助))和在每个表单的打开事件中检查的getter函数并更改AllowEdits
和AllowAdditions
等属性,如果是管理内容,甚至可以取消打开表单。
此设置中最重要的部分是确保用户使用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