Jdbc Firebird 3.0加密与AES128插件-无法连接

Jdbc Firebird 3.0加密与AES128插件-无法连接,jdbc,firebird,jaybird,firebird-3.0,Jdbc,Firebird,Jaybird,Firebird 3.0,我正在使用Firebird 3,通过这里找到的AES128插件进行加密 我已经成功地加密了数据库,并且我能够使用isql连接和查询它,但是我无法从我的ColdFusion CFIDE-数据源区域进行连接。我以前使用过dbcrypt插件,它工作得很好,与未加密的数据库相比速度非常慢。但是,使用AES128插件,我得到了错误 数据源devBBL的连接验证失败 java.sql.SQLException:不支持的操作代码:97根本原因 是:java.sql.SQLException:不支持的操作代码:

我正在使用Firebird 3,通过这里找到的AES128插件进行加密

我已经成功地加密了数据库,并且我能够使用
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)(以及插件特定数据)的数据包,客户端应依次使用加密密钥响应该数据包(或者至少,插件可以使用特定于插件的数据来派生加密密钥)

3.0.4之前的Jaybird版本不支持处理加密密钥回调(操作代码97),因此会发生此错误

Jaybird 3.0.4中引入了向加密密钥回调传递固定响应的基本支持。对于早期版本,如果无法升级,解决方法是使用服务器本地加密密钥

解决方案 解决方案是将Jaybird升级到Jaybird 3.0.4,这引入了对数据库加密回调的支持。如果加密插件执行回调,但实际上不需要使用响应的内容,那么它将立即运行

如果加密插件需要一个带有密钥的回复,您可以在
dbCryptConfig
连接属性中设置密钥。您可以通过使用
base64:
前缀来使用base64编码值,也可以使用字符串密钥,该密钥将使用UTF-8编码转换为字节

例如,在连接字符串中:

jdbc:firebirdsql://localhost/appdbalias?dbCryptConfig=base64:dmVyeXNlY3JldGtleQ==

该实现目前不支持更高级的回调

Jaybird 3.0.4(或更高版本)可从

有关更多信息,请参见Jaybird 3.0.x发行说明一节

变通办法 注意只有当您还不能升级到Jaybird 3.0.4或更高版本时,才使用此解决方案

根据上的说明,您可以使用
KeyHolderPlugin=KeyFile
而不是
KeyHolderPlugin=Callback
配置服务器本地密钥

不幸的是,这不起作用。看起来有问题的插件正在无条件地执行对客户端的回调,即使它在本地有必要的数据可用。这可能是此加密插件中的错误,也可能是故意的设计决定

iPhoenix发布了该插件的新版本1.2.1,它允许您使用
plugins/KeyFile.conf
中的显式设置禁用此回调,并设置
DisableCallback=true

jdbc:firebirdsql://localhost/appdbalias?dbCryptConfig=verysecretkey