Los archivos de configuración del Firebird 3

3 comentarios

En Firebird 3 hay dos archivos de configuración:

  • FIREBIRD.CONF
  • DATABASES.CONF

El archivo FIREBIRD.CONF ya existía en las versiones anteriores del Firebird, ahora solamente se le han agregado nuevas entradas. Aquí determinamos los parámetros de configuración que usarán todas las bases de datos (salvo que se los modifique en DATABASES.CONF).

El archivo DATABASES.CONF es nuevo en Firebird 3, aunque en realidad es el antiguo ALIASES.CONF con un nuevo nombre y más funcionalidades. Aquí determinamos los parámetros de configuración que usará cada una de las Bases de Datos.

Los nuevos parámetros de FIREBIRD.CONF

SecurityDatabase. En las versiones anteriores de Firebird los nombres y las contraseñas de los usuarios se guardaban en los archivos SECURITY.FDB (para 1.x) o en SECURITY2.FDB (para 2.x). El gran problema era que muy fácilmente se podía quebrar la seguridad: el intruso simplemente copiaba la Base de Datos en otra computadora donde conociera la contraseña del usuario SYSDBA y listo. Ahora, tal cosa ya no le será posible. Con esta versión el archivo se llama SECURITY3.FDB por defecto, pero puede usarse otro archivo y además también puede tenerse un archivo de seguridad específico para cada Base de Datos (en este caso, se lo especifica en DATABASES.CONF)

AuthServer y AuthClient. Estos parámetros determinan cuales son los métodos de autenticación que serán usados por el Servidor y el Cliente.

WireCrypt. Establece si la conexión será encriptada o no. Si la conexión está encriptada entonces aunque un intruso capture los datos transmitidos no podrá saber el significado de ellos.

UserManager. Establece el plug-in que operará en la Base de Datos de seguridad (por defecto: SECURITY3.FDB), este valor puede cambiarse para cada Base de Datos en el archivo DATABASES.CONF

TracePlugin. Especifica el plug-in que usará el programa Trace para enviar datos de rastreo a la aplicación cliente o para auditar datos en el archivo de log.

WireCryptPlugin. Especifica el plug-in usado para encriptar y desencriptar los datos que son transferidos en la red.

KeyHolderPlugin. Este parámetro representaría alguna forma de almacenamiento temporario para las claves de encriptación de las bases de datos. Actualmente, no tiene un valor por defecto.

Providers. Son los métodos usados para conectar a un Cliente con un Servidor. Mediante ellos se puede: a) conectarse remotamente o localmente a bases de datos creadas con Firebird 3, b) conectarse a base de datos creadas con versiones anteriores de Firebird, c) conectarse a bases de datos creadas por otros motores (Oracle, Postgre, MySQL, etc.)

SharedCache. Junto con SharedDatabase determinan el modo de ejecución del Servidor (Classic, SuperClassic, SuperServer, Embedded).

SharedDatabase. Junto con SharedCache determinan el modo de ejecución del Servidor (Classic, SuperClassic, SuperServer, Embedded).

RemoteAccess. Provee un eficiente y configurable método para limitar el acceso al archivo de seguridad SECURITY3.FDB, a sus reemplazantes y a cualquier otra Base de Datos.

IPv6V6Only. Determina si la conexión puede establecerse solamente mediante IPv6 o si podrá usarse tanto IPv4 como IPv6.

Los parámetros cambiados de FIREBIRD.CONF

ExternalFileAccess. Si a una entrada en la lista de Restrict le falta una carpeta, se crea la carpeta faltante.

Los parámetros eliminados de FIREBIRD.CONF

RootDirectory.

LegacyHash.

OldSetClauseSemantics.

OldColumnNaming.

LockGrantOrder.

UsePriorityScheduler.

PrioritySwitchDelay.

PriorityBoost.

Los nuevos parámetros de DATABASES.CONF

El archivo DATABASES.CONF en realidad es el antiguo archivo ALIASES.CONF pero bastante mejorado. Con ALIASES.CONF podíamos tener alias o sobrenombres para nuestras bases de datos. Ahora además de eso también podemos establecer parámetros que son específicos a cada una de las bases de datos.

