我有2台使用Firebird 2.5的服务器。每个服务器都有一个单独的数据库,其中一个正在连接到另一个以检索一些数据。其中一台服务器切换到Firebird 3.0,现在它无法连接到2.5服务器。它说我的用户名或密码不正确。我已经使用凭据连接到2.5服务器,并且可以。
要检索数据,我使用外部数据源[SERVER]上的Execute语句[STATEMENT]作为用户[USER]密码[PASSWORD]。
2.5拥有更多的数据库,将其升级到3.0将很麻烦。
有人遇到这个问题吗?
答案 0 :(得分:3)
我已经使用以下简单语句在具有不同端口的同一台服务器上对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 3具有AuthClient
1 配置,其中不包含Legacy_Auth
。 Firebird 3无法通过Firebird 2.5进行身份验证,因为Firebird 2.5仅了解旧式身份验证机制。
要解决此问题,请将Legacy_Auth
添加到Firebird 3服务器的AuthClient
中的firebird.conf
设置中(例如将其设置为AuthClient = Srp, Legacy_Auth
),然后重新启动服务器。 / p>
这很可能是您遇到的问题。
未指定用户名和密码(即将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;
如果这导致错误“缺少请求的管理插件” ,那么您需要编辑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
(这是默认设置!)。这将产生错误“远程接口拒绝连接” 。
要解决此问题,请在Firebird 3服务器的WireCrypt = Enabled
中设置firebird.conf
,然后重新启动服务器。
未指定用户名和密码(即将as user 'sysdba' password 'masterkey'
留在execute statement
中)。这会产生错误“未知ISC错误335545106” (实际消息是“登录期间发生错误,请检查服务器firebird.log以获取详细信息” ,如果Firebird 3消息文件是在Firebird 3的日志中显示“服务器上没有匹配的插件” ,这可能是由于身份验证机制不同所致。
指定用户名和密码可以解决此问题。
Firebird 3具有不包含AuthServer
的{{1}}配置(默认值为Legacy_Auth
!)。这还会产生错误“未知ISC错误335545106” (实际消息为“登录期间发生错误,请检查服务器firebird.log以获取详细信息” ,如果Firebird 3消息文件为使用),其中Firebird 3的日志显示“服务器上没有匹配的插件” 。
要解决此问题,请将Srp
添加到Firebird 3服务器的Legacy_Auth
中的AuthServer
设置中(例如将其设置为firebird.conf
),然后重新启动服务器。 / p>
当然,在两个方向上,错误“您的用户名和密码未定义。” 也可以通过使用不存在的用户或错误的密码来生成。
1.设置AuthServer = Srp, Legacy_Auth
与此处相关,因为服务器在执行AuthClient
时充当客户端