2015-04-16 3 views
0

Я пытаюсь ограничить доступ к базе данных Access некоторыми людьми и дать этим людям определенные ограничения в зависимости от того, кто они. Я вижу пару статей о создании таблицы с пользователями и паролями и использовании некоторого кода VBA для проверки (или что-то в этом роде, я довольно неграмотный VBA). Кто-нибудь знает, где я могу найти пошаговую статью о том, как это сделать?Ограничения пароля пользователя Microsoft Access

В качестве альтернативы, возможно, это упростит, если у меня есть форма со ссылками на другие формы. Ссылки будут читать «Ввод данных», «Менеджер» и т. Д., И ссылки могут быть защищены паролем. I.e., когда Менеджер нажимает на ссылку «Менеджер», он должен ввести пароль и затем перейти к форме, где он может редактировать любую информацию. Принимая во внимание, что, когда нажимает «Ввод данных», они вводят другой пароль и затем переводятся в форму, где отображаются только поля, в которых они могут редактировать.

Благодарим вас за продвижение.

+0

Вам нужны разные пароли для разных пользователей или это может быть один пароль? Мой ответ ниже предполагает последний. Если вы действительно хотите быть фантазией, вы можете использовать [InputBox] (https://msdn.microsoft.com/en-us/library/office/aa195768%28v=office.11%29.aspx), но это будет требуется некоторый VBA. – ZX9

ответ

1

Безопасность - критическая точка доступа в 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 

Попробуйте это и дайте нам знать, если вам это удастся.

0

Вы хотите получить front end/back end database. Вы можете найти функции расщепления в доступе на Database Tools ->Move Data - База данных>доступа или вы можете создать две БД вручную, создавая еще одну базу данных с помощью форм, а затем linking таблицы.

Внутренняя база - это основная база данных со всем доступом администратора. Это можно защитить паролем, перейдя по ссылке ->Информация ->Шифрование с паролем. Это содержит все таблицы данных.

Передняя база данных представляет собой пользовательский интерфейс с формами. Это связано с контентом так, что он может обновлять исходный код, где были предоставлены формы.