Demo szyfrowania Firebird
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, wykonajCREATE 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.
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.dllDbCrypt.conf(klucz próbny)KeyHolder.dllKeyHolder.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.conflibssl-1_1-x64.dll, libcrypto-1_1-x64.dll, fbcrypt.dllZaszyfrowany gbak: gbak.exe, firebird.msgOpcjonalnie: plugins/KeyHolder.conf (klucze deweloperskie), firebird.conf
|
fbclient.dll, fbcrypt.dll, libcrypto-1_1.dllOpcjonalnie: 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:
- Ustaw ścieżkę do bazy danych lub alias w sekcji „1. Setup Login”.
- Wprowadź nazwę klucza i wartość (dla klucza RED skopiuj wartość z
KeyHolder.conf). - Możesz szyfrować/deszyfrować tym kluczem - szyfrowanie wymaga aktywnego połączenia i zajmuje trochę czasu.
- 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.
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 - skopiujWindows_64bit\WindowsClientPart_64bitobok tych plików binarnych. - Większość narzędzi GUI jest 32-bitowa - skopiuj
Windows_32bit\WindowsClientPart_32bitdo 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.
- Narzędzie uruchamia się i ładuje
fbclient.dll. fbclientodczytujefirebird.conf, widziKeyHolderPlugin=KeyHolderi ładujeplugins\keyholder.dll.- KeyHolder odczytuje
KeyHolder.conf(np. klucz Red). isqlłączy się i może wykonaćSHOW DATABASE.
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