Программирование MsAccess, VB, VBA

  

© am 1999-2010

Добро пожаловать, незнакомец! [вход]   

|  Домой   |   Новости   |   Гостевая   |   Форумы   |   Поиск   |   Страницы Авторов   |

FAQ: Понижение уровня безопасности макросов.

(обращений: 4024 с 25.12.2007)

Разделы:  Безопасность, ЧаВо (FAQ)

 

Описание: Программное понижение уровня безопасности.

Автор: Дмитрий Сонных (AKA Joss)

Добавил на сайт: Профиль пользователяJoss 25.12.2007

Скачать:

security.rar (510 байт) (скачиваний: 532 с 25.12.2007)
Начиная с версии 2003, Микрософт добавил в Офис возможность отключения макросов. По идее это должно увеличить защищенность от макровирусов.
Посмотрим, что говорит об этом Help
Существуют 4 уровня безопасности
- очень высокий. Этот вариант недоступен в диалоговом окне Безопасность Microsoft Office Access 2003. Однако задать в Access уровень безопасности Очень высокий можно с помощью системных политик. Когда задан уровень безопасности Очень высокий, открытие любых файлов баз данных Access или проектов Access невозможно.
- высокий. Если в базе есть неподписанный макрос, то Макросы автоматически отключаются. Файл не открывается. Если в базе есть подписанные макросы, то дальнейшая обработка подписанного макроса определяется его источником и состоянием подписи (подробности смотри в Help)
- средний. Если в базе есть неподписанный макрос, пользователю предлагается открыть базу данных или отменить действие. Если пользователь решит отменить действие, файл базы данных не открывается. Если в базе есть подписанные макросы, то дальнейшая обработка подписанного макроса определяется его источником и состоянием подписи
- низкий. При низком уровне безопасности все макросы обрабатываются одинаково, вне зависимости от их происхождения или статуса сертификата. При таком уровне безопасности пользователю не предлагается оценивать надежность автора или сертификата макроса. Макросы включаются автоматически. Этот параметр следует использовать, только если все макросы в файлах получены из надежных источников.
Всё это выглядит красиво, но не в нашем случае. Мало кто из нас хоть когда-нибудь вздумает «подписывать» свои модули цифровыми подписями. Во-первых, хакерам это вряд ли сильно помешает подделать подпись, а во-вторых, услуга эта платная, и цифровой сертификат можно получить лишь в коммерческом центре сертификации, таком как VeriSign Inc., или у администратора внутренней безопасности или специалиста отдела информационных технологий (IT).

Изменить уровень безопасности легко. Достаточно пройти по ветке меню Сервис – Макрос – Безопасность… и установить Низкий уровень.
Конечно, всё это просто, но объяснять всё это нескольким десяткам пользователей – язык отвалится. Наш пользователь привык читать инструкцию уже после того, как понажимает все возможные кнопки. Им почему-то проще позвонить в другой город, чем прочитать одну страничку текста (наверно, читать не умеют). Выход – менять уровень защиты программно.
Уровень защиты прописан в реестре.
Для Aссess 2003 - это ветка
HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Access\security\Level
А для Access 2007 – это ветка
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Access\Security\VBAWarnings
Размерность параметра – DWORD
Значения уровня безопасности:
1 – низкий;
2 – средний;
3 – высокий.
Если такой ветки в реестре нет, то принимается уровень безопасности по умолчанию (Default Level). Для Access это средний уровень. (Примечание. Для Excel защита от макросов была введена с версии Excel 2000, и уровень безопасности по умолчанию высокий)
В VBA есть средства для работы с реестром. Но защита срабатывает при загрузке файла Access. По-этому понижать защиту надо не в самом файле базы данных, а раньше. Как это можно сделать? Я вижу здесь три пути.
1. Понижать уровень защиты при помощи Reg- файла.
2. Понижать уровень защиты при помощи VBS скрипта.
3. Понижать уровень защиты при помощи программы-инсталлятора приложения.
Рассмотрим все эти способы немного подробнее.
1. Использование Reg-файла.
Reg-файл представляет собой текстовый файл с расширением reg, составленный по специальным правилам. В нем описываются ключи реестра Windows, их размерность и значение. Подробнее можно почитать в специальной литературе, которая довольно объемна. Reg-файлы используются как командные файлы для редактора реестра. Стоит в проводнике дважды кликнуть на выбранный файл, как запустится редактор реестра и выведет окно с запросом «Вы действительно хотите добавить информацию из …reg в реестр?» Нажмите «Да» и значение реестра будет откорректировано или создано (если оно не существует).
2. Использование VBS скрипта.
VBS – это Microsoft Windows Script Technologies. Своеобразная альтернатива досовских .bat файлов. Сценарии написанные на VBScript и сохраненные как файлы с расширением .vbs выполняются с помощью инструмента Windows Script Host (WSH), который встроен в ядро Windows уже с 98 версии.
Говоря проще – это обычный текстовый файл, и создается он в простом блокноте. После создания файла, вручную меняем расширение на .vbs и все – получаем исполняемый файл. Щелкнем дважды по нему – компилятор Windows обработает текст и выдаст результат. Совсем как в .exe файлах. К тому же, синтаксис VBS очень похож на VB, и соответственно, не составит большого труда разобраться в коде.
Пример кода для Access 2003
Option Explicit

Const strSecurity = "HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Access\security\Level"

DIM WshShell 

On Error Resume Next

Set WshShell = CreateObject("WScript.Shell")

'Понижаем безопасность
If WSHShell.RegRead(strSecurity) <> 1 Then
   WSHShell.RegWrite strSecurity, 1, "REG_DWORD"