SecurityDatabase. Define el nombre y la ubicación del archivo que guarda los nombres y las contraseñas de los usuarios. Por defecto es el archivo SECURITY3.FDB que se encuentra en la carpeta raíz del Firebird 3, pero puede usarse cualquier otro archivo que se encuentre en cualquier otra ubicación.

AuthServer y AuthClient. Determinan los métodos de autenticación que serán usados por el Servidor y el Cliente, respectivamente.

WireCrypt. Establece si la conexión será encriptada.

UserManager. Establece el plug-in que será usado en la Base de Datos de seguridad.

TracePlugin. Establece el plug-in que será usado por el programa Trace que envía datos de rastreo a la aplicación cliente o que audita los datos en un archivo de log.

WireCryptPlugin. Es un plug-in usado para encriptar y desencriptar los datos transferidos en la red.

KeyHolderPlugin. Este parámetro representaría alguna forma de almacenamiento temporario para las claves de encriptación de las bases de datos. Actualmente, no tiene un valor por defecto.

Providers. Son los métodos usados para conectar a un Cliente con un Servidor. Mediante ellos se puede: a) conectarse remotamente o localmente a bases de datos creadas con Firebird 3, b) conectarse a base de datos creadas con versiones anteriores de Firebird, c) conectarse a bases de datos creadas por otros motores (Oracle, Postgre, MySQL, etc.)

SharedCache. Junto con SharedDatabase determinan el modo de ejecución del Servidor (Classic, SuperClassic, SuperServer, Embedded).

SharedDatabase. Junto con SharedCache determinan el modo de ejecución del Servidor (Classic, SuperClassic, SuperServer, Embedded).

RemoteAccess. Provee un eficiente y configurable método para limitar el acceso al archivo de seguridad SECURITY3.FDB, a sus reemplazantes y a cualquier otra Base de Datos.

IPv6V6Only. Determina si la conexión puede establecerse solamente mediante IPv6 o si podrá usarse tanto IPv4 como IPv6.

Conclusión:

Ahora, con Firebird 3 tenemos un archivo FIREBIRD.CONF cambiado, al cual se le han agregado varias entradas, principalmente en el área de seguridad.

También disponemos de un archivo llamado DATABASES.CONF que es el antiguo ALIASES.CONF con el nombre cambiado y con muchas más opciones, las cuales nos permiten establecer exactamente los parámetros que afectarán a cada Base de Datos.

Las mejoras en la seguridad son muy significativas, ahora a un posible atacante le será mucho más difícil interceptar o entender los datos que son transferidos por la red.

En sucesivos artículos de este blog iremos viendo con mayor detenimiento cada uno de los parámetros de los archivos FIREBIRD.CONF y DATABASES.CONF, para entenderlos mejor y así poder obtener el máximo provecho de ellos.

Artículos relacionados:

Alias, archivos y rutas

Configurando al Firebird

Programa para configurar el Firebird

Aumentando la seguridad con ALIASES.CONF

El índice del blog Firebird21

El foro del blog Firebird21

Anuncios

Programa para configurar al Firebird

Deja un comentario

En un artículo ya habíamos visto como configurar al Firebird:

Configurando al Firebird

pero lo hacíamos de forma manual. Si queremos configurarlo a través de una interface gráfica entonces podemos usar un programa creado por Jhonny Suárez, que podemos descargar desde:

http://sourceforge.net/projects/firebirdconfig/files/firebirdconfig/FirebirdConfig%200.2.0.39/

Allí encontraremos varios archivos, generalmente lo más recomendable es descargar el instalador, como vemos aquí:

FIREBIRDCONFIG1

Captura 1. Si haces clic en la imagen la verás más grande

Después de descargarlo, instalarlo, y ejecutarlo, veremos una pantalla similar a la siguiente:

FIREBIRDCONFIG2

Captura 2. Si haces clic en la imagen la verás más grande

¿Para qué sirve este programa?

Lo normal es que cuando necesitamos configurar al Firebird lo hagamos modificando el archivo FIREBIRD.CONF, pero no es tan amigable como configurarlo usando FIREBIRDCONFIG.EXE

