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 拒绝连接尝试,因为至少应该进行一次身份验证尝试。
我正在尝试使用 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 拒绝连接尝试,因为至少应该进行一次身份验证尝试。