Access Database Security Question
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:511 плюс
Даже если вы доверяете пользователям не вмешиваться в свои переменные среды, все равно примите предложение Тони. После добавления модуля, с которым он связан, получение имени учетной записи пользователя является простым вызовом функции fOSUserName (). Это действительно не сложнее, чем получить его из среды пользователя.
Но я хочу добавить к пункту Тони о "легко взломать безопасность на основе таблицы". Ваш план состоит в том, чтобы проверить, является ли пользователь одним из ваших авторизованных пользователей. Я предлагаю разместить файл вашей базы данных в таком месте, где только ваши авторизованные пользователи могут получить к нему доступ. Используйте разрешения файловой системы Windows, чтобы не пускать всех остальных. Таким образом, вы можете решить, что вам даже не нужно проверять свою таблицу, чтобы определить, авторизован ли пользователь. Вы все еще можете использовать данные таблицы, чтобы определить, является ли пользователь администратором или обычным пользователем. Или вы можете решить оставить проверку авторизации, если это дает вашим менеджерам душевное спокойствие ... даже при том, что это на самом деле не обеспечивает большой безопасности.
Автор: HansUp Размещён: 27.08.2010 02:070 плюса
Не могли бы вы просто сделать что-то подобное
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Вопросы из категории :
- ms-access Microsoft JET SQL Query Logging или «Как отладить программу моего клиента?»
- ms-access Как устранить предупреждение о безопасности при запуске проекта ms-access
- ms-access Как исправить возможные повреждения БД?
- ms-access Экспорт результатов кросс-таблицы в Excel из MS Access
- ms-access MS-Access, VBA и обработка ошибок
- ms-access Найти часть каталога (без имени файла) полного пути в access 97
- access-vba Использование VBA для экспорта всех запросов MS Access SQL в текстовые файлы
- access-vba Функция max (x, y) в Access
- access-vba Как запросить подчиненную форму из другой формы?
- access-vba Microsoft Access VBA для редактирования SQL-запросов
- ms-access-2003 MS Access 2003 - Рамка группы параметров: можно ли добавить текстовые поля, являющиеся частью рамки, вместо параметров кнопки «Рад»?
- ms-access-2003 Как решить ошибку DLL в доступе
- ms-access-2003 Access Database Security Question
- ms-access-2003 Как перекрасить Microsoft Chart в форму доступа
- ms-access-2003 MS Access 2003 не позволяет выделить весь текст в фокусе
- ms-access-2003 Динамическое изменение размера области отчета