O sea que nos facilita la tarea de configuración.

Lo que debemos recordar es que:

  1. Debemos grabar los cambios realizados haciendo clic sobre el botón “Save
  2. Los cambios realizados tendrán efecto solamente después que hayamos reiniciado el Servidor del Firebird. Mientras no reiniciemos el Servidor nada habrá cambiado.

Artículos relacionados:

Configurando al Firebird

Alias, archivos y rutas

Restringiendo el acceso a las Bases de Datos

¿En cual carpeta tener las Bases de Datos?

Descargar gratis archivos de configuración

Usando Firebird con procesadores multinúcleo

Acelerando los SORT

Entendiendo “forced writes”

Forced writes

El índice del blog Firebird21

El foro del blog Firebird21

Conexión a través de Internet

20 comentarios

En esta época es cada vez más frecuente que debamos conectarnos remotamente a las bases de datos. Y aunque hay varias formas de hacer eso, lo normal es que lo hagamos a través de Internet.

Entonces, ¿qué necesitamos para poder establecer una conexión exitosa?

ROUTER

Gráfico 1. Si haces clic en la imagen la verás más grande

En el Gráfico 1 podemos ver un caso típico: una computadora remota se conecta a Internet a través de un router, y nuestro Servidor se conecta a Internet a través de otro router. La computadora remota solamente conoce la IP pública o IP estática, pero no conoce (ni debería conocer jamás) la IP que nuestro Servidor tiene en la red local.

Como podemos ver en el Gráfico 1, nuestro router tiene dos IP, una pública, conocida por todo el mundo (que en este ejemplo es 120.130.140.150) y una privada, conocida solamente dentro de la red local (que en este ejemplo es 192.168.1.1)

La computadora donde tenemos instalado el Servidor del Firebird también tiene una IP privada (que en este ejemplo es 192.168.1.31).

¿Qué debemos hacer para que la conexión pueda ser establecida?

Decirle al router que toda la comunicación que se realice a través de Internet mediante un determinado puerto (para el caso de Firebird, generalmente es el 3050) se redirija a la computadora donde tenemos nuestro Servidor de Firebird.

O sea, si alguien envía datos a nuestro router usando la IP estática y el puerto que establecimos, el router enviará esos datos a la computadora donde tenemos el Servidor del Firebird.

Ejemplo de conexión:

A través de las siguientes capturas de pantalla veremos como debemos configurar nuestro router para que podamos conectarnos remotamente a una Base de Datos. Aquí, se usó un router de la marca Motorola, y por supuesto que si el router es de otra marca las capturas serán diferentes, pero en esencia es la misma cosa.

Router2

Captura 1. Si haces clic en la imagen la verás más grande

Router3

Captura 2. Si haces clic en la imagen la verás más grande

Router4

Captura 3. Si haces clic en la imagen la verás más grande

Router5

Captura 4. Si haces clic en la imagen la verás más grande

Resumen:

  1. Abrir el navegador (Internet Explorer, Firefox, Google Chrome, etc.)
  2. En la barra de direcciones escribir: 192.168.1.1 (esta es la IP privada del router)
  3. En Username escribir: AdminTHW (todo junto, sin espacios en blanco)
  4. En Password escribir: motorola
  5. Hacer clic sobre el botón Advanced
  6. Hacer clic sobre el botón Forwarding
  7. Escribir el IP de la computadora donde se encuentra el Servidor del Firebird. En este ejemplo es 192.168.1.31
  8. En Start Port y en End Port escribir 3050
  9. Hacer clic sobre el botón Apply

Conexión:

A partir de este momento ya podremos conectarnos a la Base de Datos remota con un comando como el siguiente:


CONNECT 120.130.140.150:D:\BASESDATOS\CONTA.FDB USER SYSDBA PASSWORD masterkey;

Problemas:

Si no puedes conectarte a la Base de Datos, verifica lo siguiente:

  • Que la IP pública pueda ser accedida. Eso lo harías con el comando PING. Abre una ventanita “Símbolo del sistema” y escribe: PING 120.130.140.150 (desde luego que aquí escribirías el PING que le corresponde a tu IP pública o estática, 120.130.140.150 es solamente un ejemplo)

