Làm thế nào để Firebird 3 kết nối giống 2.5 với chuỗi kết nối nhúng
Như bạn đã biết, nếu bạn chỉ định đường dẫn đến cơ sở dữ liệu trong chuỗi kết nối (không có localhost hoặc tên máy chủ hoặc xnet), Firebird 3 sẽ kết nối đến cơ sở dữ liệu như một máy chủ nhúng:
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
Như bạn có thể thấy, Firebird không thực hiện xác thực trong trường hợp kết nối nhúng - mật khẩu không có, và MON$REMOTE_PROTOCOL là null
Nếu bạn muốn kết nối đến cơ sở dữ liệu cục bộ như người dùng XNET, với xác thực, cách chuẩn là chỉ định XNET như một giao thức.
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
Tuy nhiên, có thể “cấm” các kết nối nhúng, nếu bạn thay đổi thứ tự của các nhà cung cấp trong firebird.conf như sau:
Providers = Loopback, Engine12, Remote
Trong trường hợp này, sẽ không thể kết nối như nhúng mà không có mật khẩu, vì Firebird sẽ sử dụng XNET
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>
Trong trường hợp kết nối với tên người dùng và mật khẩu, kết nối sẽ được thiết lập như XNET, giống như trong Firebird 2.5
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