我有 2 台使用 Firebird 2.5 的服务器。每台服务器都有一个单独的数据库,其中一台连接到另一台以检索一些数据。其中一台服务器切换到 Firebird 3.0,现在它无法连接到 2.5 服务器。它说我的用户名或密码不正确。我已经使用凭据连接到 2.5 服务器,它们没问题。
为了检索数据,我在外部数据源 [SERVER] 上使用执行语句 [STATEMENT] 作为用户 [USER] 密码 [PASSWORD]。
2.5有更多的数据库,升级到3.0会很麻烦。
有人有这个问题吗?
我有 2 台使用 Firebird 2.5 的服务器。每台服务器都有一个单独的数据库,其中一台连接到另一台以检索一些数据。其中一台服务器切换到 Firebird 3.0,现在它无法连接到 2.5 服务器。它说我的用户名或密码不正确。我已经使用凭据连接到 2.5 服务器,它们没问题。
为了检索数据,我在外部数据源 [SERVER] 上使用执行语句 [STATEMENT] 作为用户 [USER] 密码 [PASSWORD]。
2.5有更多的数据库,升级到3.0会很麻烦。
有人有这个问题吗?
我使用以下简单语句(并根据我正在测试的内容修改某些部分)在具有不同端口的同一服务器上对 Firebird 2.5 (2.5.8) 和 Firebird 3 (3.0.4) 进行了一些测试,以查看我可以产生的那种连接失败。
set term #;
execute block returns (tblname char(31))
as
begin
for execute statement 'select rdb$relation_name from rdb$relations where coalesce(rdb$system_flag, 0) = 0'
on external data source 'localhost/3051:D:\data\db\testdatabase.fdb'
as user 'sysdba' password 'masterkey'
into tblname
do suspend;
end#
set term ;#
使用此语句,我会收到错误“未定义您的用户名和密码”。在以下情况下从 Firebird 3 到 2.5:
Firebird 3 有一个AuthClient
1配置,不包括Legacy_Auth
. Firebird 3 无法对 Firebird 2.5 进行身份验证,因为 Firebird 2.5 只知道旧的身份验证机制。
要解决此问题,请添加Legacy_Auth
到 Firebird 3 服务器的AuthClient
设置中firebird.conf
(例如将其设置为AuthClient = Srp, Legacy_Auth
)并重新启动服务器。
这一点很可能是你的问题。
未指定用户名和密码(即as user 'sysdba' password 'masterkey'
省略execute statement
)。这可能是由于身份验证机制的差异,因为 Firebird 不知道 SRP 协议的实际密码,因此无法对其他服务器进行身份验证。
指定用户名和密码可以解决此问题。
在相反的方向(Firebird 2.5 到 3),我无法在以下情况下建立连接:
使用仅作为 Srp 用户存在的用户名和密码进行身份验证。这会导致错误“未定义您的用户名和密码”。由于 Firebird 2.5 仅支持旧版身份验证,因此只能使用 Firebird 3 中 Legacy_UserManager 插件存在的用户进行身份验证。
为 Legacy_UserManager 插件创建一个用户(同名或不同名):
create user theuser password 'thepassword' using plugin Legacy_UserManager;
commit;
如果这导致错误"Missing requested management plugin",那么您需要编辑 Firebird 3firebird.conf
并添加Legacy_UserManager
到UserManager
设置(例如设置为UserManager = Srp, Legacy_UserManager
;默认为 only Srp
)并重新启动 Firebird。
作为 SYSDBA,您可以通过执行在 Firebird 3 服务器上检查用户存在的插件(或插件!)
select SEC$USER_NAME, SEC$PLUGIN
from SEC$USERS
Firebird 3 有设置WireCrypt = Required
(这是默认设置!)。这会产生错误“连接被远程接口拒绝”。
要解决此问题,请在 Firebird 3 服务器中设置WireCrypt = Enabled
并firebird.conf
重新启动服务器。
未指定用户名和密码(即as user 'sysdba' password 'masterkey'
省略execute statement
)。这会产生错误“未知 ISC 错误 335545106” (如果使用 Firebird 3 消息文件,实际消息是“登录期间发生错误,请检查服务器 firebird.log 了解详细信息” )其中 Firebird 3 的日志显示“没有匹配的插件server",这可能是由于身份验证机制的不同。
指定用户名和密码可以解决此问题。
Firebird 3 有一个AuthServer
配置不包括Legacy_Auth
(默认Srp
只有!)。这也会产生错误“未知 ISC 错误 335545106” (如果使用 Firebird 3 消息文件,实际消息是“登录期间发生错误,请检查服务器 firebird.log 了解详细信息” )其中 Firebird 3 的日志显示“没有匹配的插件服务器”。
要解决此问题,请添加Legacy_Auth
到 Firebird 3 服务器的AuthServer
设置中firebird.conf
(例如将其设置为AuthServer = Srp, Legacy_Auth
)并重新启动服务器。
而且,当然,双向错误“未定义您的用户名和密码”。也可以通过使用不存在的用户或错误的密码来产生。
1.这里的设置AuthClient
是相关的,因为服务器在执行时充当客户端execute statement ... on external data source ...