2016-11-09 57 views
0

我目前正在一個項目上工作,其中一個要求是使用用戶的Windows登錄作爲他們的登錄MS Access,然後他們會在那裏點擊角色以獲得進入系統。我從來沒有這樣做過,但我已經在Access中建立了一個登錄屏幕,它從表格中提取數據。我有成功拉動用戶Windows登錄的代碼,但在此之後我遇到了麻煩。表名是tblUser,用戶是普通用戶,人力資源和管理員。目前,在該表中我有指定的號碼與一般用戶= 1,HR = 2的角色,管理員= 3MS Access中使用的基於角色的訪問控制

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 

我希望這是足夠的信息,我正在努力完成。如果需要更多信息,請告訴我。謝謝。

+0

未拆分訪問的登錄屏幕是一個笑話。無論如何,像所有的會員/角色模型一樣,您需要擁有用戶表,角色表,user_vs_roles表。最後,登錄,註銷,分配角色,根據登錄用戶讀取/驗證用戶角色的方法等。 –

回答

0

如果角色綁定到Windows/Active Directory登錄,則不需要登錄屏幕。您應該假定Windows中的登錄用戶合法使用工作站(如果這不是一個安全的假設,則需要查看您的IT策略)。

訪問不支持角色和權限。在訪問當前登錄的用戶並從tblUser得到他們的角色將不得不:

  1. 鎖定後端,特別是訪問表。
  2. 鎖定Access固有的大部分用戶界面,只允許使用您的前端表單。
  3. 對於您的每個前端形式,請手動確保您希望執行的任何策略都是使用VBA執行的。

最終,無論你做什麼,知道如何使用Access的人都可以繞過任何形式的鎖定。如果您需要防範偶然的好奇心和誠實錯誤,則需要將Access與更強大的DBMS(如SQL服務器或MySQL)結合使用。

+0

感謝回覆@ SunKnight0如果我不將數據庫綁定到Windows/Active Directory,這將成爲可能。基於用戶在屏幕上登錄傳統登錄時的角色將顯示各種啓動頁面。將要管理數據庫的人理解使用Access所帶來的風險,因爲用戶目前正在使用Excel工作表,但希望獲得更多功能。 – Orange56

+0

對不起,我正在度假。您不必使用Windows登錄,但只需添加更多工作。在這種情況下,除了管理其他所有內容之外,您還必須添加登錄屏幕。 – SunKnight0

相關問題