Trang này được dịch bằng máy. Đọc bản gốc tiếng Anh. English

Thư viện IBSurgeon

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:

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

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.

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        

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:

Code
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

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>

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

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