Jak zprovoznit Firebird
Nedávno jsme pro našeho zákazníka připojovali k CzechIdM systém, jehož data se ukládají do databáze Firebird. Pro účely vývoje a testování jsme potřebovali vytvořit lokální kopii databáze. Tento článek popisuje, jak jednoduše nainstalovat a zprovoznit Firebird databázi a na co si při tom dát pozor.
O Firebird
Firebird (http://www.firebirdsql.org/) je open source relační databáze vyvíjená od roku 2000. Podporuje standardy ANSI SQL a je multiplatformní. Další důležitou vlastností je podpora připojení přes JDBC; příslušný driver se nazývá Jaybird.
Databázový server Firebird se vyvíjí v několika variantách:
- SuperServer používá jednoho serverového démona pro všechna připojení klientů, která sdílejí společnou cache. SuperServer může běžet pod kontrolou procesu Firebird Guardian, který se stará o restart serveru v případě jeho pádu.
- SuperClassic se od SuperServeru liší tím, že každý klient má oddělenou cache.
- Classic používá pro každé klientské připojení oddělený proces, který s ním vzniká a zaniká.
- Embedded je “lehčí” verze serveru Classic, která je sice rychlejší, ale zato méně bezpečná.
Instalace
Z výše uvedených variant databázového serveru si vyberte tu, která nejlépe vyhovuje vašim požadavkům. Není to konečné rozhodnutí; mezi jednotlivými typy je vždy možné přejít, aniž by to ovlivnilo existující databáze.
V tomto návodu budeme instalovat Firebird SuperServer 2.5.2 na operační systém Linux (Fedora, r. 17). Vyzkoušeli jsme dva způsoby – stažením tar balíčku ze stránek projektu Firebird a instalaci pomocí správce software Yum.
A) Instalace z tar souboru
Ze stránky Firebird Downloads stáhneme balíček FirebirdSS-2.5.2.26539-0.amd64.tar.gz.
Stažený soubor rozbalíme a ve vytvořeném adresáři spustíme instalační skript (vyžaduje přihlášení pod rootem):
tar xzf FirebirdSS-2.5.2.26539-0.amd64.tar.gz cd FirebirdSS-2.5.2.26539-0.amd64/ ./install.sh
Instalační skript vytvoří adresář /opt/firebird, do kterého uloží všechny potřebné součásti Firebird. Dále nás požádá o změnu hesla pro databázového superuživatele SYSDBA a nastartuje databázový server spolu s jeho hlídačem Firebird Guardian.
Aktivitu serveru ověříme výpisem z běžících procesů, kde bychom měli vidět procesy “fbguard” a “fbserver”:
ps -ef | grep 'fb'
Chceme-li server zastavit, znovu rozběhnout či restartovat, zadáme jako root příkaz:
systemctl { stop | start | restart } firebird.service
B) Instalace správcem balíčků
Pro instalaci samozřejmě můžeme použít libovolný systém pro správu balíčků software, např. Yum.
yum install firebird
Tento způsob již nevyžaduje spuštění žádného dalšího instalačního skriptu, takže ani nevynucuje změnu hesla pro superuživatele (defaultně “masterkey”). Instalované součásti jsou rozložené na více místech, naopak adresář /opt/firebird se vůbec nevytváří. Můžeme ale narazit na jeden problém, kvůli kterému databázový server zpočátku vůbec nemůže nastartovat. Zkontrolujeme tedy běžící procesy:
ps -ef | grep 'fb'
Pokud tam uvidíme fbserver a fbguard, máme štěstí a server správně běží. V opačném případě zkusíme ještě jednou nastartovat službu firebird-superserver:
systemctl start firebird-superserver.service
Pokud stále proces “fbserver” neběží, došlo k chybě při startu služby, což nejlépe identifikujeme v logu na adrese /var/log/firebird/firebird.log.
Chybová hláška v našem případě zněla:
ConfigStorage: Cannot initialize the shared memory region operating system directive open failed Permission denied
a problém byl v nastavení práv pro adresář /tmp/firebird (automaticky vytvořený při instalaci). Firebird totiž pro svůj běh potřebuje mít právo zápisu do tohoto adresáře. To se dá vyřešit buď změnou práv (chown firebird:firebird /tmp/firebird
), nebo jeho úplným smazáním – při startu serveru se znovu vytvoří již se správným vlastníkem.
Nastavení
Užitečné nástroje pro práci s databází jsou podle typu instalace v adresáři
A) /opt/firebird/bin
B) /usr/lib64/firebird/bin
Jak se připojit k databázi
Pro práci s databází pomocí SQL příkazů slouží nástroj isql. Při instalaci se vytvořila testovací databáze employee.fdb, ke které se můžeme ihned připojit podle následujícího dialogu:
[alena: /opt/firebird/bin] $ ./isql Use CONNECT or CREATE DATABASE to specify a database SQL> CONNECT '../examples/empbuild/employee.fdb' user SYSDBA password masterkey; Database: '../examples/empbuild/employee.fdb', User: SYSDBA
(v případě instalace B) zadáme název databáze ‘/var/lib/firebird/data/employee.fdb’)
Z tohoto příkladu je vidět zajímavá vlastnost Firebirdu – jedna databáze odpovídá právě jednomu souboru v souborovém systému. U příkazu CONNECT
můžeme zadat buď relativní, nebo úplnou cestu k souboru, případně pouze tzv. alias databáze. Aliasy spravuje konfigurační soubor aliases.conf.
Jak vytvořit uživatele
Pro správu uživatelů se používá nástroj gsec. Nového uživatele “newUser” s heslem “secret” můžeme vytvořit příkazem
./gsec -user SYSDBA -pass masterkey -add newUser -pw secret
Uživatelé se schraňují v databázi
A) /opt/firebird/security2.fdb
B) /var/lib/firebird/system/security2.fdb
nicméně k té se způsobem z minulého odstavce tak snadno nepřipojíme. Je však dobré vědět, že tento soubor musí mít vlastníka firebird:firebird, jinak se může objevit neoblíbená chybová hláška
Statement failed, SQLSTATE = 28000 cannot attach to password database
Jak změnit heslo superuživatele
Změna hesla superuživatele je z pohledu bezpečnosti nutností, protože všichni útočníci na světě jistě vědí, že jeho defaultní heslo je “masterkey”.
./gsec -user SYSDBA -pass masterkey -mo SYSDBA -pw bezpecnejsiHeslo
Jak vytvořit databázi
Novou databázi vytvoříme pomocí nástroje isql. Uložíme ji v souboru v /tmp/testovaci.fdb a jejím vlastníkem bude náš nový uživatel “newUser”.
CREATE DATABASE '/tmp/testovaci.fdb' USER 'newUser' PASSWORD 'secret' DEFAULT CHARACTER SET UTF8;
Při vytváření databáze musí mít uživatel firebird:firebird oprávnění vytvořit soubor na daném umístění, jinak Firebird okamžitě zahlásí:
Statement failed, SQLSTATE = 08001 I/O error during "open O_CREAT" operation for file "/tmp/testovaci.fdb” -Error while trying to create file -Permission denied
Jak naplnit databázi daty
Pomocí isql lze snadno volat SQL příkazy uložené v samostatném souboru:
$./isql -u SYSDBA -p masterkey '/tmp/testovaci.fdb' SQL> INPUT '/tmp/inputCommands.sql';
Nástroj isql bohužel nezná konstruktor řádek, takže vkládání více řádků příkazem INSERT INTO ... VALUES ...
oznámí špatně sestavený SQL příkaz.
Jak použít JDBC driver
Třída JDBC driveru pro Firebird se nazývá org.firebirdsql.jdbc.FBDriver
a najdeme ji v balíčku jaybird-2.2.2.jar. Máme-li ale použít driver např. pro databázového klienta Squirrel, je nutné vzít jaybird-full-2.2.2.jar, který navíc obsahuje některé potřebné javax třídy.
Databázový server standardně běží na portu 3050. URL pro připojení k naší testovací databázi vypadá takto:
jdbc:firebirdsql://localhost:3050//tmp/testovaci.fdb
Závěr
Ve článku jsme popsali základní kroky při instalaci Firebird SuperServeru a některé standardní akce, které můžeme při práci s databází potřebovat provést. Máte-li otázky k článku nebo přejete-li si podrobněji rozebrat toto téma, neváhejte se ozvat na můj email info@bcvsolutions.eu.