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

Security 如何在Access 2007中实现用户级安全性,security,ms-access,vba,ms-access-2007,Security,Ms Access,Vba,Ms Access 2007,因此,经过一些挖掘,我意识到Access 2007没有内置的用户级安全选项。我需要做的是限制用户可以根据登录用户进行编辑的记录(他们可以查看所有数据,但只能编辑自己的数据)。我想我可以制作一个登录表单,分配密码,然后从那里开始,但我想知道是否有更好的方法来完成这项工作。我也一直面临着这个问题。我的解决方案(尚未被打破)就是这样做。创建一个包含密码的用户表,并创建一个登录表单,用于读取该表中的用户名、密码和用户类型。我使用了两种方法从这里开始:Case语句为该用户的函数或全局变量(在模块中(枚举帮

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

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

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

确保隐藏用户的表

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

它并不完美,但它对我的目的有效,也可能对你的目的有效


我在2010年做了这个,但2007年应该差不多。我也一直面临这个问题。我的解决方案(尚未被打破)就是这样做。创建一个包含密码的用户表,并创建一个登录表单,用于读取该表中的用户名、密码和用户类型。我使用了两种方法从这里开始:
Case
语句为该用户的函数或全局变量(在模块中(枚举帮助))打开特定的导航表单,以及在每个表单的打开事件中检查并更改属性(如
AllowEdits
)的getter函数,和
allowaditions
,甚至取消表单打开,如果它是管理性的东西

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

确保隐藏用户的表

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

它并不完美,但它对我的目的有效,也可能对你的目的有效


我是在2010年做的,但2007年应该差不多一样。

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

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

每个表单开始时的函数检查指定用户是否允许查看或编辑表单。如果他/她被指定为只读,我们将锁定表单上所有循环thr'控件的控件。除此之外,无事可做。或者在设计时将所有控件保持为只读,并使用写入权限代码将其解锁


当向最终用户交付版本时,数据库窗口保持隐藏。这可以防止在数据库中查看表、打开窗体、在数据库窗口中打开报表对象等常见的简单操作。在进行mde/accde之后,可以再做一些调整,这样用户就不容易直接查看表了。通过为数据库中窗体的只读、读写用户权限传递启动、特殊密钥等,我们实现了以下表、逻辑

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

每个表单开始时的函数检查指定用户是否允许查看或编辑表单。如果他/她被指定为只读,我们将锁定表单上所有循环thr'控件的控件。除此之外,无事可做。或者在设计时将所有控件保持为只读,并使用写入权限代码将其解锁


当向最终用户交付版本时,数据库窗口保持隐藏。这可以防止在数据库中查看表、打开窗体、在数据库窗口中打开报表对象等常见的简单操作。在进行mde/accde之后,可以再做一些调整,这样用户就不容易直接查看表了。通过传递启动、特殊密钥等。

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

就我而言,我有三个安全级别。首先,我严格限制了我发送的内容,使得访问源代码变得非常困难,无论做什么,您都必须这样做。其次,我使用不同的DB密码分配不同的访问级别(我使用的是MySQL后端,您可以对SQLServer后端执行相同的操作,但是使用Je)
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