Access Database Security Question

ms-access access-vba ms-access-2003

232 просмотра

5 ответа

У меня есть база данных в Access 2003, к которой я хочу иметь доступ только у определенных людей. В моей базе данных есть таблица, в которой перечислены люди, которые должны иметь доступ к базе данных. (Tbl_BIRT_Users). Таблица содержит их имя, ntlogin и адрес электронной почты. У этого также есть поле 'adminstrator'.

Мой вопрос состоит из двух частей:

1 - При открытии базы данных, как я могу заставить ее искать ntlogin (имя пользователя среды) человека и гарантировать, что это лицо имеет право использовать базу данных?

2 - Мне нужна база данных, чтобы посмотреть на поле «Администратор» Да / Нет и предоставить доступ только для чтения не администраторам и полный доступ к администраторам.

Спасибо!

Автор: Steve Clark Источник Размещён: 12.11.2019 09:13

Ответы (5)


3 плюса

Решение

Используйте вызов API для получения имени для входа - API: Получить имя для входа. Вы можете изменить переменные среды, находясь в командной строке, а затем, если запуск Access выполняется из командной строки, Access будет использовать подмену переменной среды.

Кроме того, есть способы легко взломать безопасность, управляемую таблицами, например, пользователь может перенести базу данных бэкэнда в розничную копию Access, изменить значения в таблицах и вернуть базу данных в офис.

Автор: Tony Toews Размещён: 26.08.2010 08:51

1 плюс

Даже если вы доверяете пользователям не вмешиваться в свои переменные среды, все равно примите предложение Тони. После добавления модуля, с которым он связан, получение имени учетной записи пользователя является простым вызовом функции fOSUserName (). Это действительно не сложнее, чем получить его из среды пользователя.

Но я хочу добавить к пункту Тони о "легко взломать безопасность на основе таблицы". Ваш план состоит в том, чтобы проверить, является ли пользователь одним из ваших авторизованных пользователей. Я предлагаю разместить файл вашей базы данных в таком месте, где только ваши авторизованные пользователи могут получить к нему доступ. Используйте разрешения файловой системы Windows, чтобы не пускать всех остальных. Таким образом, вы можете решить, что вам даже не нужно проверять свою таблицу, чтобы определить, авторизован ли пользователь. Вы все еще можете использовать данные таблицы, чтобы определить, является ли пользователь администратором или обычным пользователем. Или вы можете решить оставить проверку авторизации, если это дает вашим менеджерам душевное спокойствие ... даже при том, что это на самом деле не обеспечивает большой безопасности.

Автор: HansUp Размещён: 27.08.2010 02:07

0 плюса

Не могли бы вы просто сделать что-то подобное

Dim rst as Recordset
Dim sql as string

sql = "SELECT * FROM Tbl_BIRT_Users WHERE ntlogin = '" & Environ("UserName") & "'"
set rst = CurrentDb.OpenRecordset(sql)

    if (rst.bof and rst.eof) then
        /*not a valid user*/
        DoCmd.Quit
    else
       if not rst!Administrator then
         /*make read only*/
       end if
    end if

rst.close
Автор: Croberts Размещён: 26.08.2010 02:58

0 плюса

Это защитная витрина Access, которую я использую.

Public Function SecurityCode() 
'*  Purpose:    Limits access to program

    Dim sUserID    As String
    Dim sUserName   As String    

'*  Determines user from Windows Login
    sUserID = Environ("USERNAME")


'*  Lookup on BE table of Allowed Users to verify on the list.
     sUserName = DLookup("[UserName]", "tbl_AllowedUsers", "ID = '" & sUserID & "'")


If Len(sUserName) > 0 Then
    'Allowed User, opens Main Switchboard

    'Set global variable for Admin rights
    g_Admin = DLookup("[AdminRights]", "tbl_AllowedUsers", "ID = '" & sUserID & "'")

    DoCmd.OpenForm "Switchboard"
    DoCmd.SelectObject acForm, "Switchboard", True
    DoCmd.RunCommand acCmdWindowHide

Else
    'Not on the Allowed Users list, opens to a Password Page
    DoCmd.OpenForm "frm_LockPage"
    DoCmd.SelectObject acForm, "frm_LockPage", True
    DoCmd.RunCommand acCmdWindowHide
End If


End Function
Автор: That doesn't look right Размещён: 27.08.2010 07:21

0 плюса

Попробуйте что-то вроде ниже:

Function RealName()
payroll = Environ("Username")

firstname = DLookup("[first name]", "[Payroll Numbers]", "[persno] = " & payroll)
lastname = DLookup("[Last name]", "[Payroll Numbers]", "[persno] = " & payroll)

If IsNull(firstname) = True Then
RealName = payroll
Else
RealName = firstname & " " & lastname
End If

End Function

Затем вы можете ввести код в событие form_load, чтобы убедиться, что это проверенный пользователь.

Автор: Waller Размещён: 05.10.2010 01:59
Вопросы из категории :
32x32