Ta strona została przetłumaczona maszynowo. Przeczytaj oryginał angielski. English

Jak zaszyfrować bazę danych Firebird za pomocą wtyczki IBSurgeon: instalacja na serwerze, połączenie z aplikacji, narzędzia deweloperskie oraz zaszyfrowana kopia zapasowa i przywracanie. Pełny produkt: Encryption Framework.

Skrypty instalacyjne w 1 kroku

Windows: uruchom instalator z GitHub - English · Português.

Linux: użyj standardowego instalatora Firebird z IBSurgeon/firebirdlinuxinstall z opcją -crypt-only.

Wymagania wstępne dla instalacji ręcznej

  • Firebird 3.0.3 lub nowszy (3.x, 4.x, 5.x). Starsze wersje nie są obsługiwane przez to demo.
  • Archiwa wtyczek próbnych oraz przykłady Delphi/Lazarus/.NET/PHP (poniżej).
  • Próbny DbCrypt.conf w folderze plugins.
  • Użytkownik SYSDBA. Jeśli go brakuje: zatrzymaj Firebird, uruchom isql -user sysdba employee.fdb, wykonaj CREATE USER SYSDBA PASSWORD 'masterkey';, uruchom usługę.

Przewodnik używa 64-bitowego Firebird. Dla wersji 32-bitowej pobierz pliki z odpowiedniego archiwum WINDOWS_32bit (lub Linux 32-bit).

Pliki do pobrania

ExampleApplications.zip - skompilowany klient demo i źródła. DbCrypt.conf - klucz próbny.

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

Krok 1 - Wstępne szyfrowanie (przykład Windows)

Umieść niezaszyfrowaną bazę danych w dogodnym miejscu, na przykład C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB.

1. Alias w databases.conf

crypt = C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB
{
KeyHolderPlugin = KeyHolder
}

Aby zastosować posiadacza kluczy do każdej bazy danych, dodaj KeyHolderPlugin = KeyHolder w firebird.conf lub skopiuj przykładowy firebird.conf z archiwum (krok 3).

2. Pliki do server/plugins

Z FB_NN_WINDOWS_64bit\Server\plugins:

  • DbCrypt.dll
  • DbCrypt.conf (klucz próbny)
  • KeyHolder.dll
  • KeyHolder.conf - plik tekstowy z kluczami tylko do celów deweloperskich. Nie dostarczaj go użytkownikom końcowym.

3. Pliki do katalogu głównego Firebird

Z FB_NN_WINDOWS_64bit\Server: fbcrypt.dll, libcrypto-1_1-x64.dll, libssl-1_1-x64.dll, gbak.exe, firebird.msg oraz opcjonalnie firebird.conf.

4. Szyfrowanie za pomocą 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; (lub gstat -h) powinno zgłosić Database encrypted.

dbcrypt to nazwa wtyczki; red to klucz zdefiniowany w KeyHolder.conf. Na Linuksie użyj cudzysłowów i zachowaj wielkość liter:

alter database encrypt with "DbCrypt" key Red;

Po tym kroku serwer przechowuje klucze w KeyHolder.conf (tryb deweloperski / administracyjny).

Co znajduje się na serwerze, a co na kliencie

Serwer Klient
plugins/dbcrypt.dll, plugins/keyholder.dll, DbCrypt.conf
libssl-1_1-x64.dll, libcrypto-1_1-x64.dll, fbcrypt.dll
Zaszyfrowany gbak: gbak.exe, firebird.msg
Opcjonalnie: plugins/KeyHolder.conf (klucze deweloperskie), firebird.conf
fbclient.dll, fbcrypt.dll, libcrypto-1_1.dll
Opcjonalnie: firebird.conf

Krok 2 - Połączenie z aplikacji klienckiej

Aby zasymulować środowisko klienta, zmień nazwę lub usuń plugins/KeyHolder.conf. Wtyczka będzie wtedy oczekiwać klucza od aplikacji. ExampleApplications.zip zawiera skompilowany klient Delphi XE8 oraz przykłady Lazarus, .NET i PHP.

