MS Access 中使用的基于角色的访问控制
Role-based access control used in MS Access
我目前正在做一个项目,其中一项要求是使用用户 windows 登录名作为他们的 MS Access 登录名,然后他们可以单击那里的角色来访问系统。我以前从未这样做过,但我已经在 Access 中设置了一个登录屏幕,它从 table 中提取数据。我有成功拉取用户 windows 登录的代码,但此后我遇到了麻烦。 table 名称是 tblUser,用户是 General User、HR 和 Admin。目前,在 table 中,我分配的角色编号为一般用户 = 1、HR = 2、管理员 = 3。
The Login Screen:
Log On
General User
HR
Admin
Code that pulls the user information:
Private Sub Form_Load()
Stop
Debug.Print Environ("UserName")
Debug.Print Environ$("ComputerName")
Dim strVar As String
Dim i As Long
For i = 1 To 255
strVar = Environ$(i)
If LenB(strVar) = 0& Then Exit For
Debug.Print strVar
Next
End Sub
以下是我过去为登录屏幕构建的代码。通过把所有东西都画出来,它似乎是同一个过程,但我不确定。我可以对下面的代码做些什么吗?
Private Sub btnLogin_Click()
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("tblUser", dbOpenSnapshot, dbReadOnly)
rs.FindFirst "UserName='" & Me.txtUserName & "'"
If rs.NoMatch = True Then
Me.lblWrongUser.Visible = True
Me.txtUserName.SetFocus
Exit Sub
End If
Me.lblWrongUser.Visible = False
If rs!Password <> Nz(Me.txtPassword, "") Then
Me.lblWrongPass.Visible = True
Me.txtPassword.SetFocus
Exit Sub
End If
Me.lblWrongPass.Visible = False
If rs!EmployeeType_ID = 3 Then
Dim prop As Property
On Error GoTo SetProperty
Set prop = CurrentDb.CreateProperty("AllowBypassKey", dbBoolean, False)
CurrentDb.Properties.Append prop
SetProperty:
If MsgBox("Would you like to turn on the bypass key?", vbYesNo, "Allow Bypass") = vbYes Then
CurrentDb.Properties("AllowBypassKey") = True
Else
CurrentDb.Properties("AllowBypassKey") = False
End If
End If
DoCmd.OpenForm "frmPersonal_Information"
DoCmd.Close acForm, Me.Name
End Sub
我希望这些信息足以说明我要完成的任务。如果需要更多信息,请告诉我。谢谢你。
如果角色绑定到您的 Windows/Active 目录登录,则不需要登录屏幕。您应该假设 Windows 中的登录用户正在合法使用工作站(如果这不是一个安全的假设,您需要查看您的 IT 策略)。
Access 不支持角色和权限。在访问当前登录的用户并从 tblUser
获得他们的角色后,必须:
- 锁定后端,尤其是对表的访问。
- 锁定 Access 固有的大部分用户界面,只允许使用您的前端表单。
- 对于前端的每种形式,请手动确保使用 VBA.
强制执行您希望执行的任何策略
最终,无论您做什么,知道如何很好地使用 Access 的人都可以绕过您设置的任何类型的锁定。如果您需要防范的不仅仅是偶然的好奇心和诚实的错误,您需要将 Access 与更强大的 DBMS 结合使用,例如 SQL 服务器或 MySQL.
我目前正在做一个项目,其中一项要求是使用用户 windows 登录名作为他们的 MS Access 登录名,然后他们可以单击那里的角色来访问系统。我以前从未这样做过,但我已经在 Access 中设置了一个登录屏幕,它从 table 中提取数据。我有成功拉取用户 windows 登录的代码,但此后我遇到了麻烦。 table 名称是 tblUser,用户是 General User、HR 和 Admin。目前,在 table 中,我分配的角色编号为一般用户 = 1、HR = 2、管理员 = 3。
The Login Screen:
Log On
General User
HR
Admin
Code that pulls the user information:
Private Sub Form_Load()
Stop
Debug.Print Environ("UserName")
Debug.Print Environ$("ComputerName")
Dim strVar As String
Dim i As Long
For i = 1 To 255
strVar = Environ$(i)
If LenB(strVar) = 0& Then Exit For
Debug.Print strVar
Next
End Sub
以下是我过去为登录屏幕构建的代码。通过把所有东西都画出来,它似乎是同一个过程,但我不确定。我可以对下面的代码做些什么吗?
Private Sub btnLogin_Click()
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("tblUser", dbOpenSnapshot, dbReadOnly)
rs.FindFirst "UserName='" & Me.txtUserName & "'"
If rs.NoMatch = True Then
Me.lblWrongUser.Visible = True
Me.txtUserName.SetFocus
Exit Sub
End If
Me.lblWrongUser.Visible = False
If rs!Password <> Nz(Me.txtPassword, "") Then
Me.lblWrongPass.Visible = True
Me.txtPassword.SetFocus
Exit Sub
End If
Me.lblWrongPass.Visible = False
If rs!EmployeeType_ID = 3 Then
Dim prop As Property
On Error GoTo SetProperty
Set prop = CurrentDb.CreateProperty("AllowBypassKey", dbBoolean, False)
CurrentDb.Properties.Append prop
SetProperty:
If MsgBox("Would you like to turn on the bypass key?", vbYesNo, "Allow Bypass") = vbYes Then
CurrentDb.Properties("AllowBypassKey") = True
Else
CurrentDb.Properties("AllowBypassKey") = False
End If
End If
DoCmd.OpenForm "frmPersonal_Information"
DoCmd.Close acForm, Me.Name
End Sub
我希望这些信息足以说明我要完成的任务。如果需要更多信息,请告诉我。谢谢你。
如果角色绑定到您的 Windows/Active 目录登录,则不需要登录屏幕。您应该假设 Windows 中的登录用户正在合法使用工作站(如果这不是一个安全的假设,您需要查看您的 IT 策略)。
Access 不支持角色和权限。在访问当前登录的用户并从 tblUser
获得他们的角色后,必须:
- 锁定后端,尤其是对表的访问。
- 锁定 Access 固有的大部分用户界面,只允许使用您的前端表单。
- 对于前端的每种形式,请手动确保使用 VBA. 强制执行您希望执行的任何策略
最终,无论您做什么,知道如何很好地使用 Access 的人都可以绕过您设置的任何类型的锁定。如果您需要防范的不仅仅是偶然的好奇心和诚实的错误,您需要将 Access 与更强大的 DBMS 结合使用,例如 SQL 服务器或 MySQL.