远程接口拒绝连接;用PDO连接火鸟3号


"connection rejected by remote interface" connecting to Firebird 3 with PDO

尝试下面的代码,但会导致异常- SQLSTATE[HY000][335544421]连接被远程接口拒绝:

try {
    $dbh = new PDO("firebird:dbname=localhost/3050:empty", "SYSDBA", "masterkey");
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sth = $dbh->query('SELECT idmspos, idmsqnt, cdmsval from svc$dms'); 
    $sth->setFetchMode(PDO::FETCH_ASSOC); 
    while($row = $sth->fetch()) {  
        echo $row['idmspos']." ".$row['idmsqnt']." ".$row['cdmsval']."<br>";  
    }
    $dbh = null;
}
catch(PDOException $e) {
    $dbh = null;
    echo $e->getMessage();
}

规格:

Linux 3.2.0-4-686-pae #1 SMP Debian 3.2.65-1+deb7u1 i686 GNU/Linux
PHP 5.6
php5-interbase
Firebird 3 from official site. Server is worked, can connect to him from local and remote machine.

找到firebird.conf,取消注释(如果使用fbclient 2.x)并更改以下参数以禁用WireCrypt并为旧身份验证设置更高的优先级:

WireCrypt = Disabled
AuthServer = Legacy_Auth, Srp, Win_Sspi
AuthClient = Legacy_Auth, Srp, Win_Sspi

可能对提问者来说有点晚了,但是"连接被远程接口拒绝了"可能仍然是当前的主题,因为firebird API从debian 8更改为9/10。

问题还取决于使用哪个interbase/firebird-client库。虽然在debian 8中Firebird API版本2.5中有libfbclient2,但从debian 9开始,这个libfbclient2被升级为Firebird API 3.0。libFBclient列出连接到Firebird/Interbase-Servers的客户端库。

如果,现在,你有一个旧版本的服务器,如我们所做的,即Interbase XE3从2012年开始,新的firebird-library在3.0版本不能再连接到这个旧的服务器类型,而以前的库2.5可以。

因此,当我们从Debian 8迁移到Debian 10时,我们的一个解决方案是从Debian 8安装旧版本的libfbclient2到新的Debian 10系统,然后,安装更高语言的客户端,例如php7.3-interbase。

以这种方式安装系统时,php 7.3。Interbase客户端显示连接旧Interbase服务器没有问题。

下面是一个关于如何在新的debian 9/10系统上安装libfbclient2 (api版本2.5)以及如何在php7.3上使用它的小说明:

首先,卸载所有高级语言客户端包,如php7.3-interbase和所有firebird common/client/server-stuff。

然后通过dpkg从debian 8调用旧的libbclient下载并首先安装。他们可以在下面找到:https://packages.debian.org/jessie/libfbclient2

但是,这个包依赖于以下4个包:

multiarch-support
libc6
firebird2.5-common
firebird2.5-common-doc

前两个在Debian 10中已经有合适的版本,可以直接安装,后两个需要从Debian 8的jessie - archive下载,需要先安装。

您需要按如下方式更改Firebird服务:

    安装火鸟
  1. 去搜索服务->火鸟

  2. 右键单击Firebird->Properties->登录→选项为"允许服务与桌面交互"

  3. ,然后点击重启服务

    在firebird 2.1的情况下,你现在可以成功连接firebird。