从 FB3.0 连接到 FB2.5
Connect from FB3.0 to FB2.5
我有 2 台使用 Firebird 2.5 的服务器。每台服务器都有一个单独的数据库,其中一台连接到另一台以检索一些数据。其中一台服务器切换到 Firebird 3.0,现在无法连接到 2.5 服务器。它说我的用户名或密码不正确。我已使用凭据连接到 2.5 服务器,它们没问题。
为了检索数据,我以用户 [USER] 密码 [PASSWORD] 在外部数据源 [SERVER] 上使用执行语句 [STATEMENT]。
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 到 Firebird 2.5
使用此语句,在以下情况下,我可以从 Firebird 3 到 2.5 得到错误 "Your user name and password are not defined.":
Firebird 3 的 AuthClient
1 配置不包含 Legacy_Auth
。 Firebird 3 无法向 Firebird 2.5 进行身份验证,因为 Firebird 2.5 只知道遗留身份验证机制。
要解决此问题,请将 Legacy_Auth
添加到 Firebird 3 服务器 firebird.conf
中的 AuthClient
设置(例如将其设置为 AuthClient = Srp, Legacy_Auth
)并重新启动服务器.
这点很可能是你的问题。
未指定用户名和密码(即在 execute statement
中留下 as user 'sysdba' password 'masterkey'
)。这可能是由于身份验证机制的差异,因为 Firebird 不知道 SRP 协议的实际密码,因此将无法向其他服务器进行身份验证。
指定用户名和密码可以解决此问题。
Firebird 2.5 到 Firebird 3
反方向(Firebird 2.5 到 3),以下情况无法建立连接:
使用仅作为 Srp 用户存在的用户名和密码进行身份验证。这会导致错误 "Your user name and password are not defined.",因为 Firebird 2.5 仅支持旧版身份验证,因此只能与 Firebird 3 中 Legacy_UserManager 插件存在的用户进行身份验证.
为 Legacy_UserManager 插件创建一个用户(同名或不同名):
create user theuser password 'thepassword' using plugin Legacy_UserManager;
commit;
如果这导致错误"Missing requested management plugin",那么您需要编辑Firebird 3 firebird.conf
并将Legacy_UserManager
添加到UserManager
设置(例如设置为 UserManager = Srp, Legacy_UserManager
;默认仅为 Srp
)并重新启动 Firebird。
作为 SYSDBA,您可以通过执行
检查 Firebird 3 服务器上存在哪个插件(或多个插件!)用户存在
select SEC$USER_NAME, SEC$PLUGIN
from SEC$USERS
Firebird 3 具有设置 WireCrypt = Required
(这是默认值!)。这会产生错误 "connection rejected by remote interface".
要解决此问题,请在 Firebird 3 服务器的 firebird.conf
中设置 WireCrypt = Enabled
并重新启动服务器。
未指定用户名和密码(即在 execute statement
中留下 as user 'sysdba' password 'masterkey'
)。这会产生错误 "unknown ISC error 335545106"(如果使用 Firebird 3 消息文件,实际消息是 "Error occurred during login, please check server firebird.log for details"),其中日志Firebird 3 的表示 "No matching plugins on server",这可能是由于身份验证机制的差异。
指定用户名和密码可以解决此问题。
Firebird 3 的 AuthServer
配置不包含 Legacy_Auth
(默认仅 Srp
!)。这也会产生错误 "unknown ISC error 335545106"(如果使用 Firebird 3 消息文件,实际消息是 "Error occurred during login, please check server firebird.log for details"),其中日志火鸟 3 说 "No matching plugins on server".
要解决此问题,请将 Legacy_Auth
添加到 Firebird 3 服务器 firebird.conf
中的 AuthServer
设置(例如将其设置为 AuthServer = Srp, Legacy_Auth
)并重新启动服务器.
当然,双向错误"Your user name and password are not defined."也可以通过使用不存在的用户或错误的密码产生。
1. 设置 AuthClient
在这里是相关的,因为服务器在执行 execute statement ... on external data source ...
时充当客户端
我有 2 台使用 Firebird 2.5 的服务器。每台服务器都有一个单独的数据库,其中一台连接到另一台以检索一些数据。其中一台服务器切换到 Firebird 3.0,现在无法连接到 2.5 服务器。它说我的用户名或密码不正确。我已使用凭据连接到 2.5 服务器,它们没问题。
为了检索数据,我以用户 [USER] 密码 [PASSWORD] 在外部数据源 [SERVER] 上使用执行语句 [STATEMENT]。
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 到 Firebird 2.5
使用此语句,在以下情况下,我可以从 Firebird 3 到 2.5 得到错误 "Your user name and password are not defined.":
Firebird 3 的
AuthClient
1 配置不包含Legacy_Auth
。 Firebird 3 无法向 Firebird 2.5 进行身份验证,因为 Firebird 2.5 只知道遗留身份验证机制。要解决此问题,请将
Legacy_Auth
添加到 Firebird 3 服务器firebird.conf
中的AuthClient
设置(例如将其设置为AuthClient = Srp, Legacy_Auth
)并重新启动服务器.这点很可能是你的问题。
未指定用户名和密码(即在
execute statement
中留下as user 'sysdba' password 'masterkey'
)。这可能是由于身份验证机制的差异,因为 Firebird 不知道 SRP 协议的实际密码,因此将无法向其他服务器进行身份验证。指定用户名和密码可以解决此问题。
Firebird 2.5 到 Firebird 3
反方向(Firebird 2.5 到 3),以下情况无法建立连接:
使用仅作为 Srp 用户存在的用户名和密码进行身份验证。这会导致错误 "Your user name and password are not defined.",因为 Firebird 2.5 仅支持旧版身份验证,因此只能与 Firebird 3 中 Legacy_UserManager 插件存在的用户进行身份验证.
为 Legacy_UserManager 插件创建一个用户(同名或不同名):
create user theuser password 'thepassword' using plugin Legacy_UserManager; commit;
如果这导致错误"Missing requested management plugin",那么您需要编辑Firebird 3
firebird.conf
并将Legacy_UserManager
添加到UserManager
设置(例如设置为UserManager = Srp, Legacy_UserManager
;默认仅为Srp
)并重新启动 Firebird。作为 SYSDBA,您可以通过执行
检查 Firebird 3 服务器上存在哪个插件(或多个插件!)用户存在select SEC$USER_NAME, SEC$PLUGIN from SEC$USERS
Firebird 3 具有设置
WireCrypt = Required
(这是默认值!)。这会产生错误 "connection rejected by remote interface".要解决此问题,请在 Firebird 3 服务器的
firebird.conf
中设置WireCrypt = Enabled
并重新启动服务器。未指定用户名和密码(即在
execute statement
中留下as user 'sysdba' password 'masterkey'
)。这会产生错误 "unknown ISC error 335545106"(如果使用 Firebird 3 消息文件,实际消息是 "Error occurred during login, please check server firebird.log for details"),其中日志Firebird 3 的表示 "No matching plugins on server",这可能是由于身份验证机制的差异。指定用户名和密码可以解决此问题。
Firebird 3 的
AuthServer
配置不包含Legacy_Auth
(默认仅Srp
!)。这也会产生错误 "unknown ISC error 335545106"(如果使用 Firebird 3 消息文件,实际消息是 "Error occurred during login, please check server firebird.log for details"),其中日志火鸟 3 说 "No matching plugins on server".要解决此问题,请将
Legacy_Auth
添加到 Firebird 3 服务器firebird.conf
中的AuthServer
设置(例如将其设置为AuthServer = Srp, Legacy_Auth
)并重新启动服务器.
当然,双向错误"Your user name and password are not defined."也可以通过使用不存在的用户或错误的密码产生。
1. 设置 AuthClient
在这里是相关的,因为服务器在执行 execute statement ... on external data source ...
时充当客户端