Trang này được dịch bằng máy. Đọc bản gốc tiếng Anh. English

Cách mã hóa cơ sở dữ liệu Firebird bằng plugin IBSurgeon: cài đặt trên máy chủ, kết nối từ ứng dụng, sử dụng công cụ dành cho nhà phát triển và thực hiện sao lưu/khôi phục được mã hóa. Sản phẩm đầy đủ: Encryption Framework.

Tập lệnh cài đặt 1 bước

Windows: chạy trình cài đặt từ GitHub - Tiếng Anh · Português.

Linux: sử dụng trình cài đặt Firebird tiêu chuẩn từ IBSurgeon/firebirdlinuxinstall với tùy chọn -crypt-only.

Điều kiện tiên quyết để cài đặt thủ công

  • Firebird 3.0.3 trở lên (3.x, 4.x, 5.x). Các phiên bản cũ hơn không được hỗ trợ bởi bản demo này.
  • Các kho lưu trữ plugin dùng thử và các ví dụ Delphi/Lazarus/.NET/PHP (bên dưới).
  • Tệp DbCrypt.conf dùng thử trong thư mục plugins.
  • Người dùng SYSDBA. Nếu thiếu: dừng Firebird, chạy isql -user sysdba employee.fdb, thực thi CREATE USER SYSDBA PASSWORD 'masterkey';, khởi động dịch vụ.

Hướng dẫn sử dụng Firebird 64-bit. Đối với 32-bit, lấy tệp từ kho lưu trữ WINDOWS_32bit (hoặc Linux 32-bit) tương ứng.

Tải xuống

ExampleApplications.zip - ứng dụng khách demo đã biên dịch và mã nguồn. DbCrypt.conf - khóa dùng thử.

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

Bước 1 - Mã hóa ban đầu (ví dụ Windows)

Đặt cơ sở dữ liệu chưa mã hóa ở vị trí thuận tiện, ví dụ C:\Temp\EMPLOYEE30\EMPLOYEE30.FDB.

1. Bí danh trong databases.conf

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

Để áp dụng key holder cho mọi cơ sở dữ liệu, thêm KeyHolderPlugin = KeyHolder vào firebird.conf, hoặc sao chép tệp firebird.conf mẫu từ kho lưu trữ (bước 3).

2. Các tệp vào server/plugins

Từ FB_NN_WINDOWS_64bit\Server\plugins:

  • DbCrypt.dll
  • DbCrypt.conf (khóa dùng thử)
  • KeyHolder.dll
  • KeyHolder.conf - tệp văn bản chứa khóa chỉ dành cho phát triển. Không phân phối cho người dùng cuối.

3. Các tệp vào thư mục gốc Firebird

Từ FB_NN_WINDOWS_64bit\Server: fbcrypt.dll, libcrypto-1_1-x64.dll, libssl-1_1-x64.dll, gbak.exe, firebird.msg và tùy chọn firebird.conf.

4. Mã hóa bằng 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; (hoặc gstat -h) sẽ báo Database encrypted.

dbcrypt là tên plugin; red là khóa được định nghĩa trong KeyHolder.conf. Trên Linux, đặt tên trong dấu ngoặc kép và khớp chữ hoa/chữ thường:

alter database encrypt with "DbCrypt" key Red;

Sau bước này, máy chủ giữ khóa trong KeyHolder.conf (chế độ phát triển / quản trị).

Những gì nằm trên máy chủ so với máy khách

Máy chủ Máy khách
plugins/dbcrypt.dll, plugins/keyholder.dll, DbCrypt.conf
libssl-1_1-x64.dll, libcrypto-1_1-x64.dll, fbcrypt.dll
gbak được mã hóa: gbak.exe, firebird.msg
Tùy chọn: plugins/KeyHolder.conf (khóa phát triển), firebird.conf
fbclient.dll, fbcrypt.dll, libcrypto-1_1.dll
Tùy chọn: firebird.conf

Bước 2 - Kết nối từ ứng dụng khách

Để mô phỏng môi trường khách hàng, đổi tên hoặc xóa plugins/KeyHolder.conf. Plugin sau đó sẽ nhận khóa từ ứng dụng. ExampleApplications.zip chứa ứng dụng khách Delphi XE8 đã biên dịch cùng các mẫu Lazarus, .NET và PHP.

