此页面为机器翻译。请阅读英文原文。 English

如何使用IBSurgeon插件加密Firebird数据库:在服务器上安装、从应用程序连接、使用开发工具以及运行加密备份/恢复。完整产品:Encryption Framework

一步安装脚本

Windows:从GitHub运行安装程序 - English · Português

Linux:使用来自IBSurgeon/firebirdlinuxinstall的标准Firebird安装程序,并带-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位)压缩包中获取文件。

下载

ExampleApplications.zip - 已编译的演示客户端和源代码。DbCrypt.conf - 试用密钥。

Firebird Windows 32位 Windows 64位 Linux 32位 Linux 64位
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
}

要将密钥持有者应用于每个数据库,请在firebird.conf中添加KeyHolderPlugin = KeyHolder,或从压缩包中复制示例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\Serverfbcrypt.dlllibcrypto-1_1-x64.dlllibssl-1_1-x64.dllgbak.exefirebird.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.dllplugins/keyholder.dllDbCrypt.conf
libssl-1_1-x64.dlllibcrypto-1_1-x64.dllfbcrypt.dll
加密版gbakgbak.exefirebird.msg
可选:plugins/KeyHolder.conf(开发密钥)、firebird.conf
fbclient.dllfbcrypt.dlllibcrypto-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、gfixnbackup 及类似工具无需修改代码即可正常工作。

匹配客户端位数:

  • Firebird 命令行工具(isqlgfixnbackup)与服务器匹配 - 将 Windows_64bit\WindowsClientPart_64bit 复制到这些二进制文件旁边。
  • 大多数 GUI 工具是 32 位的 - 将 Windows_32bit\WindowsClientPart_32bit 复制到工具的文件夹中。

命令行工具随后使用该 fbclient 副本旁边的 plugins\KeyHolder.conf。其他应用程序仍然自行传递密钥。

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