次の簡単なステートメントを使用して(およびテスト対象に応じていくつかの部分を変更して)、異なるポートを持つ同じサーバー上の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 2.5 は従来の認証メカニズムしか認識していないため、Firebird 3 は Firebird 2.5 に対して認証できません。
これを修正するには、Firebird 3 サーバーの設定に追加Legacy_Auth
し(たとえば、 に設定)、サーバーを再起動します。AuthClient
firebird.conf
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 はレガシー認証のみをサポートしているため、その結果、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 3 メッセージ ファイルが使用されている場合、実際のメッセージは「ログイン中にエラーが発生しました。詳細については、サーバーの firebird.log を確認してください」です)。 server"、これはおそらく認証メカニズムの違いによるものです。
ユーザー名とパスワードを指定すると、これが修正されます。
Firebird 3 には、AuthServer
含まれていない構成がありますLegacy_Auth
(デフォルトはSrp
のみです!)。これにより、「unknown ISC error 335545106」というエラーが生成されます ( Firebird 3 メッセージ ファイルが使用されている場合、実際のメッセージは「ログイン中にエラーが発生しました。詳細についてはサーバーの firebird.log を確認してください」です)。ここで、Firebird 3 のログには「一致するプラグインがありません。サーバー」 .
これを修正するには、Firebird 3 サーバーの設定に追加Legacy_Auth
し(たとえば、 に設定)、サーバーを再起動します。AuthServer
firebird.conf
AuthServer = Srp, Legacy_Auth
もちろん、双方向のエラー「ユーザー名とパスワードが定義されていません。」存在しないユーザーまたは間違ったパスワードを使用することによって生成されることもあります。
1.AuthClient
サーバーは、execute statement ... on external data source ...