“连接被远程接口拒绝”使用 PDO 连接到 Firebird 3

Posted

技术标签:

【中文标题】“连接被远程接口拒绝”使用 PDO 连接到 Firebird 3【英文标题】:"connection rejected by remote interface" connecting to Firebird 3 with PDO 【发布时间】:2015-08-04 02:36:19 【问题描述】:

尝试以下代码,但导致异常 - 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.

【问题讨论】:

您使用的是哪个libfbclient.so?来自 Firebird 3 的那个,还是来自 Firebird 2.5 或更早版本的那个?如果您使用 2.5 或更早版本的版本,则需要将 Firebird 3 配置为接受不安全的连接(尽管我相信这会产生与您消息中的错误不同的错误)。 @MarkRotteveel 我刚刚下载并安装了 Firebird 3 服务器,然后安装了 php5-interbase 包,没有采取任何额外的操作。目前已搜索所有文件libfbclient.so 并将其替换为服务器文件夹/opt/firebird/lib 中的文件。错误重复出现。我可以在哪里允许接受不安全的连接?在firebird.conf 中找不到相同的参数。之前没有安装过其他版本的 firebird。 我相信是设置WireCrypt(默认为Required),改为EnabledDisabled。但是,如果您已经在使用 Firebird 3 中的 libfbclient.so,则无法解决此问题。 @MarkRotteveel 在firebird.conf 中找到此字符串。默认情况下已注释。取消注释并更改为WireCrypt = Disabled,取消注释并更改AuthServer = Legacy_Auth, Srp, Win_SspiAuthClient = Legacy_Auth, Srp, Win_Sspi。现在工作。谢谢。 考虑用这些信息回答你自己的问题;它也可能对其他人有所帮助! 【参考方案1】:

对于提问者来说可能有点晚了,但“连接被远程接口拒绝”可能仍然是当前话题,因为 firebird api 从 debian 8 到 9/10 发生了变化。

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

如果现在你有一个旧版本的服务器,就像我们一样,即 2012 年的 Interbase XE3,版本 3.0 中的新 firebird-library 无法再连接到这个旧服务器类型,而之前的 library 2.5 可以.

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

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

这是一个关于如何将 libfbclient2(来自 debian 8 的 api 版本 2.5)安装到新的 debian 9/10 系统并与 php7.3 一起使用的小说明:

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

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

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

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

虽然前两个是 Debian 10 中已经可用的合适版本并且可以从那里直接安装,但后两个需要从 debian 8 jessie - 存档下载并需要先安装。

【讨论】:

【参考方案2】:

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

    安装火鸟

    去搜索服务-> Firebird

    右键单击 Firebird->Properties->LogOn-> 并勾选“允许服务与桌面交互”选项的复选框

    然后点击重启服务

    如果是 Firebird 2.1,您现在可以成功连接到 Firebird。

【讨论】:

【参考方案3】:

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

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

【讨论】:

如果您使用 fbclient 2.x,这只是一种解决方法。确保将 fbclient 3.x 链接到 PHP,它无需任何调整即可工作。

以上是关于“连接被远程接口拒绝”使用 PDO 连接到 Firebird 3的主要内容,如果未能解决你的问题,请参考以下文章

使用 PDO 连接到 SQL Server 2008

如何通过 PHP 和 Linux 使用 pdo 连接到 mssql?

使用 PDO 连接到 Sybase 的正确 DSN

如何使用 PDO 连接到实时数据库

如何使用 PDO ssl 连接到 azure mysql 数据库

使用 PDO 连接到本地数据库时遇到问题 [重复]