2016-11-09 3 views
0

В настоящее время я работаю над проектом, поскольку одним из требований является использование входа в Windows пользователей в качестве их имени для доступа к MS Access, где они затем будут щелкать там роль, чтобы получить доступ к система. Я никогда не делал этого раньше, но я установил экран входа в Access, который извлекает данные из таблицы. У меня есть код, который успешно вытаскивает логины пользователей Windows, но после этого у меня возникают проблемы. Имя таблицы - tblUser, а пользователи - общий пользователь, HR и администратор. В настоящее время в таблице у меня есть роли, назначенные номера с General User = 1, HR = 2, Admin = 3.Управление доступом на основе ролей, используемое в MS 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 законно использует рабочую станцию ​​(и если это не безопасное предположение, вам необходимо изучить ваши ИТ-политики).

Доступ не поддерживает роли и разрешения. После того, как доступ к которой пользователь в настоящее время вошли в систему и получать их роль от tblUser придется:

  1. Блокировка заднего конца и особенно доступа к таблицам.
  2. Заблокируйте большую часть пользовательского интерфейса, присущего Access, и разрешите использовать только передние формы.
  3. Для каждой формы вашего внешнего интерфейса вручную убедитесь, что любые политики, которые вы хотите применить, принудительно применяются с использованием VBA.

В конечном счете, независимо от того, что вы делаете, кто-то, кто знает, как использовать Access хорошо, может обойти любые блокировки, которые вы установили на место. Если вам нужно защититься от более чем случайного любопытства и честных ошибок, вам нужно будет объединить Access с гораздо более надежной СУБД, такой как SQL-сервер или MySQL.

+0

Спасибо за ответ @ SunKnight0, это будет возможно, если я не привяжу базу данных к Windows/Active Directory. На основе роли пользователей при входе в систему с помощью обычного входа на экран будет отображаться их страница запуска. Лицо, которое будет управлять базой данных, понимает риск, связанный с использованием Access, поскольку пользователи в настоящее время работают на листе excel, но хотят больше функциональности. – Orange56

+0

Жаль, что я был в отпуске. Вам не нужно использовать Windows logon, но это просто добавляет больше работы. В этом случае вам нужно добавить экран входа в систему, а также управлять всем остальным. – SunKnight0