Access Database Security Question - PullRequest
       20

Access Database Security Question

0 голосов
/ 26 августа 2010

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

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

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

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

Спасибо!

Ответы [ 5 ]

3 голосов
/ 27 августа 2010

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

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

1 голос
/ 27 августа 2010

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

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

0 голосов
/ 05 октября 2010

Попробуйте что-то вроде следующего:

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, чтобы убедиться, что это проверенный пользователь.

0 голосов
/ 27 августа 2010

Это оформление витрин доступа, которое я использую.

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
0 голосов
/ 26 августа 2010

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

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
...