我正在尝试使用jaybird jdbc驱动程序连接到firebird数据库。火鸟在乌班图手下奔跑。我在/tmp/hellofb.fdb下创建了一个简单的数据库(是的,不是最好的地方,只是为了测试)。我正在运行firebird superserver 3.0。火鸟服务已启动并运行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-bootapplication.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常见问题解答中给出的所有可能的排列,我已经没有选择了。如有任何帮助,我们将不胜感激!
注意:我尝试使用Flamrobin连接到数据库,一切正常
鉴于您还没有提供我在评论中要求的信息,根据所描述的行为,我不得不猜测您正在使用带有Jaybird 2.2.x的Firebird 3。
远程接口拒绝的错误连接也可能发生在以下所述以外的其他情况下。
可能的原因:需要有线协议加密
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和Firebird3中有更详细的描述。我们的常见问题解答中没有此信息,我现在已将其添加到被远程接口拒绝的连接下(335544421)。
可能的原因:没有用户名或密码
对于Jaybird 3或更高版本和Firebird 3及更高版本,此错误可能是由于未提供用户名或密码造成的。由于没有用户名或密码,Jaybird无法尝试任何身份验证插件。这导致Firebird拒绝连接尝试,因为至少应该进行一次身份验证尝试。