此页面为机器翻译。请阅读英文原文。 English

IBSurgeon 文库

如何让Firebird 3像2.5那样使用嵌入式连接字符串进行连接

如您所知,如果在连接字符串中仅指定数据库路径(不包含localhost、服务器名或xnet),Firebird 3会以嵌入式服务器方式连接数据库:

Code
C:\HQbird\Firebird30>isql -user SYSDBA d:\30test.fdb
Database: d:\30test.fdb, User: SYSDBA
SQL> set list on;
SQL> select MON$remote_protocol, mon$remote_process, mon$user from mon$attachments where mon$attachment_id=current_connection;

MON$REMOTE_PROTOCOL             <null>
MON$REMOTE_PROCESS              <null>
MON$USER                        SYSDBA

如您所见,在嵌入式连接的情况下,Firebird不执行身份验证–密码缺失,且MON$REMOTE_PROTOCOL为null。

如果您希望以XNET用户身份连接本地数据库并进行身份验证,标准方式是指定XNET作为协议。

Code
C:\HQbird\Firebird30>isql -user SYSDBA -pass masterkey xnet://d:\30test.fdb
Database: xnet://d:\30test.fdb, User: SYSDBA
SQL> set list on;
SQL> select MON$remote_protocol, mon$remote_process, mon$user from mon$attachments where mon$attachment_id=current_connection;

MON$REMOTE_PROTOCOL             XNET
MON$REMOTE_PROCESS              C:\HQbird\Firebird30.sql.EXE
MON$USER                        SYSDBA        

然而,可以通过将firebird.conf中的提供程序顺序更改为以下内容来“禁止”嵌入式连接:

Code
Providers = Loopback, Engine12,  Remote

在这种情况下,将无法在没有密码的情况下以嵌入式方式连接,因为Firebird将使用XNET。

Code
C:\HQbird\Firebird30>isql -user SYSDBA  d:\30test.fdb
Statement failed, SQLSTATE = 28000
Your user name and password are not defined. Ask your database administrator to set up a Firebird login.
Use CONNECT or CREATE DATABASE to specify a database
SQL>

在使用用户名和密码连接的情况下,连接将以XNET方式建立,就像Firebird 2.5中一样。

Code
C:\HQbird\Firebird30>isql -user SYSDBA -pass masterkey d:\30test.fdb
Database: d:\30test.fdb, User: SYSDBA
SQL> set list on;
SQL> select MON$remote_protocol, mon$remote_process, mon$user from mon$attachments where mon$attachment_id=current_connection;

MON$REMOTE_PROTOCOL             XNET
MON$REMOTE_PROCESS              C:\HQbird\Firebird30.sql.EXE
MON$USER                        SYSDBA