Подключение от FB3.0 к FB2.5 - PullRequest
       36

Подключение от FB3.0 к FB2.5

0 голосов
/ 13 февраля 2019

У меня было 2 сервера, которые использовали Firebird 2.5.Каждый из серверов имел отдельную базу данных, и один из них подключался к другому для получения некоторых данных.Один из серверов перешел на Firebird 3.0 и теперь не может подключиться к серверу 2.5.Он говорит, что мое имя пользователя или пароль неверны.Я подключился к серверу 2.5 с учетными данными, и они в порядке.

Для извлечения данных я использовал инструкцию Execute [STATEMENT] на внешнем источнике данных [SERVER] в качестве пароля пользователя [USER] [ПАРОЛЬ].

2.5 имеет больше баз данных, и было бы сложно обновить его до 3.0.

У кого-нибудь была эта проблема?

1 Ответ

0 голосов
/ 14 февраля 2019

Я провел некоторое тестирование с 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 в следующих ситуациях:

  1. Firebird 3 имеет конфигурацию AuthClient 1 , которая не включает Legacy_Auth,Firebird 3 не может пройти аутентификацию в Firebird 2.5, поскольку Firebird 2.5 знает только о устаревшем механизме аутентификации.

    Чтобы это исправить, добавьте Legacy_Auth к параметру AuthClient в firebird.conf сервера Firebird 3 (например,установите его на AuthClient = Srp, Legacy_Auth) и перезапустите сервер.

    Скорее всего, это ваша проблема.

  2. Не указывается имя пользователя и пароль (т. е. опущен as user 'sysdba' password 'masterkey' внеиз execute statement).Вероятно, это связано с различием в механизмах аутентификации, поскольку Firebird не знает действительный пароль с протоколом SRP и поэтому не сможет аутентифицироваться на другом сервере.

    Указание имени пользователя и пароля исправляет это.

Firebird 2.5 для Firebird 3

В обратном направлении (Firebird от 2.5 до 3) я не могу установить соединение в следующих ситуациях:

  1. Аутентификация с использованием имени пользователя и пароля, которые существуют только как пользователь Srp.Это приводит к ошибке «Ваше имя пользователя и пароль не определены.» , поскольку Firebird 2.5 поддерживает только устаревшую аутентификацию, и в результате может проходить аутентификацию только с пользователями, которые существуют для плагина Legacy_UserManager в Firebird 3.

    Создайте пользователя (с тем же именем или другим именем) для плагина 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 (это значение по умолчанию!).Это приводит к ошибке «соединение отклонено удаленным интерфейсом» .

    Чтобы исправить это, установите WireCrypt = Enabled в firebird.conf сервера Firebird 3 и перезапустите сервер.

  3. Не указывается имя пользователя и пароль (т. Е. Исключается as user 'sysdba' password 'masterkey' из execute statement).Это приводит к ошибке «неизвестная ошибка ISC 335545106» (фактическое сообщение «Произошла ошибка при входе в систему, проверьте подробности на сервере firebird.log» , если используется файл сообщений Firebird 3)где в журнале Firebird 3 написано «Нет соответствующих плагинов на сервере» , это, вероятно, связано с различием в механизмах аутентификации.

    Указание имени пользователя и пароля исправляет это.

  4. Firebird 3 имеет конфигурацию AuthServer, которая не включает Legacy_Auth (по умолчанию Srp только!).Это также приводит к ошибке «неизвестная ошибка ISC 335545106» (фактическое сообщение «Произошла ошибка при входе в систему, пожалуйста, проверьте подробности на сервере firebird.log» , если используется файл сообщений Firebird 3)где в журнале Firebird 3 написано «Нет соответствующих плагинов на сервере» .

    Чтобы это исправить, добавьте Legacy_Auth к параметру AuthServer в firebird.conf сервера Firebird 3(например, установите его на AuthServer = Srp, Legacy_Auth) и перезапустите сервер.

И, конечно, в обоих направлениях ошибка «Ваше имя пользователя и пароль не определены». также может быть получен с использованием несуществующих пользователей или неправильных паролей.


1. Параметр AuthClient здесь важен, так как сервер действует как клиент при выполненииexecute statement ... on external data source ...

...