Эта страница переведена машинным переводом. Читайте английский оригинал. 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