我正在尝试使用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 boot 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连接到数据库,一切正常
答案 0 :(得分:2)
鉴于您未能在评论中提供我要求的信息,我猜测您根据所描述的行为将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中有更详细的描述。我们的常见问题解答中没有此信息,我现在已将其添加到connection rejected by remote interface (335544421)下。
使用Jaybird 3或更高版本以及Firebird 3或更高版本时,此错误可能是由于未提供用户名或密码而导致的。缺少用户名或密码会导致Jaybird不尝试任何身份验证插件。这导致Firebird拒绝连接尝试,因为至少应该进行一次身份验证尝试。