Зашита данных в файлах mdb СУРБД Access
Защита с использованием пароля БД
Данный способ защиты позволяет установить пароль на открытие БД, для всех пользователей. Для его создания необходимо открыть файл БД в "монопольном" режиме и выбрать пункт меню Сервис / Защита / Задать пароль базы данных. Для работы с такой базой данных в 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, но для получения последовательности байт соответствующей пустому паролю необходимо создать файл с датой исследуемой БД. Полученные байты можно вписать в исследуемый файл и обнулить пароль, либо сложить их с аналогичными байтами исследуемого файла и получить значение пароля. Но всё это уже требует наличие определенных знаний и опыта, так, что есть шансы на то, что любопытному пользователю надоест экспериментировать.
Шифрование/Дешифрование базы средствами Access
Вот что я нашел про кодирование/раскодирование баз данных Access в книге Access 2002. Разработка корпоративных приложений П.Литвина, К.Гетца и М.Гунделоя.
«Как бы хорошо не была защищена база данных Jet, любой мало-мальски сообразительный хакер может при помощи низкоуровневого дискового редактора и получить доступ к её содержимому. Поэтому серьезная защита баз данных предполагает ещё и их шифрование. Конечно, взлом баз данных – дело не самое обыденное, но искатель приключений всегда может найтись.
Само по себе шифрование базы данных ещё не гарантирует её надежной защиты, но всё же препятствует её просмотру средствами, внешними по отношению к Access и Jet.
Зашифровать и дешифровать базу данных могут только её владелец и члены группы Admins. Для шифрования Jet использует алгоритм RSA (назван по первым буквам фамилий его изобретателей: Rivest, Shamir, Adelman) с ключом на основе идентификатора рабочей группы. Для шифрования и дешифрования предназначена команда Access Tools > Security .> Encrypt / Decrypt Database.
У шифрования базы данных имеется два негативных побочных эффекта. Во-первых, снижается её быстродействие – по оценкам Microsoft, процентов на 10-15. Во-вторых, зашифрованную базу данных нельзя сжимать такими программами, как PKZip, LHA, Stacker и DriveSpace. Точнее, сжимать можно, только в этом нет смысла – её размер уменьшится незначительно».
Вот, что удалось ещё нарыть на сайте Microsoft:
Шифрование базы данных — это простейший способ защиты. При шифровании базы данных ее файл сжимается и становится недоступным для чтения с помощью служебных программ или текстовых редакторов.
Шифрование незащищенной базы данных неэффективно, поскольку каждый сможет открыть такую базу данных и получить полный доступ ко всем ее объектам.
Шифрование обычно применяется при электронной передаче базы данных или сохранении ее на дискету, кассету или компакт-диск.
Шифровать-расшифровывать базу может либо хозяин базы, либо пользователь с администраторскими привилегиями и разрешением загружать базу в монопольном режиме.
Немного потыкал клавиши. В шифрованную базу можно добавлять записи, а имеющиеся - изменять. Шифрованную базу можно сжимать. Таблицы из шифрованной базы можно подлинковывать.
Пароль на базу не шифруется. Тело базы шифруется начиная с адреса 1000h. При просмотре тела базы разными вьюерами там действительно ерунда. Программы типа AccessFix не могут ничего из базы выдрать. (по крайней мере версии 3.70). Они там просто ничего не находят. Объекты из шифрованной базы можно импортировать в другую базу и они уже будут не шифрованные.
Вывод, шифровать стоит базу, уже защищенную стандартными средствами при помощи MDW.
На что не смог найти ответа:
- можно ли к шифрованной базе подключиться из других клиентов - VB, Delphi, VC... (скорее всего можно)?
- в случае краха, какова вероятность восстановления шифрованной БД?
Об алгоритме шифрования RSA можно прочитать вот здесь http://ru.wikipedia.org/wiki/RSA
А об его стойкости - http://www.bugtraq.ru/library/crypto/rsa.html
Защита при помощи терминального доступа к серверу
Практически непрошибаемая защита. И клиентская часть и база с таблицами находится на сервере. У клиента на компьютере эмулируется терминал сервера. Словно ты за ним сидишь (в смысле, за сервером). Можно настроить терминальный доступ так, что при запуске требуемой задачи (по ярлыку), запроса соответствующих паролей доступа к системе, сразу грузится требуемая база. При закрытии базы терминал закрывается. В самой базе прописана защита от шифта, отключены все стандартные Access-овские меню и горячие клавиши, отключено окно базы. И ничего пользователь ни затереть, ни скопировать не может. Ни открыть напрямую таблицы, ни получить доступ к закрытым для него формам и отчетам. Ещё терминальный доступ называется, по-моему, удаленным рабочим столом.
Недостатки этого способа – вся обработка данных ложится на сервер, зато в качестве клиентов можно использовать слабые машины.
Есть еще два метода: Защита при помощи макроса AutoExec и блокировки Shift, защита паролем. Но о них уже рассказывалось в предыдущизх статьях.
Обсудить на форуме...
При составлении статьи были использованы материалы с сайта http://www.msvb.narod.ru/doc_access.htm
Автор: Дмитрий Сонных (aka Joss)
Добавлен: 16.02.200