1

Firebird 2.5 を使用するサーバーが 2 台ありました。各サーバーには個別のデータベースがあり、そのうちの 1 つが他のサーバーに接続してデータを取得していました。サーバーの 1 つが Firebird 3.0 に切り替えられ、2.5 サーバーに接続できなくなりました。ユーザー名またはパスワードが間違っていると表示されます。資格情報を使用して 2.5 サーバーに接続しましたが、問題ありません。

データを取得するために、外部データソース [SERVER] で Execute ステートメント [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 ;#

Firebird 3 から Firebird 2.5 へ

このステートメントを使用すると、「ユーザー名とパスワードが定義されていません」というエラーが表示されます。次の状況で Firebird 3 から 2.5 に:

  1. Firebird 3 には、を含まないAuthClient1 つLegacy_Authの構成があります。Firebird 2.5 は従来の認証メカニズムしか認識していないため、Firebird 3 は Firebird 2.5 に対して認証できません。

    これを修正するには、Firebird 3 サーバーの設定に追加Legacy_Authし(たとえば、 に設定)、サーバーを再起動します。AuthClientfirebird.confAuthClient = 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 はレガシー認証のみをサポートしているため、その結果、Firebird 3 の Legacy_UserManager プラグイン用に存在するユーザーでのみ認証できます。

    Legacy_UserManager プラグインのユーザーを (同じ名前または別の名前で) 作成します。

    create user theuser password 'thepassword' using plugin Legacy_UserManager;
    commit;
    

    これにより「要求された管理プラグインがありません」というエラーが発生した場合は、Firebird 3 を編集して設定firebird.confを追加Legacy_UserManagerUserManager(たとえば、に設定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 3 メッセージ ファイルが使用されている場合、実際のメッセージは「ログイン中にエラーが発生しました。詳細については、サーバーの firebird.log を確認してください」です)。 server"、これはおそらく認証メカニズムの違いによるものです。

    ユーザー名とパスワードを指定すると、これが修正されます。

  4. Firebird 3 には、AuthServer含まれていない構成がありますLegacy_Auth(デフォルトはSrpのみです!)。これにより、「unknown ISC error 335545106」というエラーが生成されます ( Firebird 3 メッセージ ファイルが使用されている場合、実際のメッセージは「ログイン中にエラーが発生しました。詳細についてはサーバーの firebird.log を確認してください」です)。ここで、Firebird 3 のログには「一致するプラグインがありません。サーバー」 .

    これを修正するには、Firebird 3 サーバーの設定に追加Legacy_Authし(たとえば、 に設定)、サーバーを再起動します。AuthServerfirebird.confAuthServer = Srp, Legacy_Auth

もちろん、双方向のエラー「ユーザー名とパスワードが定義されていません。」存在しないユーザーまたは間違ったパスワードを使用することによって生成されることもあります。


1.AuthClientサーバーは、execute statement ... on external data source ...

于 2019-02-14T17:37:24.007 に答える