Router6

Captura 5. Si haces clic en la imagen la verás más grande

Como puedes ver en la Captura 5, el IP 120.130.140.150 no puede ser accedido. Cuando la conexión puede realizarse sin problema todos los paquetes enviados deben ser recibidos y el porcentaje de perdidos debe ser 0%

Importante: Tú no debes escribir 120.130.140.150 sino el IP público (o estático) que tiene tu router.

  • Que el firewall no esté bloqueando el puerto que usas para conectarte. En nuestro ejemplo usamos el puerto 3050, ese puerto debe estar abierto o nada podrá enviarse o recibirse a través de él.
  • Que la computadora donde se encuentra el Servidor del Firebird sea visible para las otras computadoras de la red local. Eso también puedes averiguarlo con el comando PING y luego poniendo la IP privada, en nuestro ejemplo sería: PING 192.168.1.31
  • Que te conectes a la Base de Datos usando el mismo puerto que le dijiste al router que redirigiera al Servidor del Firebird. Por defecto, con Firebird se usa el puerto 3050, si quieres usar otro puerto puedes hacerlo pero en tu string de conexión debes indicarlo, porque el Firebird no puede adivinar que estás usando otro puerto. Así que se lo debes indicar:
CONNECT 120.130.140.150/3152:D:\BASESDATOS\CONTA.FDB USER SYSDBA PASSWORD masterkey;

En este ejemplo usamos el puerto 3152 para la conexión, por lo tanto es ese puerto el que debes redirigir en el router (y para que el Firebird use el puerto 3152 debes indicárselo en el archivo FIREBIRD.CONF, en la entrada RemoteServicePort).

Seguridad:

Internet es una red pública y por lo tanto todo lo que se envíe a través de esa red es pasible de ser interceptado y leído por personas no autorizadas. Para disminuir el riesgo existen programas (como el Zebedee, por ejemplo) que comprimen y encriptan los datos, haciendo por lo tanto la tarea de los hackers mucho más dificultosa. Firebird envía los datos sin encriptarlos entonces si son interceptados podrán ser leídos bastante fácilmente. Al usar Zebedee conseguiremos dos cosas: 1) como los datos se comprimen entonces la velocidad de transmisión será más alta, 2) como los datos se encriptan entonces la posibilidad de ser leídos por personas no autorizadas es nula o casi nula.

Por lo tanto, es altamente recomendable usar Zebedee (o algún programa similar) si la Base de Datos podrá ser accedida a través de Internet.

Conclusión:

Para que podamos conectarnos remotamente a una Base de Datos, los datos enviados a nuestra IP pública usando el puerto 3050 (o el que especifiquemos) deben ser redirigidos a la computadora donde se encuentra el Servidor del Firebird.

Para ello, debemos configurar el router, porque de lo contrario jamás podremos realizar la conexión. Al router se le indica que todos los datos que lleguen a través del puerto 3050 (o el que deseemos) se envíen a la computadora cuya IP privada se especifique.

Como Internet es una red pública, es recomendable que se use algún programa (como el Zebedee) para encriptar los datos que se envían entre computadoras.

Artículos relacionados:

Proteger a las bases de datos visibles en Internet

Usando Zebedee con Firebird

Usando Zebedee con Firebird. Parte 2

Ejemplos del uso de Zebedee con Firebird

El índice del blog Firebird21

El foro del blog Firebird21

Descargar gratis archivos de configuración optimizados

Deja un comentario

La empresa IBSurgeon desarrolla programas utilitarios para ser usados con Firebird (algunos son gratuitos) y entre sus colaboraciones gratis se encuentran archivos de configuración optimizados.

Estos archivos de configuración optimizados están diseñados para ser usados con cualquiera de las principales arquitecturas (SuperServer, Classic, SuperClassic).

Ahora ya está también disponible el archivo de configuración optimizado para Firebird 3.0, beta 1. Pero también hay archivos de configuración optimizados para versiones anteriores del Firebird.

Los pasos a seguir son los siguientes:

