Цю сторінку перекладено машинним перекладом. Читайте англійський оригінал. 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 не підтримується. Приклад робить кроки підключення, транзакції та запиту явними, щоб ви могли скопіювати цей шаблон.

Encryption demo client: login, key name, and execute query
Демонстраційний клієнт: вхід, ключ, шифрування/дешифрування, тестовий запит.
Encryption demo client showing connection steps against an encrypted Firebird database
Проста послідовність підключення / транзакції / запиту.

Крок 3 - Інструменти розробника та командний рядок

Починаючи з Encryption Framework v2021, fbclient.dll може завантажувати ключі самостійно. IBExpert, FlameRobin, SQLLY, Database Workbench, RedExpert, gfix, nbackup та подібні інструменти тоді працюють без змін у коді.

Зіставте розрядність клієнта:

  • Інструменти командного рядка Firebird (isql, gfix, nbackup) відповідають серверу - скопіюйте Windows_64bit\WindowsClientPart_64bit поруч із цими виконуваними файлами.
  • Більшість графічних інструментів є 32-бітними - скопіюйте Windows_32bit\WindowsClientPart_32bit у папку інструмента.

Інструменти командного рядка тоді використовують plugins\KeyHolder.conf поруч із цією копією fbclient. Інші застосунки все ще передають ключ самостійно.

isql connecting to an encrypted database via client-side 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 connected to an encrypted Firebird database using client-side keys
Такий самий шаблон із 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