GDS 异常。 335544421. 连接被远程接口拒绝

GDS Exception. 335544421. connection rejected by remote interface

我正在尝试使用 jaybird jdbc 驱动程序连接到 firebird 数据库。 Firebird 在 ubuntu 下 运行。我在 /tmp/hellofb.fdb 下创建了一个简单的数据库(是的,这不是最好的地方,只是为了测试)。我是 运行 firebird superserver 3.0。 firebird 服务已启动 运行 sudo service firbird3.0 status:

firebird3.0.service - Firebird Database Server ( SuperServer )
   Loaded: loaded (/lib/systemd/system/firebird3.0.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2017-10-25 22:40:53 CEST; 25min ago
  Process: 23411 ExecStart=/usr/sbin/fbguard -pidfile /run/firebird3.0/default.pid -daemon -forever (code=exited, status=0/SUCC
 Main PID: 23412 (fbguard)
    Tasks: 4 (limit: 4915)
   CGroup: /system.slice/firebird3.0.service
           ├─23412 /usr/sbin/fbguard -pidfile /run/firebird3.0/default.pid -daemon -forever
           └─23413 /usr/sbin/firebird

Okt 25 22:40:53 XPS-L322X systemd[1]: Starting Firebird Database Server ( SuperServer )...
Okt 25 22:40:53 XPS-L322X systemd[1]: Started Firebird Database Server ( SuperServer ).

我的 spring 启动 application.properties 由:

spring.datasource.url:jdbc:firebirdsql://localhost:3050//tmp/hellofb.fdb
spring.datasource.driverClassName:org.firebirdsql.jdbc.FBDriver

但是,当我尝试连接到数据库时,出现以下异常:

org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544421. connection rejected by remote interface

我已经尝试了 jaybird FAQ 给出的所有可能的排列,我 运行 没有选择。任何帮助将不胜感激!

注意:我尝试使用 flamerobin 连接到数据库,一切正常

鉴于您没有提供我在评论中要求的信息,我不得不猜测您正在使用 Firebird 3 和 Jaybird 2。2.x 根据描述的行为。

错误 连接被远程接口拒绝 也可能在下面描述的其他情况下发生。

可能的原因:需要有线协议加密

Firebird 3 引入了许多默认启用但 Jaybird 2.2 不支持的新安全功能。要允许 Jaybird 2.2 连接到 Firebird 3,您需要放宽其中一些设置。

要允许 Jaybird 2.2.x 连接,您需要在 firebird.conf 中更改以下设置(更改设置后重新启动 Firebird):

WireCrypt 设置从默认值 Required 放宽到 Enabled:

WireCrypt = Enabled

启用对旧版身份验证协议的支持:

AuthServer = Srp, Legacy_Auth

然后您需要通过启用对旧版用户管理器的支持,确保您要用于连接到 Firebird 的用户是使用旧版用户管理器创建的:

UserManager = Srp, Legacy_UserManager

重新启动 Firebird 以应用这些设置,然后 - 在 Flamerobin 中 - 使用 SYSDBA 帐户(或角色为 RDB$ADMIN 的用户),创建所需的用户:

CREATE USER youruser PASSWORD 'yourpasw' USING PLUGIN Legacy_UserManager

或者您可以升级到 Jaybird 3.0.4 或更高版本,它支持 Srp 身份验证协议和有线协议加密。

这些设置在我们的 wiki 文章 Jaybird and Firebird 3. This information was absent from our FAQ, I have now added it under connection rejected by remote interface (335544421) 中有更详细的描述。

可能原因:没有用户名或密码

对于 Jaybird 3 或更高版本和 Firebird 3 或更高版本,此错误可能是由于未提供用户名或密码造成的。缺少用户名或密码会导致 Jaybird 不尝试任何身份验证插件。这导致 Firebird 拒绝连接尝试,因为至少应该进行一次身份验证尝试。