从FB3.0连接到FB2.5

时间:2019-02-13 07:08:49

标签: firebird firebird2.5 firebird-3.0

我有2台使用Firebird 2.5的服务器。每个服务器都有一个单独的数据库,其中一个正在连接到另一个以检索一些数据。其中一台服务器切换到Firebird 3.0,现在它无法连接到2.5服务器。它说我的用户名或密码不正确。我已经使用凭据连接到2.5服务器,并且可以。

要检索数据,我使用外部数据源[SERVER]上的Execute语句[STATEMENT]作为用户[USER]密码[PASSWORD]。

2.5拥有更多的数据库,将其升级到3.0将很麻烦。

有人遇到这个问题吗?

1 个答案:

答案 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 2.5

使用此语句,在以下情况下,我会从Firebird 3到错误消息“未定义您的用户名和密码。”

  1. 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>

    这很可能是您遇到的问题。

  2. 未指定用户名和密码(即将as user 'sysdba' password 'masterkey'留在execute statement中)。这可能是由于身份验证机制的差异所致,因为Firebird不知道SRP协议的实际密码,因此将无法向其他服务器进行身份验证。

    指定用户名和密码可以解决此问题。

Firebird 2.5到Firebird 3

在相反的方向(Firebird 2.5到3),在以下情况下我无法建立连接:

  1. 使用仅作为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
    
  2. Firebird 3的设置为WireCrypt = Required(这是默认设置!)。这将产生错误“远程接口拒绝连接”

    要解决此问题,请在Firebird 3服务器的WireCrypt = Enabled中设置firebird.conf,然后重新启动服务器。

  3. 未指定用户名和密码(即将as user 'sysdba' password 'masterkey'留在execute statement中)。这会产生错误“未知ISC错误335545106” (实际消息是“登录期间发生错误,请检查服务器firebird.log以获取详细信息” ,如果Firebird 3消息文件是在Firebird 3的日志中显示“服务器上没有匹配的插件” ,这可能是由于身份验证机制不同所致。

    指定用户名和密码可以解决此问题。

  4. 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时充当客户端