Trước khi kết nối thông thường, ứng dụng gửi khóa (một vài lệnh gọi bổ sung). Sau đó, việc sử dụng Firebird không thay đổi. Bản demo Delphi nằm trong Example_Delphi_EnhancedCryptTestClient\Win32\Debug:

  1. Đặt đường dẫn hoặc bí danh cơ sở dữ liệu trong mục “1. Setup Login”.
  2. Nhập tên khóa và giá trị (đối với khóa RED, sao chép giá trị từ KeyHolder.conf).
  3. Bạn có thể mã hóa/giải mã bằng khóa đó - mã hóa cần kết nối đang hoạt động và mất thời gian.
  4. Nhấp Execute query để chạy một câu lệnh SELECT đơn giản qua kết nối được mã hóa.

Bản demo chỉ kết nối qua TCP/IP - XNET không được hỗ trợ. Mẫu giữ các bước kết nối, giao dịch và truy vấn rõ ràng để bạn có thể sao chép mẫu này.

Ứng dụng khách demo mã hóa: đăng nhập, tên khóa và thực thi truy vấn
Ứng dụng khách demo: đăng nhập, khóa, mã hóa/giải mã, truy vấn thử nghiệm.
Ứng dụng khách demo mã hóa hiển thị các bước kết nối với cơ sở dữ liệu Firebird được mã hóa
Trình tự kết nối / giao dịch / truy vấn đơn giản.

Bước 3 - Công cụ dành cho nhà phát triển và dòng lệnh

Từ Encryption Framework v2021, fbclient.dll có thể tự tải khóa. IBExpert, FlameRobin, SQLLY, Database Workbench, RedExpert, gfix, nbackup và các công cụ tương tự hoạt động mà không cần thay đổi mã.

Khớp kiến trúc bit của máy khách:

  • Các công cụ dòng lệnh Firebird (isql, gfix, nbackup) khớp với máy chủ - sao chép Windows_64bit\WindowsClientPart_64bit vào cạnh các tệp nhị phân đó.
  • Hầu hết công cụ GUI là 32-bit - sao chép Windows_32bit\WindowsClientPart_32bit vào thư mục của công cụ.

Các công cụ dòng lệnh sau đó sử dụng plugins\KeyHolder.conf bên cạnh bản sao fbclient đó. Các ứng dụng khác vẫn tự truyền khóa.

isql kết nối đến cơ sở dữ liệu được mã hóa qua KeyHolder phía máy khách
Tải khóa phía máy khách: fbclient → KeyHolder → KeyHolder.conf.
  1. Công cụ khởi động và tải fbclient.dll.
  2. fbclient đọc firebird.conf, thấy KeyHolderPlugin=KeyHolder và tải plugins\keyholder.dll.
  3. KeyHolder đọc KeyHolder.conf (ví dụ khóa Red).
  4. isql kết nối và có thể SHOW DATABASE.
FlameRobin kết nối đến cơ sở dữ liệu Firebird được mã hóa bằng khóa phía máy khách
Mẫu tương tự với FlameRobin.

gbak: tải khóa phía máy khách tạo ra tệp .fbk không được mã hóa. Sử dụng gbak của framework với các tùy chọn -KEYFILE / -KEYNAME / -KEY rõ ràng để bản sao lưu vẫn được mã hóa.

nbackup: các bản sao tăng dần vẫn được mã hóa.

Bước 4 - Sao lưu và phục hồi

gbak thông thường không thể mở cơ sở dữ liệu đã mã hóa trong sản xuất (không có khóa trên máy chủ, không có khóa từ máy khách). Framework đi kèm một gbak mã hóa bản sao lưu bằng cùng khóa với cơ sở dữ liệu. gbak -? bổ sung:

-KEYFILE   tên tệp chứa khóa mã hóa DB và bản sao lưu
-KEYNAME   tên khóa được sử dụng để mã hóa
-KEY       giá trị khóa ở dạng ký hiệu "0x5A,"

Sao lưu

Cung cấp khóa để gbak có thể đọc cơ sở dữ liệu và mã hóa tệp .fbk - hoặc dùng tệp khóa (cùng định dạng như KeyHolder.conf) hoặc giá trị khóa tường minh. Sao lưu cơ sở dữ liệu chưa mã hóa với các tùy chọn này vẫn tạo ra bản sao lưu đã mã hóa.

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

Với -KEY bạn vẫn phải truyền -KEYNAME.

Phục hồi

Ý tưởng tương tự: tệp khóa hoặc khóa tường minh. Phục hồi bản sao lưu chưa mã hóa với các tùy chọn này sẽ tạo ra cơ sở dữ liệu đã mã hóa.

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