Shift при запуске

Name
Дата: 25.01.2002 06:02:21
При нажатии Shift, как известно,
не выполняются Параметры запуска, и пользователю может быть доступно окно базы данных.

С этим реально бороться?
ДиД.
Дата: 25.01.2002 06:24:27
Если вы создали макрос для автоматического выполнения при каждом запуске приложения, рано или поздно вам потребуется запустить приложение без этого макроса. Чтобы пропустить его выполнение, в ходе загрузки базы данных нажмите и удерживайте клавишу [Shift]. Это стандартная команда, используемая не только в Access, но и в Word и Excel, для пропуска автоматически выполняющегося кода и даже в самой Windows для пропуска автозагружаемых программ (тех, что указаны в меню или папке Startup).
Если ваше приложение работает в runtime-версии Access, его пользователи не смогут пропускать ни макрос AutoExec, ни макрос, который задан в командной строке. Эта версия Access просто игнорирует нажатие клавиши [Shift]. Но даже если у пользователей установлена обычная версия Access, вы все равно можете запретить пропуск загрузочных макросов, для чего свойству базы данных AllowBypassKey нужно присвоить значение False (см. табл. Б.1). Следующие процедуры из модуля basByPassKey демонстрируют включение и отключение этой опции (для обоих типов файлов, MDB и ADP).

Public Sub adhSetBypassKeyMDB(AllowIt As Boolean)
Dim db As DAO.Database
Dim prp As DAO.Property

On Error Resume Next
Set db = CurrentDb()
db.Properties("AllowByPassKey") = AllowIt
If Err.Number = adhcErrPropNotFound Then
Set prp = db.CreateProperty("AllowByPassKey", _
dbBoolean, AllowIt)
db.Properties.Append prp
End If
End Sub

для ADP:

Sub adhSetByPassKeyADP(AllowIt As Boolean)
CurrentProject.Properties.Add "AllowByPassKey", AllowIt
End Sub
Name
Дата: 25.01.2002 07:13:37
Спасибо!
....
Дата: 02.02.2002 13:13:45
Предложеный способ можно обойти - открыть базу при помощи GetObject. Тогда и autoexec не срабатывает, и свойство AllowByPassKey можно сбросить.
BPK
Дата: 17.09.2004 17:42:50
....
Предложеный способ можно обойти - открыть базу при помощи GetObject. Тогда и autoexec не срабатывает, и свойство AllowByPassKey можно сбросить.

Пример?
замечено
Дата: 17.09.2004 18:08:01
загрузка винды с нажатым шифтом выдает застарелого аксессника
кедзо
Дата: 18.09.2004 00:19:12
BPK
....
Предложеный способ можно обойти - открыть базу при помощи GetObject. Тогда и autoexec не срабатывает, и свойство AllowByPassKey можно сбросить.

Пример?


валяется на диске (сам не пробовал)

По материалам: http://accessminsk.hotmail.ru
Замечание: Сергей Гаврилов svg@chel.surnet.ru

При запуске данной функции производится запрос на УСТАНОВКУ или СНЯТИЕ "защиты".

Замечание от Сергея Гаврилова:
svg@chel.surnet.ru
…хотелось бы внести небольшое, но, мне кажется, важное замечание к данному коду. Защита от Shift, установленная данным примером, может быть легко удалена аналогичным кодом извне. И подобные программы, снимающие эту защиту, есть. А этого можно легко избежать, если ПРАВИЛЬНО установить защиту от Shift. Посмотрим Help на Метод CreateProperty:

Синтаксис
Set свойство = объект.CreateProperty (имя, тип, значение, кодDDL).

Мы видим четвертый параметр, который почему-то отсутствует в примере "Защита от Shift":

Set prp = dbs.CreateProperty("AllowBypassKey", dbBoolean, True)

Читаем в Help об этом параметре:
кодDDL - Необязательный. Выражение или переменная типа Variant (подтип Boolean), указывающая, является или нет объект Property объектом языка описания данных (DDL). По умолчанию задается значение False. Если кодDDL имеет значение True, данный объект Property может быть изменен или удален только пользователем, имеющим разрешение dbSecWriteDef.
Таким образом, если используется защита на уровне пользователя и она сделана грамотно, то изменение свойства "AllowBypassKey" извне будет недоступно.
Правда сама защита на уровне пользователей слаба, но это уже другая песня...


Function BazyShift()
Dim dbs As Database, prp As Property
Const conPropNotFoundError = 3270
Set dbs = CurrentDb
Dim TmpBool As Boolean
On Error GoTo Change_Err
If dbs.Properties("AllowBypassKey") = True Then
If MsgBox(" Реагируем на " & Chr(13) & " открытый режим базы" & Chr(13) & " Защитить?", vbInformation + vbYesNoCancel) = vbYes Then
dbs.Properties("AllowBypassKey") = False
TmpBool = MsgBox("Нормальная работа в режиме ЗАЩИТЫ начнется при следующем старте.", vbInformation)
End If
Else
If MsgBox(" Нет реакции на " & Chr(13) & " Нормальное состояние базы" & Chr(13) & " Хотите включить?", vbExclamation + vbYesNoCancel) = vbYes Then
dbs.Properties("AllowBypassKey") = True
TmpBool = MsgBox("Вы можете просматривать и редактировать объекты базы при следующем входе в нее. Незабудьте потом отключить реагирование на .", vbInformation)
End If
End If

Change_Bye:

Exit Function

Change_Err:
If Err = conPropNotFoundError Then ' Свойство не найдено.
Set prp = dbs.CreateProperty("AllowBypassKey", dbBoolean, True)
dbs.Properties.Append prp
Resume Next
Else
' Неизвестная ошибка.
Resume Change_Bye
End If
End Function
tim2
Дата: 18.09.2004 11:38:45
Стараюсь вообще реже использовать AutoExec: в коде стартовой формы при открытии переход в модуль, где все "начальные" процедуры...ну и, конечно, база - mde. И хоть с Shift-ом, хоть через GetObject все-равно не отключишь чего не надо.
Serge Gavrilov
Дата: 18.09.2004 17:33:03
tim2
Стараюсь вообще реже использовать AutoExec: в коде стартовой формы при открытии переход в модуль, где все "начальные" процедуры...ну и, конечно, база - mde. И хоть с Shift-ом, хоть через GetObject все-равно не отключишь чего не надо.

Почему не отключишь? Не выполнять стартовый код можно... хоть в mde, хоть в mdb
kima
Дата: 16.02.2009 14:25:31
Здравствуйте!
Я реализовала указанным здесь способом защиту от Shift. Все прекрасно работает. Вот только есть одно НО! Достаточно нажать F11 после загрузки главной формы - и вот оно, окно базы данных во всей своей красе с таблицами, запросами и т.д.
Я может что-то не так сделала? Или эта защита не относится к данной возможности открыть окно базы данных с помощью F11?