我正在使用 Firebird 3,并通过此处找到的 AES128 插件进行加密。 https://www.ibphoenix.com/products/software/cryptionplugin
我已成功加密数据库,并且可以使用
isql
连接和查询它,但是我无法从 ColdFusion CFIDE - 数据源区域中进行连接。我之前使用过 dbcrypt
插件,它工作得很好,只是与未加密的数据库相比速度非常慢。但使用 AES128 插件时,我收到错误
数据源 devBBL 连接验证失败 java.sql.SQLException: 不支持的操作代码: 97 根本原因 那是:java.sql.SQLException:不支持的操作代码:97
CFIDE 数据源窗口中的连接信息与以前相同。
JDBC URL: jdbc:firebirdsql:localhost/3050:C:\fbdb\MASTER25.FDB
Driver Class: org.firebirdsql.jdbc.FBDriver
Driver Name: JayBird
Username: SYSDBA
Password: PASSWORD
有人知道是什么导致我在尝试连接时收到此错误吗?我需要添加一些额外的参数吗?
如果数据库已加密并且插件需要回调来获取密钥(而不是使用服务器本地加密密钥),则会发生这种情况。
如果配置为使用回调来获取加密密钥,则在附加阶段,Firebird将向客户端发送一个带有操作代码
op_crypt_key_callback
(= 97)(和插件特定数据)的数据包,而客户端则应响应使用加密密钥(或者至少使用插件可以用来派生加密密钥的插件特定数据)。
Jaybird 3.0.4之前的版本不支持处理加密密钥回调(操作码97),所以会出现此错误。
Jaybird 3.0.4 中引入了将固定响应传递给加密密钥回调的基本支持。对于早期版本,如果无法升级,解决方法是使用服务器本地加密密钥。
解决方案是将 Jaybird 升级到 Jaybird 3.0.4,引入了对数据库加密回调的支持。如果加密插件执行回调,但实际上不需要使用响应的内容,那么它将开箱即用。
如果加密插件需要密钥回复,您可以在
dbCryptConfig
连接属性中设置密钥。您可以通过在其前面添加 base64:
或字符串键来使用 Base64 编码值,该值将使用 UTF-8 编码转换为字节。
例如在连接字符串中:
jdbc:firebirdsql://localhost/appdbalias?dbCryptConfig=base64:dmVyeXNlY3JldGtleQ==
或
jdbc:firebirdsql://localhost/appdbalias?dbCryptConfig=verysecretkey
该实现目前不支持更高级的回调。
Jaybird 3.0.4(或更高版本)可以从 https://www.firebirdsql.org/en/jdbc-driver/
下载请参阅 Jaybird 3.0.x 发行说明的数据库加密支持部分了解更多信息。
注意 仅当您还无法升级到 Jaybird 3.0.4 或更高版本时才使用此解决方法。
根据 https://www.ibphoenix.com/products/encryption-plugin.html 上的说明,您可以使用
KeyHolderPlugin = KeyFile
而不是 KeyHolderPlugin = Callback
来配置服务器本地密钥。
不幸的是,这不起作用。看起来相关插件正在无条件地执行对客户端的回调,即使它具有本地可用的必要数据。这可能是这个加密插件中的一个错误,或者可能是一个故意的设计决定。
IBPhoenix 发布了此插件的新版本,版本 1.2.1,它允许您通过
plugins/KeyFile.conf
中的显式设置和设置 DisableCallback = true
来禁用此回调。