1

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

为了检索数据,我在外部数据源 [SERVER] 上使用执行语句 [STATEMENT] 作为用户 [USER] 密码 [PASSWORD]。

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

有人有这个问题吗?

4

1 回答 1

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 ;#

火鸟 3 到火鸟 2.5

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

  1. Firebird 3 有一个AuthClient1配置,不包括Legacy_Auth. Firebird 3 无法对 Firebird 2.5 进行身份验证,因为 Firebird 2.5 只知道旧的身份验证机制。

    要解决此问题,请添加Legacy_Auth到 Firebird 3 服务器的AuthClient设置中firebird.conf(例如将其设置为AuthClient = Srp, Legacy_Auth)并重新启动服务器。

    这一点很可能是你的问题。

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

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

火鸟 2.5 到火鸟 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;
    

    如果这导致错误"Missing requested management plugin",那么您需要编辑 Firebird 3firebird.conf并添加Legacy_UserManagerUserManager设置(例如设置为UserManager = Srp, Legacy_UserManager;默认为 only Srp)并重新启动 Firebird。

    作为 SYSDBA,您可以通过执行在 Firebird 3 服务器上检查用户存在的插件(或插件!)

    select SEC$USER_NAME, SEC$PLUGIN 
    from SEC$USERS
    
  2. Firebird 3 有设置WireCrypt = Required(这是默认设置!)。这会产生错误“连接被远程接口拒绝”

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

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

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

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

于 2019-02-14T17:37:24.007 回答