Forms MS Access 2003中的密码保护窗体

Forms MS Access 2003中的密码保护窗体,forms,ms-access,Forms,Ms Access,我正在尝试为我的数据库创建登录名,我不想使用Microsoft的方式。我想让用户使用用户名和密码登录,然后在“tblUsers”表中验证该信息 我用dlookup验证了“UserID”和“LoginID” Nz(DLookup("[LoginID]", "tblUsers", "[UserID] = '" & Me.txtUserID & "'"), "") =Me.txtPassword 我现在的问题是,我希望菜单上的某些项目对没有适当级别的用户不可用;如果他们只是一个“编

我正在尝试为我的数据库创建登录名,我不想使用Microsoft的方式。我想让用户使用用户名和密码登录,然后在“tblUsers”表中验证该信息

我用dlookup验证了“UserID”和“LoginID”

Nz(DLookup("[LoginID]", "tblUsers", "[UserID] = '" & Me.txtUserID & "'"), "")
 =Me.txtPassword
我现在的问题是,我希望菜单上的某些项目对没有适当级别的用户不可用;如果他们只是一个“编辑”或“读者”,那么我不想让他们访问我放置所有管理表单的“管理”按钮


在我使用dLookup验证用户名和密码之后,我现在如何找到它们的“级别”并为不同的菜单项分配权限?谢谢。

假设您的DLookup已经找到一个现有的LoginID值,您可以使用另一个来检索该用户的LevelID。然后根据其级别ID启用/禁用管理命令按钮

我会在表单加载中建议类似的内容:

Dim lngLevelID As Long
lngLevelID = DLookup("[LevelID]", "tblUsers", "[LoginID] = " & Me.txtLoginID)
Me.cmdAdmin.Enabled = (lngLevelID = 3)
注意:假设您之前已将用户的LoginID号加载到名为txtlLoginID的文本框中。如果您不想让用户看到,txtLoginID可能会被隐藏。或者可以通过其他方法获取LoginID值

如果在Level和LevelID之间有一对一的匹配,则不需要在tbluser中存储这两个值。您可以创建一个UserLevels查找表来保存这两个数据,并在tblUsers中将LevelID作为外键存储到UserLevels中相应的行中


最后,您使用的策略可以工作,但安全性不稳定。作为对愿意遵守规则的用户的“指导”,这是可以的。但即使是不熟练的用户也可以轻松绕过它。如果您的安全需求非常严格,请寻找不同的方法。

您意识到这作为任何有意义的安全措施都是毫无价值的。在我看来,用这种方式欺骗你的用户是非常错误的——让天真的用户产生一种错觉,认为一个系统是“安全的”,而它不是;你是一位了不起的老师!我确实尝试了你的代码,它成功了,但你也教会了我,我的数据库将不安全,我现在正在寻求了解有关使用msaccess用户级安全向导使我的数据库更安全的更多信息。谢谢大家!@珍:谢谢你的慷慨评论。ULS提供了比“自己编写代码”表单功能更好的安全选项。但要正确设置可能会很有挑战性,而且它仍然很容易被击败。根据您的安全需要,这可能是正常的。但是,如果这些需求足够严格(比如“必须是防弹的”),请考虑使用Access作为企业级关系数据库管理系统中存储的数据的前端。SQL Server通常建议与Access一起使用。还有很多其他选择。
Dim lngLevelID As Long
lngLevelID = DLookup("[LevelID]", "tblUsers", "[LoginID] = " & Me.txtLoginID)
Me.cmdAdmin.Enabled = (lngLevelID = 3)