Какие методы используются для защиты БД?

Под "защитой БД" здесь понимается способ предотвратить несанкционированный доступ к информации, хранимой в таблицах. Защита исходного кода форм и модулей не рассматривается.

Стандартные способы защиты

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

Данный способ защиты позволяет установить пароль на открытие БД, для всех пользователей. Для его создания необходимо открыть файл БД в "монопольном" режиме и выбрать пункт меню Сервис / Защита / Задать пароль базы данных. Для работы с такой базой данных в 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 позволяющие прочитать такой пароль. В прочем не всё так плохо. Однажды мне встретилось оригинальная модификация этого способа защиты, о котором речь пойдёт ниже.

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

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

Нестандартные способы защиты

· Изменение расширения файла

Достаточно простой способ ввести в заблуждение - изменение расширения файла БД. Увидев незнакомое расширение, не каждый попытается выяснить природу этого файла. Кроме этого появляется возможность связать это расширение с вашей программой, так чтобы при клике по файлу запускалось ваше приложение, а не Access. Желательно открывать такой файл с монопольным доступом, так как в этом случае не будет создаваться ldb файл.

· Защита с использованием пароля БД, содержащего непечатные символы

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

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

· Защита с модификацией файла

Способ защиты основан на модификации первых байт файла. Таким образом, перед открытием БД в её файл записывается правильный заголовок, хранимый в программе, а после закрытия возвращается неправильный. При попытке открыть файл БД с помощью ms Access появляется сообщение об ошибке. Не плохо совместить этот способ с изменением расширения файла. Например, можно взять заголовок dbf файла и записать его в начало mdb файла. Далее меняем расширение файла на dbf и наслаждаемся результатом. БД теперь можно открыть в Excel, Access или другой программой, позволяющей читать dbf файлы. Вот пример такого преобразования. Метод не достаточно эффективен, так как программу, работающую с БД, можно прервать искусственно и на диске останется не защищённая БД. Поэтому стоит его использовать только в сочетании с другими способами.

· Защита изменением версии БД

Этот способ - дальнейшее развитие идеи модификации заголовка файла с целью противодействия программам, читающим пароли. Метод основан на том, что для работы с БД Access 97 и 2k программы используют разные алгоритмы чтения пароля и при этом пытаются самостоятельно определить версию mdb файла.

Для определения версии можно использовать последовательность из 40 байт, начиная с 122 от начала файла. Если в БД Access 97 вписать эту последовательность от Access 2k, то получим интересный результат. Программа ms Access, ADO и DAO нормально работают с этим файлом, а большинство взламывающих пароли программ попадаются на эту уловку. Аналогичный результат может быть получен при пересадке байтовой последовательности из Access 97 в Access 2k

· Защита с использованием электронного ключа

Это ещё одно подтверждение, того, что стандартные способы защиты, даже от сторонних производителей уязвимы. Речь идёт о ключах HASP. С помощью утилиты HASP Envelope можно зашифровать файл (в данном случае БД) и разрешить к нему доступ только из защищённого приложения. Используется механизм "прозрачного" шифрования. Со стартом операционной системы запускается некий процесс, который отслеживает все обращения к защищённому файлу БД. Если это обращение исходит от обычного приложения, например от ms Access - файл читается и выводится сообщение о "нераспознаваемом формате базы данных". Но если с файлом работает указанное при шифровании приложение, то данные передаются ему в дешифрованном виде. В результате, сама программа, не подозревает о наличии защиты. Да, сложность взлома такой базы возрастает в разы. Но при этом надо помнить, что с приложением должен поставляться электронный ключ, ценой N у.е. и что скорость доступа к данным падает в два - три раза.

· Шифрование значений таблиц

Этот способ не плох. Во всяком случае появляется реальная надежда что то спасти. Однако есть ряд ограничений. Перед отображением данных их необходимо дешифровать. Нет возможности поиска по части строки в зашифрованном поле. Алгоритм шифрования и ключ содержатся в программе, а значит, есть потенциальная уязвимость. В данном случае надёжность зависит от устойчивости к взлому программы, работающей с БД. Можно сочетать приятное с полезным: не шифровать, а сжимать содержимое memo полей.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: