Эта страница переведена машинным переводом. Читайте английский оригинал. English

Как зашифровать базу данных 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 - пробный ключ.

Firebird Windows 32-bit Windows 64-bit Linux 32-bit Linux 64-bit
3.0 zip zip tar.xz tar.xz
4.0 zip zip tar.xz tar.xz
5.0 zip zip - tar.xz

Шаг 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.dll
  • DbCrypt.conf (пробный ключ)
  • KeyHolder.dll
  • KeyHolder.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.conf
libssl-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. Укажите путь к базе данных или алиас в разделе «1. Setup Login».
  2. Введите имя ключа и его значение (для ключа RED скопируйте значение из KeyHolder.conf).
  3. Вы можете зашифровать/расшифровать этим ключом - шифрование требует активного подключения и занимает время.
  4. Нажмите Execute query, чтобы выполнить простой SELECT через зашифрованное подключение.

Демо подключается только через TCP/IP - XNET не поддерживается. Пример явно показывает шаги подключения, транзакции и запроса, чтобы вы могли скопировать этот шаблон.

Демо-клиент шифрования: вход, имя ключа и выполнение запроса
Демо-клиент: вход, ключ, шифрование/расшифровка, тестовый запрос.
Демо-клиент шифрования, показывающий шаги подключения к зашифрованной базе данных Firebird
Прямая последовательность подключение / транзакция / запрос.

Шаг 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. Другие приложения по-прежнему передают ключ сами.

isql, подключающийся к зашифрованной базе данных через клиентский KeyHolder
Загрузка ключа на стороне клиента: fbclient → KeyHolder → KeyHolder.conf.
  1. Инструмент запускается и загружает fbclient.dll.
  2. fbclient читает firebird.conf, видит KeyHolderPlugin=KeyHolder и загружает plugins\keyholder.dll.
  3. KeyHolder читает KeyHolder.conf (например, ключ Red).
  4. isql подключается и может выполнить SHOW DATABASE.
FlameRobin, подключенный к зашифрованной базе данных Firebird с использованием клиентских ключей
Тот же шаблон с FlameRobin.

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