gpt4 book ai didi

mysql - Microsoft Access 2013 数据库中的用户管理

转载 作者:行者123 更新时间:2023-11-29 13:36:57 25 4
gpt4 key购买 nike

我正在使用 Microsoft Access 2013 构建一个系统,该系统使用 MySQL 作为后端。我正在尝试找出一种方法来进行某种基本的用户管理,理想情况下用户在启动数据库时必须“登录”,然后系统可以轻松 Access 他们的用户名正在使用它。我尝试过寻找解决方案,但大多数只是告诉我使用 Office 365 或 sharepoint,目前这些都不是选项。有谁知道如何实现这一目标?提前致谢!

最佳答案

我建议构建您自己的用户存储和登录系统。您基本上需要创建自己的用户表(在您的情况下在 MySQL 中),制作表单来管理用户,制作登录表单,并编写代码来控制登录过程。

登录通常包括根据用户表中的现有数据检查他们输入的某种凭据。您通常可以在 Access 中使用 DLookup 或 DCount 语句执行此操作,但我通常最终使用 DAO 或 ADO 记录集,因为我喜欢从用户表中提取多个值,而且我也喜欢立即将内容写回其中,例如 LastLogin 日期时间、LastLogin 计算机名称等。

我实际上编写了一个示例数据库,您可以下载here 。它需要重写。自 2011 年 1 月以来,我已经改变了相当多的做法。但是再给我一年,就需要再次重写。

我通常对登录表单进行编程,以便用户输入姓名首字母,然后输入密码。如果您选择此路线,则需要在“缩写”字段上设置唯一索引以防止重复。如果您将拥有很多用户,则需要使用用户名,理论上它仍然可以是用户的首字母缩写。

这是我验证用户身份的代码。请注意,这远非真正安全。这假设密码以纯文本形式存储。理论上,用户可以尝试从这里进行 SQL 注入(inject),因为我没有使用参数化查询或从输入中删除特殊字符,例如 @ 或 ;。

Private Function AuthenticateUser() As Boolean

Dim sInitials As String
Dim sPassword As String
sInitials = Trim(Nz(Me.txtInitials, ""))
sPassword = Trim(Nz(Me.txtPassword, ""))

If sInitials = "" Or sPassword = "" Then
'Logging in with blank passwords is not allowed
AuthenticateUser = False
Exit Function
End If

If DCount("EmployeeID", "tblEmployees", "[Initials] = '" & Replace(sInitials, "'", "''") & "' AND Password = '" & Replace(sPassword, "'", "''") & "'", True) = 0 Then
MsgBox "Invalid Credentials."
AuthenticateUser = False
Exit Function
Else
Dim rs As New DAO.Recordset
Dim sSQL As String
sSQL = "SELECT * FROM tblEmployees WHERE initials = '" & Replace(sInitials, "'", "''") & "'"
Set rs = CurrentDb.OpenRecordset(sSQL)
If Not (rs.EOF And rs.BOF) Then
'Config is an instance of a User Defined Type. It could also be a class object.
Config.UserInitials = rs("Initials")
Config.UserFullName = rs("EmployeeName")
Config.UserID = rs("EmployeeID")
rs.Edit
rs("LastLoginDateTime") = Now()
rs("LastLoginComputer") = "Function Required to Get Computer Name"
rs("ProgVersion") = "Your Program Version Number"
rs("CurrentDbPath") = Left(CurrentProject.path & "\" & CurrentProject.Name, 254)
rs.Update
End If
rs.Close
Set rs = Nothing
AuthenticateUser = True
End If

End Function

在我的应用程序中,我使用全局对象,在本例中是用户定义类型的实例,我将其称为 Config。我在应用程序运行时期间将任何类型的应用程序运行时相关设置存储在其中。当然,当用户关闭应用程序或发生代码重置时(这在 Access 运行时不会发生,但在开发过程中经常发生),该对象会被销毁。您可以使用类对象而不是用户定义类型。或者您可以对所有内容使用单独的全局变量,但我不建议这样做(这就是我以前所做的)。用户定义类型仅允许您将全局变量分组在一起,并为您提供了一种在设计时通过键入 Config. 在代码中引用它们的简单方法,然后使用 Intellisense 调出每个选项(假设您已启用它)。

如果您希望您的设置在代码重置后仍然有效,则需要使用 TempVars。 TempVars 在 Access 2007 中可用。我现在不使用它们(与我的示例数据库相反),因为它们不是强类型的。没有智能感知可以帮助您获取正确的 TempVar,并且从技术上讲您可以引用甚至不存在的 TempVar,并且 Access 不会抛出错误。我认为 TempVars 实际上只是一个具有所有缺点的 Dictionary 对象,并且具有在代码重置后幸存的唯一好处。我可以想象在那里存储一个连接字符串,但我想知道是否值得使用 TempVars 来做任何事情。如果发生代码重置,我的整个应用程序无论如何都需要重新加载,因为当应用程序首次打开并且用户首次登录时我设置了很多全局对象和变量。

仅供引用,在以前版本的 Access 中内置了用户安全功能。我认为 Microsoft 从 2007 年开始就停止了该功能。我从未真正使用过它,所以当它停止时我并没有错过它。

关于mysql - Microsoft Access 2013 数据库中的用户管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18615125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com