繁体   English   中英

如何控制Access数据库的用户权限?

[英]How to control user rights to an Access database?

允许一个用户写访问权限以及其他人对本地网络上的MS Access数据库进行只读访问的最简单方法是什么?

我相信我的用户,但不幸的是,只要取消选择表的行,Access就会保存对数据的更改。 保存意外击键,用户不要求保存更改。

关于控制Jet数据存储的用户权限的一些想法:

  1. 如果你真的想锁定它,你永远不会用Jet管理它,因为它本身就容易受到攻击,因为用户必须拥有对MDB文件的WRITE访问权限。

  2. 如果您满足于控制前端应用程序中数据的权限,则可以提供不同的前端(一个用于WRITE用户,另一个用于READ-ONLY)。

  3. 如果您不使用ACCDB格式,则可以使用Jet用户级安全性。 如果您真的想要锁定对数据的访问权限,那么这是一项令人惊讶的复杂技术 - 您必须遵循Jet安全白皮书中的所有说明,或者您的数据将对使用标准Jet工作组文件的任何人开放。 甚至一旦你完成,它是可以破解的(虽然不是没有花费$$$购买破解软件)。 顺便说一句,Access 2007之前的数据库密码完全无用且容易破解。 Access 2007通过提高数据加密级别来增强安全性,但数据库密码会导致许多问题,并且不允许您具有多个访问级别(除非您提供两个不同的前端使用不同的密码 - 参见#2)。

  4. 如果您只想使用Jet ULS来控制前端的访问权限,则可以将用户添加到组中,然后检查前端UI对象(即表单)中的组成员身份,并向用户授予WRITE权限。在提供该级别访问权限的用户组中。 最简单的方法是假设您拥有比具有WRITE权限的用户更多的READ-ONLY用户,那就是让READ-ONLY用户以默认管理员用户身份登录(即,您没有为他们的设置做任何事情),并拥有WRITE用户使用WRITE权限以组中的用户身份登录。 换句话说,如果它们未以用户“admin”身份登录,则它们具有完全WRITE访问权限。

  5. 另一种方法是使用NTFS安全组。 用于此的API代码可在Access Web上找到,但它确实需要Windows管理员为您实施。 同样,您将限制前端应用程序中的访问权限,而不是实际限制后端MDB中的用户权限。

只有Jet ULS实际上允许您阻止READ-ONLY用户(没有破解您的工作组文件)编辑您的数据。 所有用户都必须具有对后端MDB的网络访问权限,但即使没有实现Jet ULS的跳跃,也可能使他们难以获取数据。 以下是执行此操作的一些步骤(是的,所有这些都是“默默无闻的安全”形式,并且只会减慢确定要破解后端的READ-ONLY用户):

  1. 右键单击后端的每个表,然后打开HIDDEN属性。 这也可以在代码中完成(请参阅“帮助”中的SetHiddenAttribute)。 当然,如果最终用户将其Access选项设置为显示隐藏表,则不会执行任何操作。 但大多数最终用户并不知道,如果您的用户在运行时运行您的应用程序,他们将无法选择。

  2. 将后端数据库的“启动属性”更改为显示数据库窗口,并且使用特殊键。 您可以在“AllowBypassKey”的“帮助”主题中找到用于设置启动属性的代码。

  3. 在后端,使用一个命令Quit创建一个名为AutoExec的宏。 禁用特殊键后,无法阻止此宏的执行,并且只要用户尝试打开后端(即使他们按住SHIFT键,即绕过所有启动例程的标准击键) ,数据库(和Access的实例)将关闭。

现在,所有这些事情都可以被知道自己在做什么的人解开。 如果你给了我一个实现这些东西的后端,我会在大约5分钟内进入它,只需在另一个Access数据库中运行代码来更改所有这些启动属性以便我访问。

但是您的最终用户可能没有那种专业水平。 任何这样的用户可能应该是一个WRITE用户,不是吗? :)

是的,当然 - 所有这些事情都很容易被任何知道如何做的人所破解。 但是对于拥有合适工具的人来说,在几秒钟内闯入你的房子也很容易。 这并不意味着你不会锁门,即使它不是防盗的防弹保护。

另一个考虑因素是,如果您仅向用户提供Access运行时而不是完全Access,则他们将无法撤消后端MDB中的任何这些设置。

最后一个:

安全不仅仅是一个技术问题 - 事实上,大部分问题都是人员问题。 为了让人们完成工作,您必须在一定程度上信任他们,让他们访问您的数据。 例如,对于不值得信任的系统管理员的问题没有技术解决方案,完全保护数据的唯一方法就是根本不给他们任何访问权限。

最简单的方法是使用共享权限。 授予对组的写访问权限,并将必须写入该用户的用户放入该组。 将其他人放在阅读组中。 当然,这假设您有一个Windows域。

是一个站点,其中包含有关保护Access数据库的一些信息。 它处理Access 2000,可能有更多版本的选项。

这是一个厚颜无耻的答案,但如果您需要更好的安全性,请认真考虑升级到更强大的RDBMS。

我认为可以使用ODBC连接将Access用作几乎所有数据库的接口。 例如,我已成功配置了一个SQL Server 2008 Express Edition数据库,其中包含2个用户,一个读/写和一个只读。 我已经能够通过打开ODBC数据源从Access连接到数据库。 因此,用户可以使用他们熟悉的基于Office的报告生成和邮件合并功能。 但是您希望使用任何数据库服务器。

这个对话可能有点旧,但由于某些原因,我最近遇到了同样的问题。 它不适合所有人,因为它不依赖于M $ SQL Server而是依赖于MySQL。 使用MySQL ODBC连接器(可在此处获取: http//dev.mysql.com/downloads/connector/odbc/ ),并将表存储在MySQL服务器上。 Access用户对表的权限将继承MySQL用户的权限。 很容易定制......

事实上, 访问数据库没有功能安全性

下面的链接销售将“恢复”您的访问数据库的软件即使它有一个密码。

他们存在是件好事。 当他们以前的程序员死了,没有其他人拥有密码时,他们的程序保存了我的一个客户的屁股。 由于这个程序,我们无法进入,没有数据丢失。

http://www.stellarinfo.com/access-recovery.htm

在你想到之前,不,我不为他们工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM