Firebird y Flamerobin en Debian Stretch

Me he visto obligado recientemente a trabajar con Firebird. Es un motor de base de datos relacional, como MySQL o MariaDB, vamos, pero aseguran que el rendimiento es más alto. Dado que lo utilizaré únicamente para poder extraer los datos que necesito para la tesis, no podré comprobar si su rendimiento es mayor o no. Lo que sí he comprobado es que es muy árido, sin interfaces sencilas, y muy exquisito con los los parámetros de conexión.

En las próximas líneas, no sólo comentaré los pasos para instalar tanto Firebird como Flamerobin, una interfaz gráfica para gestionar el servidor, sino que plantearé los problemas que he tenido para dejarlos plenamente funcionales. Espero que a alguien le sirva, o si yo mismo tengo que reinstalarlos, que me sirva como chuleta. Allá vamos.

La instalación

La instalación en Debian es trivial, ya sabemos:

sudo apt-get install flamerobin firebird3.0-server

Uno podría esperar, como pasa con MySQL o MariaDB, que el servidor se iniciara solo, que todo estuviese perfectamente funcional y que el acceso de administrador ya estuviera configurado. Pues no.

Usuario y contraseña

El siguiente paso es intentar conectar con la base de datos. La consola de SQL se invoca mediante el comando:

isql-fb
SQL> connect "localhost:/home/rafa/Documentos/historias.gbd" user 'SYSDBA' password 'masterkey';

Mientras instalamos el servidor Firebird, nos comenta que el usuario administrador es SYSDBA (el usuario por defecto) y que debemos suministrar una contraseña. En mi caso, porque estoy «heredando» una base de datos que tenía el usuario (SYSDBA) y la contraseña (masterkey) por defecto, decidí mantenerlos igual, así que puse masterkey de contraseña. Pero por una razón no bien explicada, este paso no se registra en la configuración de Firebird en Debian.

He intentado modificar o corregir este comportamiento de estas tres maneras:

Método 1

Edité el archivo de configuración /etc/firebird/3.0/SYSDBA.password y lo dejé así:

ISC_USER=sysdba
ISC_PASSWORD="masterkey"
#ISC_PASSWORD="3399ebea"

Método 2

Reconfiguré el paquete:

dpkg-reconfigure firebird3.0-server

Método 3

Intenté añadir el usuario y contraseña mediante el comando que trae Firebird:

gsec -add SYSDBA -pass masterkey

Realmente, lo que le pasa es que, como menciona Marcoci Dorin, el usuario administraodr y su contraseña se configuran a través de la base de datos de seguridad security.db, y que para añadir SYSDBA hay que hacer lo siguiente:

isql-fb -user sysdba security.db
 
SQL> create or alter user SYSDBA password 'masterkey';
SQL> commit;
SQL> quit;

Ahora reiniciamos el servidor:

sudo /etc/init.d/firebird3.0 force-reload

Acceso a los datos

En Windows, Firebird permite el acceso al archivo de datos allá donde éste se encuentre. En Debian GNU/Linux no es así, hemos de configurarlo. Hemos de editar el archivo firebird.conf y dejarlo así:

# DatabaseAccess = Restrict C:\DataBase
# DatabaseAccess = Restrict C:\DataBase;D:\Mirror
# DatabaseAccess = Restrict /db
# DatabaseAccess = Restrict /db;/mnt/mirrordb
# DatabaseAccess = Full
#
# UNCONTROLLED DATABASE ACCESS MAY COMPROMISE YOUR SYSTEM!
# IT IS STRONGLY RECOMMENDED THAT THIS SETTING BE USED TO LIMIT
# DATABASE LOCATIONS!
#
# Type: string (special format)
#
DatabaseAccess = Full

El propio archivo de configuración nos da ejemplos de cómo podemos configurar el acceso a los datos. En mi caso, he preferido tener el archivo de datos en el mismo sitio siempre, para poder exportarlo cuando acabe con él. Es importante tener en cuenta que el archivo tiene que tener los permisos de lectura-escritura apropiados. Para ahorrarme problemas, hice:

chmod 777 historias.gdb

En algunos sitios he leído también que hay que cambiar el propietario, o incluso añadir nuestro usuario al grupo firebird, aunque a mí no me ha hecho falta:

chown firebird:firebird historias.gdb
usermod -aG firebird rafa

Problemas de versiones

Finalmente, cuando ya pensaba que lo tenía apañado:

isql-fb
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect "localhost:/home/rafa/Documentos/HISTORIAS.GDB" user 'SYSDBA' password 'masterkey';
Statement failed, SQLSTATE = 08004
unsupported on-disk structure for file /home/rafa/Documentos/historias.gdb; found 10.1, support 12.0
-IProvider::attachDatabase failed when loading mapping cache

Esto viene a significar que estoy utilizando una base de datos creada con Firebird 1.5, pero estoy intentado conectar con el motro 3.0. En otras based de datos, esto no supondría problemas, pero en Firebird sí.

En el blog FirebirdSQL se explica muy bien: Firebird utiliza un número interno llamado ODS (On Disk Structure) para saber con cual versión de Firebird fue creada una base de datos. Cada versión del Firebird tiene un número único de ODS. Si no coincide la ODS de una base de datos con la versión del servidor del Firebird, entonces no podremos conectarnos a esa base de datos.

Lo que debemos hacer es crear una versión transportable del archivo original, aunque eso supone volver a la máquina que tiene instalada la versión Firebird 2.5 para hacer una copia de seguridad transportable:

gbak -b -t -user SYSDBA -password masterkey historias.gdb historias.fbk

Y luego volver a la máquina con la versión 3.0:

gbak -r -p 8192 -v -user sysdba -password masterkey historias.fbk historias.fdb

Así que el achivo de datos definitivo es historias.fdb, ya formateada de manera correcta para Firebird 3.0:

isql-fb
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect "localhost:/home/rafa/Documentos/historias.fdb" user 'SYSDBA' password 'masterkey';
Database: "localhost:/home/rafa/Documentos/historias.fdb", User: SYSDBA
SQL>

Y por fin conecta, aunque me ha dado muchos dolores de cabeza.

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *