Я провел некоторое тестирование с 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 в следующих ситуациях:
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
) и перезапустите сервер.
Скорее всего, это ваша проблема.
Не указывается имя пользователя и пароль (т. е. опущен as user 'sysdba' password 'masterkey'
внеиз execute statement
).Вероятно, это связано с различием в механизмах аутентификации, поскольку Firebird не знает действительный пароль с протоколом SRP и поэтому не сможет аутентифицироваться на другом сервере.
Указание имени пользователя и пароля исправляет это.
Firebird 2.5 для Firebird 3
В обратном направлении (Firebird от 2.5 до 3) я не могу установить соединение в следующих ситуациях:
Аутентификация с использованием имени пользователя и пароля, которые существуют только как пользователь 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
Firebird 3 имеет настройку WireCrypt = Required
(это значение по умолчанию!).Это приводит к ошибке «соединение отклонено удаленным интерфейсом» .
Чтобы исправить это, установите WireCrypt = Enabled
в firebird.conf
сервера Firebird 3 и перезапустите сервер.
Не указывается имя пользователя и пароль (т. Е. Исключается as user 'sysdba' password 'masterkey'
из execute statement
).Это приводит к ошибке «неизвестная ошибка ISC 335545106» (фактическое сообщение «Произошла ошибка при входе в систему, проверьте подробности на сервере firebird.log» , если используется файл сообщений Firebird 3)где в журнале Firebird 3 написано «Нет соответствующих плагинов на сервере» , это, вероятно, связано с различием в механизмах аутентификации.
Указание имени пользователя и пароля исправляет это.
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 ...