Firebird Cookbook 1:客戶端程序使用
Firebird數(shù)據(jù)庫既可以作為一個嵌入式數(shù)據(jù)庫使用,也可以在客戶端/服務器架構下使用。服務器fbserver是實際操作數(shù)據(jù)的程序,客戶端通過TCP等方式同服務器進行通信,下達SQL指令??蛻舳顺绦騣sql可以連接任意位置的fbserver。
1.0??數(shù)據(jù)庫系統(tǒng)初始化
在Windows環(huán)境下,數(shù)據(jù)庫系統(tǒng)的啟動必須讀取注冊表中的數(shù)據(jù)。bin目錄下的instreg和instsvc分別安裝注冊表和服務:
instreg.exe?install
>>??Firebird?has?been?successfully?installed?in?the?registry.
instsvc?install?-superserver?-demand?-guardian
>>??Service?"Firebird?Guardian?-?DefaultInstance"?successfully?created.
>>??Service?"Firebird?Server?-?DefaultInstance"?successfully?created.
instsvc?start
>>?Service?"Firebird?Guardian?-?DefaultInstance"?successfully?started.
守護進程會完成數(shù)據(jù)庫系統(tǒng)的啟動流程。
1.1??創(chuàng)建和連接數(shù)據(jù)庫
isql工具可以連接并操縱數(shù)據(jù)庫:
isql
>>??Use?CONNECT?or?CREATE?DATABASE?to?specify?a?database.
?
如果連接本地數(shù)據(jù)庫,則直接輸入數(shù)據(jù)庫文件絕對路徑即可。如果采用TCP連接遠程服務器,則需要加上數(shù)據(jù)庫服務器的IP地址或是計算機域名:
create?database?’C:/Documents/Database/Firebird/database/SCHOOL.FDB’?user?’sysdba’?password?‘masterkey’;
create?database?’127.0.0.1:C:/Documents/Database/Firebird/database/SCHOOL.FDB’?user?’sysdba’?password?‘masterkey’;
create?database?’WIN-P2M4Q9:C:/Documents/Database/Firebird/database/SCHOOL.FDB’?user?’sysdba’?password?‘masterkey’;
注意路徑名一定使用斜杠,而不是Windows下的反斜杠!
1.2??SSL
作為一個相對簡單的數(shù)據(jù)庫系統(tǒng),F(xiàn)irebird并不提供SSL連接,所有的數(shù)據(jù)都是明文傳輸?shù)?。但是,依然可以采用SSH之類的工具實現(xiàn)連接代理??紤]在Windows下沒有SSH服務器,這里使用了stunnel和nginx,分別位于客戶端和服務器端。
1.2.1??服務器端
默認情況下Firebird數(shù)據(jù)庫服務器使用3050端口。可以使用nginx的TCP反向代理為其添加SSL:
stream?{
????server?{
listen?127.0.0.1:9091?ssl;
ssl_protocols?TLSv1.2?TLSv1.1;
ssl_certificate_key?C:/Documents/Database/Firebird/database/ssl/priv.key;
ssl_certificate?C:/Documents/Database/Firebird/database/ssl/cert.pem;
proxy_pass?127.0.0.1:3050;
????}????
}
1.2.2??客戶端
stunnel是一個SSL代理,能夠為沒有SSL連接功能的程序提供安全連接。安裝后,可在stunnel.conf文件末尾添加:
[fbclient]
accept =?9090
connect =?9091
cert =?stunnel.pem
client =?yes
?
當然,也可以考慮客戶端和服務器端全部使用stunnel:
[fbserver]
accept?=?9091
connect=?3050
cert???=?stunnel.pem
但是目前來看stunnel的性能較使用了IOCP的nginx更差。
?