首页 > 解决方案 > 如何使用 .net 在 ms 访问中锁定表

问题描述

所以我一直在寻找一段时间,但我还没有找到我真正需要的东西:

我有一个使用一些 2001 毫秒访问数据库 (MDB) 的旧应用程序,但是我最近要求对某个表进行密码锁定以进行编辑。不幸的是,我无法访问或修改旧程序,因此我不得不尝试从外部“锁定”该表。

理想的解决方案是通过在外部程序(例如.net)中输入密码来锁定/解锁表。我还没有找到合适的方法来锁定表。我看过的一些解决方案是:

1-拆分数据库,但是如果不更改程序的源代码就无法工作,我不确定它最终会起作用。

2-保留“锁定”表的记录副本,如果有任何更改,请重新写入

然而,这感觉非常“hack-y”所以我想看看我是否可以锁定这个数据库以获得更干净的解决方案

我知道 MS access 2013 中存在这样的功能,但我不确定它是否存在于以前的版本中。

标签: c#.netdatabasems-access

解决方案


实际上,并没有真正的内置功能可以让您锁定和解锁表。但是,存在工作组安全性,或所谓的用户级安全性 (ULS)。

因此,您不会“锁定”表,而是授予用户对给定表的“写入/更新”权限。因此,对于 mdb 文件格式,ULS 无疑是一个选项,可让您控制对给定对象(表/表单/报告等)的何种权限。

因此,您可以通过自动添加或删除默认的管理员登录,例如一个安全组,该安全组为数据库用户提供“写入”权限。请注意,我说的是“默认”管理员登录,因为如果您使用任何其他用户名来启动 Access 数据库,则在 Access 启动时将提示用户输入登录 + 密码。

但是,如前所述,这将假定您在该数据库上设置 ULS。(即:向数据库添加工作组安全性)。

如果您不想设置 ULS 的麻烦,那么下一个问题是 Access UI 被锁定了吗?

通常,应用程序会锁定 UI,因此用户不能使用内置的 Access UI,而只能使用表单/报告/菜单与数据进行交互。如果 UI 被锁定,那么您可以简单地将编辑数据的表单设置为只读。

这种方法并不“非常”安全,因为用户可以将数据导入另一个数据库,但它可能足以防止用户意外编辑数据。如果用户具有良好的访问技能,他们当然可以绕过这种方法。然而,隐藏和阻止用户直接打开表格并且只允许他们使用开发人员提供的表格等将允许“轻松”切换用户使用的表格。

同样,这个建议取决于现在应用程序 UI 的锁定程度,以及开发人员为防止使用内置功能的访问所做的努力。

ULS 或所谓的工作组安全不需要 UI 更改,但您必须在副本上测试/尝试 ULS,因为它是一个复杂的主题。但是,ULS 将因此允许对给定表应用某种安全权限,这包括对给定对象(例如表)的读取能力、写入能力,甚至没有权限。


推荐阅读