1. Asegúrate de que nadie esté conectado a una Base de Datos, o sea que nadie esté usando al Servidor del Firebird

2. Detén el Servidor del Firebird

3. Entra en la carpeta donde has instalado al Firebird, por ejemplo en:

C:\ARCHIVOS DE PROGRAMA\FIREBIRD\FIREBIRD_2_5\

4. Haz una copia de seguridad del archivo FIREBIRD.CONF, ¡¡¡no te olvides de este paso!!!.

5. Cámbiale el nombre al archivo FIREBIRD.CONF, por ejemplo como FIREBIRD.CONF.ANTERIOR

6. Descarga el archivo FIREBIRD.CONF optimizado que corresponde a tu computadora, desde:

http://ib-aid.com/en/optimized-firebird-configuration/

7. Copia el archivo descargado a la carpeta donde se encuentra tu Firebird, por ejemplo, en:

C:\ARCHIVOS DE PROGRAMA\FIREBIRD\FIREBIRD_2_5\

8. Cámbiale el nombre a tu archivo descargado, para que pase a llamarse FIREBIRD.CONF

9. Reinicia el Servidor del Firebird

10. Eso es todo, a partir de este momento el Firebird estará usando al nuevo archivo de configuración

IMPORTANTE:

Es muy probable que luego de empezar a usar el archivo de configuración del Firebird optimizado notes una mejoría en el rendimiento de tus bases de datos, pero si ese no es el caso siempre puedes seguir usando tu archivo de configuración anterior, para ello: a) detén el Servidor del Firebird, b) borra el archivo FIREBIRD.CONF, c) renombra a tu archivo de configuración anterior como FIREBIRD.CONF, d) reinicia el Servidor del Firebird

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

 

 

Los archivos temporales del Firebird

Deja un comentario

El Firebird a veces necesita crear archivos temporales, eso generalmente ocurre cuando en un comando SELECT se usa la cláusula ORDER BY y no existe un índice que pueda ser usado, o cuando ya no hay espacio disponible en la porción de memoria RAM que utiliza para los ordenamientos, o cuando se crean tablas temporales (o sea: tablas GTT) de gran tamaño.

Si el Servidor del Firebird recibe la orden de ejecutar un SELECT que contiene la cláusula ORDER BY y no hay un índice que pueda utilizar entonces evidentemente debe ordenar esas filas en algún lado para poder mostrarlas ordenadas.

¿Dónde se realiza ese ordenamiento?

El Firebird usa una porción de la memoria RAM a la cual llama Sort Buffer para realizar en ella los ordenamientos. Sin embargo, el espacio del Sort Buffer es limitado y en ocasiones puede ser insuficiente.

¿Qué sucede cuando no hay espacio suficiente en el Sort Buffer para realizar allí el ordenamiento?

Que el Firebird crea archivos temporales. Como no dispone de memoria RAM (la cual es rapidísima) para ordenar el resultado de la consulta entonces crea en el disco duro archivos temporales. Esto es mucho más lento que usar la memoria RAM pero funciona y no hay otra alternativa: hay que crear archivos temporales sí o sí.

¿Cuáles son los nombres de esos archivos temporales?

Todos los archivos temporales creados por el Firebird empiezan con los caracteres FB_ y dependiendo de su contenido serán los siguientes caracteres, por ejemplo si empieza con:

FB_QUERY_  significa que es un archivo temporal creado porque se usó la cláusula ORDER BY sin tener un índice disponible

FB_TABLE_ significa que se creó una tabla temporal (una tabla GTT)

¿Cómo puedo especificar dónde se crearán esos archivos temporales?

Por defecto, si el Firebird es iniciado como un servicio entonces los archivos temporales son creados en la carpeta temporal del Windows, normalmente en C:\WINDOWS\TEMP\ pero si se quiere crearlos en otras carpetas hay dos formas de hacerlo:

  1. Especificando las variables de entorno FIREBIRD_TMP, TEMP, TMP
  2. Cambiando la entrada TempDirectories del archivo FIREBIRD.CONF que se encuentra en la carpeta donde instalaste el Firebird

TEMP1

Captura 1. Si haces clic en la imagen la verás más grande

