Демо Firebird шифрования
Как зашифровать базу данных Firebird с помощью плагина IBSurgeon: установка на сервер, подключение из приложения, использование инструментов разработчика и выполнение зашифрованного резервного копирования/восстановления. Полный продукт: Encryption Framework.
Скрипты установки в 1 шаг
Windows: запустите установщик из GitHub - English · Português.
Linux: используйте стандартный установщик Firebird из IBSurgeon/firebirdlinuxinstall с параметром -crypt-only.
Предварительные требования для ручной установки
- Firebird 3.0.3 или выше (3.x, 4.x, 5.x). Более старые версии не поддерживаются этой демо-версией.
- Пробные архивы плагинов и примеры Delphi/Lazarus/.NET/PHP (ниже).
- Пробный DbCrypt.conf в папке
plugins. - Пользователь SYSDBA. Если отсутствует: остановите Firebird, выполните
isql -user sysdba employee.fdb, выполнитеCREATE USER SYSDBA PASSWORD 'masterkey';, запустите службу.
В пошаговом руководстве используется 64-битный Firebird. Для 32-битной версии возьмите файлы из соответствующего архива WINDOWS_32bit (или Linux 32-bit).
Загрузки
ExampleApplications.zip - скомпилированный демонстрационный клиент и исходные коды. DbCrypt.conf - пробный ключ.
Шаг 1 - Первоначальное шифрование (пример для Windows)
Поместите незашифрованную базу данных в удобное место, например C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB.
1. Псевдоним в databases.conf
crypt = C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB
{
KeyHolderPlugin = KeyHolder
}
Чтобы применить держатель ключей ко всем базам данных, добавьте KeyHolderPlugin = KeyHolder в firebird.conf или скопируйте образец firebird.conf из архива (шаг 3).
2. Файлы в server/plugins
Из FB_NN_WINDOWS_64bit\Server\plugins:
DbCrypt.dllDbCrypt.conf(пробный ключ)KeyHolder.dllKeyHolder.conf- текстовый файл с ключами только для разработки. Не поставляйте его конечным пользователям.
3. Файлы в корень Firebird
Из FB_NN_WINDOWS_64bit\Server: fbcrypt.dll, libcrypto-1_1-x64.dll, libssl-1_1-x64.dll, gbak.exe, firebird.msg и, при необходимости, firebird.conf.
4. Шифрование с помощью isql
isql localhost:C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB -user SYSDBA -pass masterkey
SQL> alter database encrypt with dbcrypt key red;
SQL> show database;
show database; (или gstat -h) должно сообщить Database encrypted.
dbcrypt - это имя плагина; red - ключ, определённый в KeyHolder.conf. В Linux заключайте имена в кавычки и соблюдайте регистр:
alter database encrypt with "DbCrypt" key Red;
После этого шага сервер хранит ключи в KeyHolder.conf (режим разработки / администратора).
Что находится на сервере, а что на клиенте
| Сервер | Клиент |
|---|---|
plugins/dbcrypt.dll, plugins/keyholder.dll, DbCrypt.conflibssl-1_1-x64.dll, libcrypto-1_1-x64.dll, fbcrypt.dllЗашифрованный gbak: gbak.exe, firebird.msgНеобязательно: plugins/KeyHolder.conf (ключи разработки), firebird.conf
|
fbclient.dll, fbcrypt.dll, libcrypto-1_1.dllНеобязательно: firebird.conf
|
Шаг 2 - Подключение из клиентского приложения
Чтобы имитировать сайт заказчика, переименуйте или удалите plugins/KeyHolder.conf. Затем плагин ожидает ключ от приложения. ExampleApplications.zip содержит скомпилированный клиент Delphi XE8, а также примеры Lazarus, .NET и PHP.
Перед обычным подключением приложение отправляет ключ (несколько дополнительных вызовов). После этого использование Firebird не меняется. Delphi-демо находится в Example_Delphi_EnhancedCryptTestClient\Win32\Debug:
- Укажите путь к базе данных или алиас в разделе «1. Setup Login».
- Введите имя ключа и его значение (для ключа RED скопируйте значение из
KeyHolder.conf). - Вы можете зашифровать/расшифровать этим ключом - шифрование требует активного подключения и занимает время.
- Нажмите Execute query, чтобы выполнить простой SELECT через зашифрованное подключение.
Демо подключается только через TCP/IP - XNET не поддерживается. Пример явно показывает шаги подключения, транзакции и запроса, чтобы вы могли скопировать этот шаблон.
Шаг 3 - Инструменты разработчика и командная строка
Начиная с Encryption Framework v2021, fbclient.dll может загружать ключи самостоятельно. IBExpert, FlameRobin, SQLLY, Database Workbench, RedExpert, gfix, nbackup и подобные инструменты работают без изменений кода.
Совпадение разрядности клиента:
- Инструменты командной строки Firebird (
isql,gfix,nbackup) соответствуют серверу - скопируйтеWindows_64bit\WindowsClientPart_64bitрядом с этими исполняемыми файлами. - Большинство GUI-инструментов - 32-битные - скопируйте
Windows_32bit\WindowsClientPart_32bitв папку инструмента.
Инструменты командной строки затем используют plugins\KeyHolder.conf рядом с этой копией fbclient. Другие приложения по-прежнему передают ключ сами.
- Инструмент запускается и загружает
fbclient.dll. fbclientчитаетfirebird.conf, видитKeyHolderPlugin=KeyHolderи загружаетplugins\keyholder.dll.- KeyHolder читает
KeyHolder.conf(например, ключ Red). isqlподключается и может выполнитьSHOW DATABASE.
gbak: загрузка ключа на стороне клиента создаёт незашифрованный .fbk. Используйте gbak из фреймворка с явными параметрами -KEYFILE / -KEYNAME / -KEY, чтобы резервная копия оставалась зашифрованной.
nbackup: инкрементальные копии остаются зашифрованными.
Шаг 4 - Резервное копирование и восстановление
Стандартный gbak не может открыть производственную зашифрованную базу данных (нет ключей на сервере, нет ключа от клиента). Фреймворк поставляется с gbak, который шифрует резервную копию тем же ключом, что и база данных. gbak -? добавляет:
-KEYFILE имя файла с ключом(ами) шифрования БД и резервной копии
-KEYNAME имя ключа, используемого для шифрования
-KEY значение ключа в нотации "0x5A,"
Резервное копирование
Укажите ключ, чтобы gbak мог прочитать базу данных и зашифровать .fbk - либо файл ключа (та же структура, что и KeyHolder.conf), либо явное значение. Резервное копирование незашифрованной базы данных с этими параметрами всё равно создаёт зашифрованную резервную копию.
gbak.exe -b -KEYFILE h:\Firebird\examplekeyfile.txt -KEYNAME RED localhost:h:\employee_30.fdb h:\testenc4.fbk -user SYSDBA -pass masterkey
gbak -b -KEY 0xec,0xa1,0x52,0xf6,0x4d,0x27,0xda,0x93,0x53,0xe5,0x48,0x86,0xb9,0x7d,0xe2,0x8f,0x3b,0xfa,0xb7,0x91,0x22,0x5b,0x59,0x15,0x82,0x35,0xf5,0x30,0x1f,0x04,0xdc,0x75, -keyname RED localhost:h:\employee30\employee30.fdb h:\testenc303.fbk -user SYSDBA -pass masterkey
С параметром -KEY вы всё равно должны передать -KEYNAME.
Восстановление
Та же идея: файл ключа или явный ключ. Восстановление незашифрованной резервной копии с этими параметрами создаёт зашифрованную базу данных.
gbak -c -v -keyfile h:\Firebird\examplekeyfile.txt -keyname white h:\testenc4.fbk localhost:h:\employeeenc4.fdb -user SYSDBA -pass masterkey
gbak -c -v -key 0xec,0xa1,0x52,0xf6,0x4d,0x27,0xda,0x93,0x53,0xe5,0x48,0x86,0xb9,0x7d,0xe2,0x8f,0x3b,0xfa,0xb7,0x91,0x22,0x5b,0x59,0x15,0x82,0x35,0xf5,0x30,0x1f,0x04,0xdc,0x75, -keyname RED h:\testenc4.fbk localhost:h:\employeeenc4.fdb -user SYSDBA -pass masterkey