Firebird on Linux

版本與環境
==========
Firebird: 1.0
OS: Red Hat Linux 9.0
安裝
====
請先連結到 http://sourceforge.net/project/showfiles.php?group_id=9028 這個網址
準備下載 RPM(For Red Hat, SuSE, Mandrake) 或 tarball(For any distribuation) 包.
這裡你會看到有兩個檔案
一個是 FirebirdCS-x.y.z.nnnn-xx.ixxx.rpm
一個則是 FirebirdSS-x.y.z.nnnn-xx.ixxx.rpm
這兩個有什麼差別呢??
所謂的 CS 就是 Classic, 較傳統的,之前,Firebird 都是掛在 inetd, xinetd 下,做為網路服務的
也就是 inetd / xinetd 負責傾聽網路是否有需求,有需求,再把 Firebird 叫起來,將需求轉交給 Firebird.
SS 則是 SuperServer, 啟動時就是獨立起來傾聽網路需求,如果有需求,自己就出來服務這個需求.
在官方網站裡面有對此作詳細的比較與說明.http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_ss_vs_classic
依據此文件,它是說 SuperServer 效率較好.
在這裡我選擇了 CS 版本的 RPM 來安裝.原因我會在”安全性議題”一節再說明.
接下來就是安裝啦.
RPM 版本就用 rpm -ivh FirebirdCS-x.y.z.nnnn-xx.ixxx.rpm
tarball 版本就先用 tar xzf Firebird-x.y.z.nnnn.src.tar.gz 解開,進入該目錄後,再執行 ./install.sh 即可
如果你是用 RPM 安裝的話,安裝以後的檔案都會放在 /opt/interbase 下.
管理
====
管理上,你可以從遠端用 GUI 的管理介面來管理.
也可以使用 Firebird 內附的 isql, gsec 來管理.
gsec 主要用來變更啟動密碼以及增加使用者等等的,除此之外,
Firebird 有提供一個不錯的 script 來幫助你變更啟動密碼.
指令名稱是: /opt/interbase/bin/changeDBAPassword.sh
只要依照指示即可,但有時會失敗,需要手動修改,這時候就要用到 gsec,步驟:
1. /opt/interbase/bin/gsec
2. > modify SYSDBA -pw your_password
3. > quit
4. 如果是用 SS 安裝的話,那麼你得要修改 /etc/init.d/firebird, 找到 ISC_PASSWORD, 修正之;用 CS 的話,請跳到下個步驟
5. 修改 SYSDBA.password, 基本上只要修改第二行即可.
6. 大功告成~
isql 則是 console 模式的管理工具,你可以使用 select / insert / delete / create database ….等等的SQL敘述來作管理.
也可以輸入 help 來看看你可以使用什麼指令.
安全性議題
==========
雖然是一套發展了很久的 Database,但是在我看來,他的安全性有待加強~
首先是 /etc/init.d/firebird 與 /opt/interbase/SYSDBA.password, 密碼以明碼形式存放在檔案中, 如果權限沒設為 root only 的話,密碼很容易被竊取,長度也不能超過8碼(真懷疑預設的密碼masterkey怎麼設進去的).
再來就是設定中,缺少網路控制的設定,也就是無法指定此 server 僅限哪個網段的人使用,也不支援 SSL 之類的設定,如此一來我就不太敢用 SS 來安裝了.
因為這些因素,所以我安裝 CS.我自己的設定大致如下:
1.增加一個名為 firebird 的 user (useradd firebird),此動作同時會增加一個 firebird 的群組.
2.將 /opt/interbase 的所有檔案的 owner 改為 firebird (chown -R firebird:firebird /opt/interbase)
3.修改 /etc/xinetd.d/firebird,在大括號裡面加上
user=firebird
only_from=192.168.0.0 127.0.0.1
以避免使用 root 權限,並允許 192.168.0.0 這個網段以及本機可以使用這個服務.本來打算要使用 tcpwrapper 來作控制的,如此一來就可以使用 /etc/hosts.allow 和 /etc/hosts.deny 來作控制.但是我加上去之後卻會無法連結,只好作罷.
找到 xinetd 的 pid,並強迫 xinetd 重新載入組態即可.
#ps -ef|grep xinetd
#kill -HUP xinetd_pid
4.將 /etc/xinetd.d/firebird, /opt/interbase/SYSDBA.password 的權限改為 0400, owner read-only (chmod 0400 /etc/xinet.d/firebird /opt/interbase/SYSDBA.password)
5.變更資料庫存放路徑的 owner 與權限,假設資料庫放在/var/database 下,那麼就
#chown -R firebird:firebird /var/database
#chmod -R 0770 /var/database
6.再將必要用到 Firebird 的使用者加入 firebird 群組中.
7.變更管理者密碼.
其他相關的安全性議題可以參考:
http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=art_fb_security
測試連接
========
執行 /opt/interbase/bin/isql 以後
在 console 輸入
>connect ‘localhost:/opt/interbase/examples/employee.gdb’;
如果不能連接,會出現錯誤訊息.
Firebird 1.5 RC5
================
在這一個版本裡面,安全性議題改進了不少,configuration file 更名為 firebird.conf
裡面也提供了 RemoteBindAddress 這個選項可以指定.
預設安裝路徑也變更為 /usr/local/firebird.
所以 1.5 版應該是一個安全性較高的版本,請耐心等候正式版的推出.
.Net Data Provider
==================
除了 ODBC 之外,官方網站也提供了.Net Data Provider,顧名思義就是專門給 ADO.Net 用的.
若你是使用 .Net framework 1.1 的話,需要先行安裝 msvcr70.dll,請先用本機搜尋確定一下是否有此檔案.
如果沒有,用 google 找一下,可以找到下載點 (Microsoft 未提供)
然後再安裝,一切就會很順利.
基本上,裡面的類別都是直接由 ADO.Net 的 Connection, DataSet…等等類別繼承出來,所以熟悉 ADO.Net 的話,在使用上並沒有什麼困難.
另外裡面也提供了 HtmlHelp 的說明檔以及範例程式,各位可以自行參考之.