ZeosDb: шифровать SQLite

Я использую компонент ZeosDB для доступа к базе данных sqlite. Работает нормально на незашифрованном БД.

На зашифрованном БД я получаю: файл зашифрован или нет базы данных. Рай, если я установлю пароль.

Я неправильно использую DLL-файл? Я использую последнюю dll с официальной страницы. По умолчанию шифрование не поддерживается?

2 ответа

Решение

Есть несколько схем шифрования на SQLite3.

Среди них у вас есть:

  • Официальная несвободная библиотека шифрования от авторов SQLite3, названная SQLite Encryption Extension (SEE): просто заплатите и используйте dll, и измените инициализацию, чтобы установить ключ базы данных;
  • С открытым исходным кодом SQLCipher;
  • WXSQlite3 обертка;
  • Для Delphi, наша версия с открытым исходным кодом со статической связью, включенная в наш mORMot (с пользовательским шифрованием) - статическая линковка позволяет вам не использовать внешние sqlite3.dll таким образом, это поможет упростить ваше развертывание и поддержку - он предлагает легкий переход на MS SQL, Oracle или OleDB/ODBC с тем же исходным кодом от Delphi 5 до XE3 и обладает высокой скоростью;
  • Смотрите ссылку выше.

Уровень ZeosDB SQLite3 не обрабатывает ни один из них.

Драйвер API SQlite3 (модуль ZPlainSqLiteDriver) не содержит шифрования. Так что вам придется изменить это. Или переключитесь на другую оболочку, которая поддерживает API шифрования.

Недавно у меня была такая же проблема (с использованием UniDac). Официальные библиотеки не поддерживают шифрование. Есть несколько библиотек, которые включают шифрование, но они не являются взаимозаменяемыми. Т.е. БД, зашифрованная одной SQLite DLL, не может быть расшифрована другим дистрибутивом. Я думаю, что ваш случай такой же.

Мое решение было:

  • Скачал пакет... static bunde... (x86, x64) для.NET - это поддерживает шифрование (windows DPAPI, я думаю)
  • Переименован в System.Data.SQLite.dll в SQLite3.dll -> эта DLL является родной DLL и поддерживает enc/dec
  • В папке моей СУБД я заменил SQLite DLL на извлеченную выше

Таким образом, СУБД выполняет шифрование с использованием новой DLL, и ваша программа может расшифровать ее, используя ту же версию DLL.

Вы также можете взглянуть на:

Заметки:

  • Также убедитесь, что вы скопировали SQLite3.dll в каталог вашей программы. Многие другие продукты используют SQLite и находятся в%PATH%, поэтому нет гарантии, что "правильный" SQLite3.dll будет загружен вашим исполняемым файлом. Интересное решение можно найти здесь;
  • Изучите лицензию, чтобы узнать, можете ли вы использовать версию.NET бесплатно из-за этого.
Другие вопросы по тегам