Безопасность - критическая точка доступа в MS Access. Если вы хотите реализовать функцию входа в систему, я предполагаю, что ваша бизнес-модель содержит как-то конфиденциальную информацию. Такая бизнес-модель обычно ожидает/требует более чем средних навыков разработки программного обеспечения.
Сначала вам нужно определить/создать свой бизнес-требования, начиная от
- Если MS Access является то, что для вас, чтобы начать.
- Тогда какая версия MS Access использовать
- однопользовательские несколько пользователей, локальный доступа или доступ в Интернете
- если уровень безопасности обеспечивается MS Access достаточно для вас.
- масштабируемость
- и т.д ...
MS Access позволяет видеть содержимое таблицы, что означает, когда вы сохраняете пользователь детали любого пользователя имеет доступ к таблице будет увидеть пользовательские данные и иметь возможность использовать/обходить их.
Вы получаете какой-то секрет, когда вы скомпилируете свою базу данных Access в MDE или ACCDE, что предотвратит доступ пользователей к функциям VBA или переход в режим разработки. Это потенциально поможет вам во многих аспектах повысить безопасность. Включая выпуск обновлений вашего внешнего приложения.
Чтобы ответить на ваш вопрос относительно уровня доступа пользователей. Я бы лично разбил базу данных прежде чем что-либо еще, чтобы поддерживать централизованные данные во всем приложении. если ваше приложение довольно мало, вы можете обратиться к этому руководству для простой формы входа в систему. http://www.databasedev.co.uk/login.html
Чтобы отличить уровни пользователей, вам необходимо создать таблицу ролей пользователя и назначить роли для каждого пользователя. Создайте новую функцию, которая проверяет, назначен ли пользователь/назначен запрошенным ролям, если да позволяет выполнить действие. Если не предупредить пользователя. что-то вроде этого:
таблицы, как:
- tbl_user: {user_id, user_name ....}
- tbl_roles: {role_id, role_name, ...}
- tbl_user_roles: {ROLE_ID, user_id, assigned_date, ...}
простая функция, чтобы проверить уровень пользователя:
Public Function FN_IS_USER_IN_ROLE(iUSER_ID As Long, iREQ_ROLE As String) As Boolean
Dim MyDB As Database
Dim MyRS As Recordset
On Error GoTo FN_IS_USER_IN_ROLE_Error
FN_IS_USER_IN_ROLE = False
Dim SQL_GET As String
SQL_GET = "SELECT tbl_user.user_name, tbl_roles.role_name " & _
"FROM (tbl_user_roles INNER JOIN tbl_user ON tbl_user_roles.user_Id = tbl_user.user_id) INNER JOIN tbl_roles ON tbl_user_roles.role_id = tbl_roles.role_id " & _
"WHERE (((tbl_user.user_id)=" & iUSER_ID & ") AND ((tbl_roles.role_name)='" & iREQ_ROLE & "')); "
Set MyDB = CurrentDb
Set MyRS = MyDB.OpenRecordset(SQL_GET)
Dim mRc As Long
mRc = Nz(MyRS.RecordCount, 0)
If mRc > 0 Then
FN_IS_USER_IN_ROLE = True
End If
On Error GoTo 0
Set MyRS = Nothing
Set MyDB = Nothing
Exit Function
FN_IS_USER_IN_ROLE_Error:
FN_IS_USER_IN_ROLE = False
Dialog.Box "Error " & Err.Number & " (" & Err.description & ") in procedure FN_IS_USER_IN_ROLE", vbExclamation
End Function
и проверить, если пользователь имеет достаточно привилегий просто:
Dim PR As String
PR = "Admin"
If (FN_IS_USER_IN_ROLE(PR)) Then
'Do something
Else
'Me.Undo
'Cancel = True
MsgBox "You do not have sufficient permissions to perform this task!" & vbNewLine & "Required access level: " & PR, vbCritical, "Access denied.."
Exit Sub
End If
Попробуйте это и дайте нам знать, если вам это удастся.
Вам нужны разные пароли для разных пользователей или это может быть один пароль? Мой ответ ниже предполагает последний. Если вы действительно хотите быть фантазией, вы можете использовать [InputBox] (https://msdn.microsoft.com/en-us/library/office/aa195768%28v=office.11%29.aspx), но это будет требуется некоторый VBA. – ZX9