Ms access MS Access 2007-识别用户并基于此限制对数据的访问
考虑到设立:Ms access MS Access 2007-识别用户并基于此限制对数据的访问,ms-access,authentication,authorization,ms-access-2007,Ms Access,Authentication,Authorization,Ms Access 2007,考虑到设立: Ms Access应用程序分为前端和后端=两个本机Ms Access 前端仅由表单组成-它将是访问数据的唯一方式 分发给每台用户机器的前端副本(感谢回答) 我需要实现以下场景: 用户数小于20的Ms Access应用程序 每个用户被分配到1到10个项目 当用户打开MS Access时,应仅向其显示与分配给他的项目相关的数据 例如,我们有用户: 约翰 欧文 约翰被分配到项目A、B、D。 欧文到B,D 当John登录时,他只能看到数据 与项目A、B、D相关。当Owen 登录
- Ms Access应用程序分为前端和后端=两个本机Ms Access
- 前端仅由表单组成-它将是访问数据的唯一方式
- 分发给每台用户机器的前端副本(感谢回答)
- 用户数小于20的Ms Access应用程序
- 每个用户被分配到1到10个项目
- 当用户打开MS Access时,应仅向其显示与分配给他的项目相关的数据
- 约翰
- 欧文
- 使用者
- 计划
- userProject-以多对多关系将用户链接到项目。每个用户可以被分配到一个或多个项目,一个或多个用户可以处理一个项目
我认为没有理由不在后端维护一个用户表,其中包含一个可以用于筛选项目的用户、项目联接表 如果您使用的是网络名称(),则可以通过代码获取当前用户,可以将其存储到表单上的隐藏字段中,这对于将表单设置为相关项目非常有用,也可以将名称存储到自定义数据库属性() 下面的代码适用于查找已登录用户的数量 您可以使用特定于提供程序的ADO模式。您需要传递有效的连接,例如:
ADOUserList Currentproject.Connection
Public Sub ADOUserList(oConn As ADODB.Connection)
Dim rs As ADODB.Recordset
Set rs = oConn.OpenSchema(adSchemaProviderSpecific, , "{947bb102-5d43-11d1-bdbf-00c04fb92675}")
Debug.Print rs.GetString
rs.Close
End Sub
更多信息:我有一个类似的情况,如果稍微复杂一点的话。在我的例子中,用户被分配到用户组,这些用户组对访问对象(表单、报表等)具有不同的权限。他们还拥有分配给他们的项目和首选项。表:
用户
用户组
user\u pref
项目
user\u项目
但是,我仍然使用一个隐藏表单(session
),它保存当前登录用户的会话信息。例如:用户id、用户名称、分配项目的子表单、首选项(如“当前项目”)
最后,模块basSession包含我需要的所有函数,以获取
或设置
任何隐藏形式的会话信息,例如gfSession\u GetUserID()
HTH请注意,在您当前的设置中,没有一种方法可以“识别用户并基于此限制对数据的访问”。如果所有数据都驻留在共享的后端访问文件中,则用户只需打开后端数据库并浏览所有数据即可。实际限制用户访问数据的唯一方法是使用数据库服务器
如果您想访问Access,我建议您为所有(重要)表创建查询,并在表单中使用这些查询。在查询中包含WHERE语句,该语句将输出限制为用户可以查看的内容。您可以在打开数据库时更改完整的SQL,或者在查询的WHERE部分包含一个全局变量,并将该变量设置为当前用户ID。Remou,如果我错了,请纠正我,但我相信它会提供当前用户列表。这不是问题所在。我要求提供一种解决方案,根据指定项目的用户分配情况,过滤前端显示给用户的数据。抱歉,我误解了您的问题,因为有20个用户已登录,而不是20个可用用户。我看不出您有什么理由不使用用户的联接表在后端维护该表,可用于筛选项目的项目。所有表都将存储在后端,前端的额外表只需存储登录到该特定前端的用户id(而不是以隐藏形式存储该数据),即可用于筛选数据。我不知道如何将其存储在后端,因为可能有许多用户同时从不同的前端登录。但是我不熟悉access为什么需要在表中存储已登录用户的id?只有一个字段的表格似乎没有什么意义。谢谢,听起来很有趣。至少与我更熟悉的标准web应用程序方法类似。我实际上可能会使用这种方法是的,我使用了我自己的LAMP开发中的
session
概念。仅供参考,我使用了一个名为CodeCharge Studio(使用PHP)的web应用程序IDE,我发现它在访问时的用法非常相似,包括查询生成器、属性窗口等。