End If

Err.Clear

Set WshShell = Nothing
Для Access 2007 надо изменит константу strSecurity
Const strSecurity = "HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Access\Security\VBAWarning"
Более интересное решение вы можете найти на сайте AccesSoft
3. Понижение уровеня защиты при помощи программы-инсталлятора приложения.
Существует много программ для создания инсталляционных пакетов. Среди них есть и монстры под сотню мегабайт, есть и карлики объемом в мегабайт. Есть и платные и бесплатные пакеты. Многие из них позволяют редактировать реестр в процессе установки программы. Я пользуюсь бесплатным пакетом InnoSetup. Здесь на сайте он как-то упоминался. Сейчас на сайте у разработчика лежит версия 5.2.0. Существует и модуль русского интерфейса. К нему прилагается справка (Help), правда на английском. И несколько примеров.
Для того, что бы изменить значение параметра реестра, необходимо в сценарии (.iss) подготовки инсталляционного пакета прописать в секции [Registry] следующий параметр
Root: HKCU; Subkey: "Software\ Microsoft\Office\11.0\Access\security"; ValueType: dword; ValueName: "Level"; ValueData: 1 
Это для Access 2003, для Access 2007 надо значение 11.0 заменить на 12.0 и “Level” на “VBAWarning”

Вот практически всё, что я хотел сказать. Рекомендую изучить программу создания инсталляционных файлов InnoSetup (или аналогичную). Затраченное на изучение время затем слихвой компенсируется удобством распространения и установки Ваших разработок.

Использовались материалы с сайтов AccesSoft и SQL.RU
Благодарности участникам форумов am.rusimport.ru и SQL.RU: Palarm, АлексейЕ, Ёжик, Latuk.

Приложение: reg–файлы security2003 и security2007 для Access 2003 и 2007 соответственно.

[Back]


Текущий рейтинг:
5 из 5 (проголосовало:1).
Здравствуйте!
Для участия в рейтинге необходимо залогиниться на сайт.
Это сделано для того, чтобы более точно производить оценку статей (чтобы одному и тому же человеку было труднее голосовать несколько раз, портя тем самым статистику.
Эта процедура очень быстрая и, надеюсь, Вас не затруднит :).
Все мысли по поводу работы сайта всегда можно высказать на форуме!
Вход на сайт

Обсуждение статьи:   
без темы palarm   
автор писал:
Для того, что бы изменить значение параметра реестра, необходимо в сценарии (.iss) подготовки инсталляционного пакета прописать в секции [Registry] следующий параметр
Только надо ведь сначала версию офиса определить.
А вообще, нужно еще определить - есть ли вообще офис как таковой. Иначе потом будут ругать, что тыкаю по ярлыку, а запускается Word или еще чего.
25.12.2007 12:17

Re:без темы palarm   
А вообще то идея пошла от АлексейЕ - страна должна знать своих героев.
25.12.2007 12:19

Re:Re:без темы KrukVN   
Раньше тож понижал безопасность, но потом один очччень продвинутый пользователь начал вопить, что мол после запуска моей программы "вырубается безопасность!", а он так не может, он уже привык, он боится за сохранность информации на своем диске и все такое прочее. Еле успокоил :)
с тех пор в руководстве пользователя пишу примерно так:
Подготовка к работе
- Если на клиенте установлен пакет Microsoft Office 2003, то для нормальной работы программы необходимо предварительно загрузить Microsoft Access и в меню Сер-вис -> Макрос -> Безопасность, выбрать низкую безопасность
- ... ну и т.д.
пусть теперь сами решают как удобнее работать
29.12.2007 13:43

Re:Re:Re:без темы palarm   
Кстати, не на всех компах можно так просто залезть в реестр.
Но вообще то главное не макросах а в MDW. В скрипте ведь формируется строка запуска, которая как известно для разных офисов разная (эх, Билли, мало тебе морду били!) - вот почему не выходит от скрипта отказаться. Не писать же инструкицю пользователю как переделывать ярлык. Слишком это сложно для них.
29.12.2007 16:40

Re:Re:Re:Re:без темы KrukVN   
palarm писал:
Кстати, не на всех компах можно так просто залезть в реестр

Именно. Там где не ленивые админы и грамотно выстроена политика безопасности можно легко обломаться с доступом в реестр.
И еще. Не на всех компах с Windows 98 можно запустить скрипт vbs.
Когда писал netlogon-скрипт на vbs убедился в этом лично.
Причем, в некоторых случаях, даже если и установлен Windows Script Host, то система может выбрасывать что-то вроде: 'не найдено ядро сервера сценариев' - бред. С тех пор, если очень надо, либо пишу bat либо exe. cmd - не использую, т.к. опять таки в win98 он не поддерживается. а жал. по сравнению с возможностями bat это небо и земля.
29.12.2007 22:21

Re:Re:Re:Re:Re:без темы KrukVN   
Научиться бы еще при загрузке 5-го касперыча вырубать, а в 6-ом в доверенную зону прописываться
29.12.2007 22:35

Дополнительные сведения. Профиль пользователяJoss   
Тема выходит довольно актуальная.
На сайте hiprog.com выложена программа для смены уровня безопасности. Автор - akkorn(Корнюшин Алексей), глянуть можно здесь, веточку с обсуждением этой программы и вопросов с изменением уровня защиты от макросов можно глянуть здесь.
На всякий случай копирую программу (версия 1.0.10).
Присоединенный файл:os_SetWarnings.zip (Размер: 13823 байт, Скачиваний:311)
26.03.2008 11:04