En la Captura 1. podemos ver como especificar una carpeta donde guardar los archivos temporales del Firebird que no sea la que utiliza el Windows. Por supuesto que la carpeta especificada (en este caso: E:\FIREBIRD_ARCHIVOS_TEMPORALES) debe existir y el nombre de la carpeta puede ser cualquiera, el nombre mostrado en la Captura 1. es solamente un ejemplo.

TEMP2

 Captura 2. Si haces clic en la imagen la verás más grande

En la Captura 2. podemos ver como especificar cual será la carpeta temporal en el archivo FIREBIRD.CONF, recordando que debemos borrar el símbolo de numeral que se encuentra a la izquierda de la entrada TempDirectories ya que el símbolo # indica que lo que sigue a continuación es un comentario.

El autor de este blog recomienda que se especifique la carpeta de los archivos temporales en la entrada TempDirectories y que de ser posible se utilice un disco RAM para ese propósito.

¿Puedo tener más de una carpeta para guardar los archivos temporales?

Sí, sin problema, lo único que debes hacer es separarlas con un punto y coma, por ejemplo:

TempDirectories=E:\FIREBIRD_TEMP;F:\ARCHIVOS_TEMP_FIREBIRD;G:\FIREBIRD_TEMP

¿Puedo especificar el tamaño de las carpetas dónde se guardarán los archivos temporales?

Sí, si lo deseas puedes especificar inclusive el tamaño en bytes que se usará en cada carpeta, por ejemplo:

TempDirectories=E:\FIREBIRD_ARCHIVOS_TEMPORALES 100000000

o

TempDirectories=E:\FIREBIRD_TEMP 250000000;F:\TEMP_FILES 300000000;G:\MIS_TEMPORALES 100000000

¿Por qué los archivos temporales del Firebird a veces tienen un tamaño muy grande?

Porque el Firebird expande las columnas CHAR y VARCHAR a su tamaño especificado en la definición de la tabla. Muchos programadores saben que el Firebird no guarda en el disco duro el tamaño especificado en la tabla sino que guarda el contenido de esas columnas comprimido. Entonces saben que pueden especificar un tamaño mucho mayor al necesario sin problema. Por ejemplo, supongamos que la mayor longitud que necesitamos en una columna es de 850 bytes pero en la definición de la tabla usamos 1.000 bytes, 4.000 bytes ó 12.500 bytes; estará todo bien, porque el Firebird nunca guardará más de 850 bytes en el disco duro, sin importar como se definió la columna. Eso en general es algo muy bueno.

Sin embargo, al hacer un SORT a esa columna la cosa cambia, porque allí sí el Firebird utiliza el tamaño usado en la definición de la columna.

De esta manera, inclusive a veces podríamos encontrarnos que tenemos un archivo temporal … cuyo tamaño es mayor al tamaño de la Base de Datos.

Así que, a no exagerar con el tamaño de las columnas CHAR y VARCHAR si existe la posibilidad de que alguna vez sean usadas en la cláusula ORDER BY de un comando SELECT.

¿Puedo borrar los archivos temporales?

Sí, si el Firebird no los está usando. El Windows no permite que se borre un archivo si algún programa lo está usando, esa es una muy buena medida de precaución.

Entonces, puedes intentar borrar cualquier archivo temporal. Si tuviste éxito eso significa que ningún programa lo estaba usando. Si no pudiste borrarlo entonces tendrás que esperar hasta que deje de ser usado.

Conclusión:

A veces el Firebird necesita crear archivos temporales en el disco duro. Nosotros podemos decirle cuales carpetas debe utilizar para eso e inclusive la cantidad de bytes que puede usar en cada carpeta.

Para aumentar la velocidad de los ordenamientos lo recomendable es usar un disco RAM, si eso no es posible entonces lo recomendable es que los archivos temporales se guarden en un disco duro distinto al usado para guardar las bases de datos.

Artículos relacionados:

Creando y usando tablas temporales

Usando un disco RAM para aumentar la velocidad

Acelerando los SORT

Configurando al Firebird

¿En cuál carpeta tener las bases de datos?

El índice del blog Firebird21

El foro del blog Firebird21