Przed standardowym połączeniem aplikacja wysyła klucz (kilka dodatkowych wywołań). Po tym korzystanie z Firebird pozostaje bez zmian. Demo Delphi znajduje się w Example_Delphi_EnhancedCryptTestClient\Win32\Debug:

  1. Ustaw ścieżkę do bazy danych lub alias w sekcji „1. Setup Login”.
  2. Wprowadź nazwę klucza i wartość (dla klucza RED skopiuj wartość z KeyHolder.conf).
  3. Możesz szyfrować/deszyfrować tym kluczem - szyfrowanie wymaga aktywnego połączenia i zajmuje trochę czasu.
  4. Kliknij Execute query, aby uruchomić prosty SELECT przez zaszyfrowane połączenie.

Demo łączy się tylko przez TCP/IP - XNET nie jest obsługiwany. Przykład jawnie pokazuje kroki połączenia, transakcji i zapytania, aby można było skopiować ten wzorzec.

Klient demo szyfrowania: logowanie, nazwa klucza i wykonanie zapytania
Klient demo: logowanie, klucz, szyfrowanie/deszyfrowanie, testowe zapytanie.
Klient demo szyfrowania pokazujący kroki połączenia z zaszyfrowaną bazą Firebird
Prosta sekwencja połączenie / transakcja / zapytanie.

Krok 3 - Narzędzia deweloperskie i wiersz poleceń

Od Encryption Framework v2021, fbclient.dll może samodzielnie ładować klucze. IBExpert, FlameRobin, SQLLY, Database Workbench, RedExpert, gfix, nbackup i podobne narzędzia działają wtedy bez zmian w kodzie.

Dopasuj bitowość klienta:

  • Narzędzia wiersza poleceń Firebird (isql, gfix, nbackup) odpowiadają serwerowi - skopiuj Windows_64bit\WindowsClientPart_64bit obok tych plików binarnych.
  • Większość narzędzi GUI jest 32-bitowa - skopiuj Windows_32bit\WindowsClientPart_32bit do folderu narzędzia.

Narzędzia wiersza poleceń używają wtedy plugins\KeyHolder.conf znajdującego się obok tej kopii fbclient. Inne aplikacje nadal przekazują klucz samodzielnie.

isql łączący się z zaszyfrowaną bazą danych przez KeyHolder po stronie klienta
Ładowanie klucza po stronie klienta: fbclient → KeyHolder → KeyHolder.conf.
  1. Narzędzie uruchamia się i ładuje fbclient.dll.
  2. fbclient odczytuje firebird.conf, widzi KeyHolderPlugin=KeyHolder i ładuje plugins\keyholder.dll.
  3. KeyHolder odczytuje KeyHolder.conf (np. klucz Red).
  4. isql łączy się i może wykonać SHOW DATABASE.
FlameRobin połączony z zaszyfrowaną bazą Firebird przy użyciu kluczy po stronie klienta
Ten sam wzorzec z FlameRobin.

gbak: ładowanie klucza po stronie klienta tworzy niezaszyfrowany plik .fbk. Użyj gbak z frameworka z jawnymi opcjami -KEYFILE / -KEYNAME / -KEY, aby kopia zapasowa pozostała zaszyfrowana.

nbackup: przyrostowe kopie pozostają zaszyfrowane.

Krok 4 - Kopia zapasowa i przywracanie

Standardowy gbak nie może otworzyć produkcyjnej zaszyfrowanej bazy danych (brak kluczy na serwerze, brak klucza od klienta). Framework zawiera gbak, który szyfruje kopię zapasową tym samym kluczem co bazę danych. gbak -? dodaje:

-KEYFILE   nazwa pliku z kluczami szyfrowania bazy i kopii zapasowej
-KEYNAME   nazwa klucza używanego do szyfrowania
-KEY       wartość klucza w notacji "0x5A,"

Kopia zapasowa

Podaj klucz, aby gbak mógł odczytać bazę danych i zaszyfrować plik .fbk - albo plik klucza (ten sam układ co KeyHolder.conf), albo jawną wartość. Wykonanie kopii zapasowej niezaszyfrowanej bazy danych z tymi przełącznikami nadal tworzy zaszyfrowaną kopię zapasową.

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

Z -KEY nadal musisz podać -KEYNAME.

Przywracanie

Ta sama zasada: plik klucza lub jawny klucz. Przywrócenie niezaszyfrowanej kopii zapasowej z tymi przełącznikami tworzy zaszyfrowaną bazę danych.

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