LEADERSOFT.ru Разработка на заказ программ и сайтов
ЕСЛИ БАЗА ВАМ НУЖНА В ЛИДЕРСОФТ ЗАЙДИ СПЕРВА!
Список всех статей ... Подписка на новости (рассылка через subscribe.ru)




































Выпуск 68. Материалы для начинающих (15 урок)

Подписка: "Access 2000 - программирование и готовые решения"
Дата:         28.02.2007
Автор:     Дмитрий Сонных (aka Joss)
Сайт:        http://www.accessoft.ru под редакцией с http://www.leadersoft.ru/
Новые материалы: защита данных в Access
На сайте AccesSoft публикуются статьи, посвященые вопросам, связанным с разработкой и продвижением приложений Access. Вы так же можете ознакомиться с готовыми программами, получить исходный код, купить программу, связаться с автором для решения вопроса о доработке программы под Ваши требования.



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

Защита данных в файлах MDB СУРДБ Access. Часть 2.

 

Защита с использованием пароля БД.

    Данный способ защиты позволяет установить пароль на открытие БД, для всех пользователей. Для его создания необходимо открыть файл БД в "монопольном" режиме и выбрать пункт меню Сервис / Защита / Задать пароль базы данных. Для работы с такой базой данных в MS Access потребуется вводить пароль. Вот пример работы с файлом БД, используя DAO или ADO.

    Public Sub TestDAO()
        Dim mWS As DAO.Workspace
        Dim mDB As DAO.Database
        Set mWS = DBEngine.Workspaces(0)
        Set mDB = mWS.OpenDatabase ("C:\a97.mdb", True, True, ";pwd=123")
    End Sub

    Public Sub TestADO()
        Dim CnDB As New ADODB.Connection
        CnDB.Open "Provider=Microsoft.Jet.OLEDB.4.0" & ";Data Source=C:\a97.mdb" & ";Jet OLEDB:Database Password=123"
    End Sub

    Это тоже не самый надёжный способ защиты баз данных. Существует достаточное количество бесплатных и платных утилит, отображающих пароль. В том числе доступны исходники кода на VB позволяющие прочитать такой пароль. В прочем не всё так плохо.

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

    Продолжим игры с паролем базы данных. Например, можно использовать в пароле непечатные символы. В первую очередь этот способ нацелен на противодействие определению паролей с помощью специальных программ. Стандартный способ установки и использования пароля БД подразумевает его ввод с клавиатуры в диалоговом окне. Если строка пароля содержит непечатные символы, то они не будут корректно отображены программой открывающей пароли БД. С другой стороны этот пароль нельзя ввести в диалоговом окне при открытии БД в MS Access.

    Если бы пароль содержал символы табуляции, Esc или Enter, то стандартным образом Вы бы не смогли их ввести в окошко ввода пароля. Способ основан на том, что пароль БД формата Access 2000 и 2002-2003 - текстовая строка в формате Unicode (в Access 97 – ANSI). При этом нет ни каких ограничений на её содержимое. В спецификации баз данных и в справке по DAO 3.60 указано, что максимальное число символов в пароле - 14. Но на самом деле их может быть 20. При этом и сам Access 97 не допускает ввода строк пароля более 14 символов. В спецификации Access 2003 также сказано про 14 символов, но программа допускает ввод всех 20. Также возможно использование непечатных символов, что приводит большинство программ взламывающих пароли в ступор.

    Для установки такого пароля потребуется применить специальную программу, использующую метод CompactDatabase библиотек ADOX или DAO. Но, как говорится, против всего можно найти лом. И такая защита вскрывается.

  • Во-первых, можно воспользоваться программой AccessRecovery, которая создаёт новый файл без защиты и переносит в него таблицы, запросы, формы, макросы, отчеты и код модулей.
  • Во-вторых, можно попытаться определить пароль БД с помощью специальных программ.
  • В-третьих, можно узнать пароль, проанализировав код программы в отладчике. Каков бы ни был пароль, он всё равно передаётся как текстовая строка в методе открытия БД. При наличии определённого опыта - это не очень сложная задача.
  • Узнать или изменить пароль БД можно, не прибегая к помощи специальных программ. В Access 97 пароль получается сложением по XOR пароля с 20 байтной последовательностью. Значения этих байт можно получить из любого не защищённого паролем mdb файла. Начиная с Access 2k, в связи с использованием Unicode, для хранения 20 символов пароля отведены 40 байт. При шифровании также используется сложение по XOR, но для получения последовательности байт соответствующей пустому паролю необходимо создать файл с датой исследуемой БД. Полученные байты можно вписать в исследуемый файл и обнулить пароль, либо сложить их с аналогичными байтами исследуемого файла и получить значение пароля.

    Но всё это уже требует наличие определенных знаний и опыта, так, что есть шансы на то, что любопытному пользователю надоест экспериментировать.

При составлении статьи были использованы материалы с сайта http://www.msvb.narod.ru/doc_access.htm


Комментарий к предыдущему выпуску (№67)
Цитата. Всю свою трудовую историю работы с Аксесом, был твёрдо уверен, что защитить ФС (файл-сервер) Аксеса (mdb\mde) в сети (да и не только Аксеса, а вообще ФС) от несанкционированного доступа толком невозможно. Пока один очень сильный админ у моего клиента не продемонстрировал мне такую штуку. Файл сервер, Аксес, домен, АД, шара (полный доступ, т.к. это требуется для ФС), приложения на клиентских ПК (более 20) работают с файлом как обычно, штатно прилинкованные таблицы. Но... Ни в сети, ни в консоли, даже зная путь к шаре и имена файла, я не смог скопировать (дёрнуть) ф-л БД с сервера, ни открыть никакой вменяемой программой - призрак. Тыкался, тыкался... Уп-с. Чего он там намудрил с политиками - не знаю, не кололся. Но факт, я не смог получить доступ к самому файлу БД. При этом админ работал штатными средствами виндового сервера. После этого случая я задумался. О жизни, о админах и о технологиях ФС, одной из острых претензий к которой у меня была "незащищаемость" хранилища БД в сети. Если бы мне это рассказали ДО этого случая, если бы я сам не пытался безуспешно "ломануть" свою же АСУ, не поверил бы...
  Комментарий. У пользователя отбираются права на просмотр содержимого каталога и поиск по каталогу где лежит база на сервере. И всё. Юзер файл увидеть не может, скопировать не может, найти не может, ярлык создать не может. НО! Может запросто с ним работать, если ему дали разрешение на изменение этого файла. И это не обязательно должен быть сервер под Windows. На Nowell такое тоже возможно запросто. прислал Малков Андрей Геннадьевич
 Комментарий. Еще один вариант микро-защиты. Можно в названии папки добавить $, например, ww$, тогда ее в сети не видно, но напрямую к ней обращаться можно и сохранять файлы тоже, если конечно есть права доступа (справка от leadersoft.ru).