Друзья! Майкрософт отключила защиту на уровне пользователей для формата
accdb, поэтому защита с учетной записью здесь не пройдет. Предлагаю следующее:
1. Все таблицы связываются с SQL Server без использования DNS, а таблицы хранятся на сервере SSSSS база DDDDD, где создается универсальный пользователь UUUUU с паролем PPPPPP.
Пользователям дается скомпилированный файл
ACCDE с установленными защитами от SHIFT со снятой опцией использовать специальные клавиши Access и без просмотра области навигации, без набора меню Access и контекстных меню (задается в параметрах текущей базы).
В форме, открывающейся при открытии базы (Форма просмотра) в событии Form_Open вызвать процедуру QM:
Sub QM()
Dim prp, i%, scy$, ConStr$
ConStr = "ODBC;DRIVER={SQL Server};SERVER=SSSSS;DATABASE=DDDDD;UID=UUUUU;PWD=PPPPPP;APP=Microsoft Office 2013"
prp = Array("AllowShortcutMenus", "AllowFullMenus", "AllowBuiltInToolbars", "AllowSpecialKeys", "AllowBypassKey", "StartUpShowDBWindow")
For i = 0 To UBound(prp)
If CurrentDb.Properties(prp(i)) = True Then scy = scy & prp(i) & Chr(13)
Next
If scy = "" Then
DoCmd.SetWarnings False
DoCmd.RunSQL "UPDATE [" & ConStr & "].ТаблицаНаСервере SET Код=-1 WHERE Код=-1;"
DoCmd.SetWarnings True
Else
On Error Resume Next
If Application.Modules(0).Type < 0 Then
MsgBox "База не защищена", vbCritical
End
End If
End If
End Sub
Таблицы подключаются кодом:
Dim tdf As DAO.TableDef
Set tdf = CurrentDb.CreateTableDef(rst!Таблица, dbAttachExclusive, rst!Исходная, ConStr)
CurrentDb.TableDefs.Append tdf
Логин и пароль хранятся в скомпилированном виде и не видны средствами просмотра. Если у скомпилированного файла accde поменять расширение, то Application.Modules(0).Type даст ошибку. Если хотя бы одно из свойств истина, то будет проверка, что программа запущена на скомпилированной базе. Если все свойства false, то произойдет активация связей инструкцией RunSQL, после чего все запросы, использующие связанные таблицы, будут корректно работать через DAO.
Это нужно, что бы пользователи не могли работать с базой напрямую, минуя предоставленный интерфейс, обеспечивающий разделение доступа, и при желании не смогли испортить или удалить чужие данные.
http://www.sql.ru/forum/1263169/zashhita-bazy-ot-vzloma-zashhita-svyazannyh-tablic-prodolzhenie