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.

Firebird

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.