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时,应仅向其显示与分配给他的项目相关的数据
例如,我们有用户:

  • 约翰
  • 欧文
约翰被分配到项目A、B、D。 欧文到B,D

当John登录时,他只能看到数据 与项目A、B、D相关。当Owen 登录后,他只能看到B,D

John和Owen可以同时访问应用程序

后端的相关表

  • 使用者
  • 计划
  • userProject-以多对多关系将用户链接到项目。每个用户可以被分配到一个或多个项目,一个或多个用户可以处理一个项目
我在databasedev.co.uk上遇到过,它基本上使用一个隐藏的表单来存储当前用户的详细信息,然后使用它来过滤其他表单上的数据

所以我的问题是:

这是推荐的解决方案吗?还有更好的选择吗?例如,我想我可以使用前端的表格,而不是隐藏的表格。

编辑重新评论

我认为没有理由不在后端维护一个用户表,其中包含一个可以用于筛选项目的用户、项目联接表

如果您使用的是网络名称(),则可以通过代码获取当前用户,可以将其存储到表单上的隐藏字段中,这对于将表单设置为相关项目非常有用,也可以将名称存储到自定义数据库属性()

下面的代码适用于查找已登录用户的数量

您可以使用特定于提供程序的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,我发现它在访问时的用法非常相似,包括查询生成器、属性窗口等。