限制少数用户访问数据库。 (MS 访问 2007)

Posted

技术标签:

【中文标题】限制少数用户访问数据库。 (MS 访问 2007)【英文标题】:Limit access to a database to a few users. (MS Access 2007) 【发布时间】:2013-08-15 16:52:33 【问题描述】:

如果有人能帮我解决这个问题,我将不胜感激。

我是 Access 的新手,我的老板给了我一个项目来为我们的团队创建一个工具(我在保险业工作)。我已经完成了项目的大部分工作,但是我的老板希望编辑和更新数据库仅限于我们团队的少数成员(是的,不止一个人可以修改),但由于该工具将用于广泛的目的,她希望部门的其他人(50 人以上)只能访问某些具有完成工作的按钮等的表单。

到目前为止,在这个数据库中,我有 3 个链接表(包含所有数据)、查询、报告、联合查询以及创建表和 3 个表单。我希望大多数人只查看表单并仅在表单视图中使用它,但我团队的 4 名成员可以做任何他们想做的事情,因为他们需要不断地编辑数据。

有没有人暗示我应该从哪里开始?编程不是我的一杯茶,所以我非常感谢一些参考等或任何帮助!

【问题讨论】:

您是否需要一种安全策略来防止非特权用户更改存储的数据,并且即使是坚定的老练用户也无法规避?或者您是否可以接受某种形式的安全措施,使此类用户不方便做您不希望他们做的事情? 我不得不说前者。我只希望少数 (3-4) 个用户拥有类似管理员的权限 - 让他们为所欲为。但对于其余的,我希望他们登录,然后将他们带到我为他们设置的表单,并通过表单上的按钮运行查询/报告。我不希望他们看到和/或编辑表格等。 那么您必须使用 db 引擎来强制执行该级别的安全性。您在应用程序级别实施的安全措施(VBA、表单属性等)都很容易被击败。 我该怎么做? 如果您想继续使用 Access 进行数据存储,请使用 MDB 来保存数据。然后,您可以设置 ULS(用户级安全性)以向您的用户组授予适当的权限。 MS 从 ACCDB 数据库格式中删除了 ULS 支持,但 Access 版本 >= 2007 仍然可以使用继续支持 ULS 的 MDB 格式。 【参考方案1】:

如果您点击文件,然后点击选项,然后选择当前数据库,您可以在打开访问数据库时强制弹出特定表单。此外,您可以剥夺用户浏览整个数据库内容的能力。您还可以带走导航栏和菜单等。我已经这样做了一段时间,所以这里有一些建议。有一个主菜单表单,其中包含访问文件中每个表单的按钮。当用户打开数据库时,他或她应该会看到该主菜单表单。从那里,他们可以单击按钮,将他们引导到可以解决他们所拥有的需求的表单。

*** 不允许我发表评论,所以这就是我要说的。对于那些你想访问它的人,你可以让他们在打开数据库时保持轮班。如果他们这样做,他们将打开数据库,就像他们是数据库的“管理员”一样。如果他们按住 shift 键,他们可以随意编辑它。

【讨论】:

但这不会为所有人隐藏它吗?我希望没有几个人像我一样有访问权限。 p.s 使用这种方法,用户不能重复您自己提到的步骤并取消隐藏等所有内容吗? 这回答了你的问题吗?【参考方案2】:

我通过表格完成了这项工作,为用户分配了特定的“安全级别”并通过登录屏幕检查他们的安全级别。然后我隐藏登录屏幕(而不是关闭它),以便任何时候打开表单,它都可以对用户的安全级别进行 DLookup,然后确定用户是否具有对表单的读、写或读/写访问权限。我也可以根据相同的逻辑隐藏表单上的按钮。

从 2007 年开始,Access 移除了他们的原生安全性,这无论如何都是非常低效的。

【讨论】:

我正在使用 Access 2007!但我的想法和你提到的一样。我创建了一个包含用户名和密码的表以及一个名为“IsAdmin”的是/否字段。使用 DLookup,我可以确定一个人是否是管理员,从而​​为他们分配访问权限。但是我在为此编写代码时遇到了麻烦。在登录按钮中添加以下内容没有帮助 Me.AllowEdits = DLookup("IsAdmin", "RATusers", "[UserID]=" & Me.cboUser.Value) 有什么想法吗? 应该可以的。您是否检查过以确保 Me.cboUser.Value 返回您所期望的?另一种选择是尝试 If/Then/Else,例如:xxAdmin = DLookup("IsAdmin", "RATusers", "[UserID]=" & Me.cboUser.Value)。然后执行 If/Then/Else,例如: If xxAdmin = -1 Then Me.AllowEdits = True Else Me.AllowEdits = False EndIf。当我这样做时,我实际上将所有对象的 Enabled 属性设置为 True 或 False,但这两个选项都是可行的。 如何检查?我知道它可以工作,因为 cboUser 是登录屏幕上的组合框,我能够使用下拉菜单正确登录。我应该在代码也在检查有效用户名/密码组合的登录命令按钮中使用 IF 语句,还是应该在登录表单的事件处理程序中输入它?例如 Form_Current() If xxAdmin..... ? 在代码中设置一个断点,然后将鼠标悬停在显示 Me.cboUser.Value 的部分上,看看会弹出什么。或者,您可以在代码中放置一个消息框,其中只有 Me.cboUser.Value 的值,它也会告诉您它认为它是什么。至于它去哪里,我猜它会在每个表单的 Load 事件中? 如何在此处粘贴我的代码?我想这可能有助于你看到它?

以上是关于限制少数用户访问数据库。 (MS 访问 2007)的主要内容,如果未能解决你的问题,请参考以下文章

MS-Access 2007 - 如何在点击事件中以编程方式访问子表单列数据

无法使用 MS Access 2007 访问 ODBC DB

适合初学者的 ADO 示例

ms 访问 2007 更新错误运行时错误 3464,条件表达式中的数据类型不匹配

Angularjs:限制对除少数页面之外的所有页面的访问

限制除少数页面外的整个 WP 站点访问 [关闭]