En el primer artículo de esta serie ya hemos visto que hasta Firebird 2.5.9 la administración de usuarios estaba centralizada, con las ventajas y las desventajas que eso implica.
Desde Firebird 3 también podemos tenerla descentralizada. Y por supuesto eso también tiene sus ventajas y sus desventajas.
En Firebird 2.x los nombres de los usuarios y sus correspondientes hash se guardan siempre en la Base de Datos llamada security2.fdb
Desde Firebird 3 se pueden guardar en:
- security3.fdb
- otra Base de Datos de seguridad centralizada
- una Base de Datos de usuarios
- la propia Base de Datos
Pero ¡¡¡CUIDADO!!! porque en Firebird 3 en la computadora donde se instaló el Servidor por defecto se tiene acceso embedded. Eso significa que cualquier persona que puede acceder al Servidor también puede acceder a todas las bases de datos ya que no le pedirá ni nombre de usuario ni password. En un siguiente artículo explicaremos más este tema.
Si guardamos los datos en security3.fdb estaríamos teniendo una administración de usuarios centralizada, tal y como hacíamos hasta la versión 2.5.9, y (casi) nada cambiaría con lo ya conocido. Ya veremos el motivo de ese casi.
Pero ahora también podríamos tener una Base de Datos de seguridad nuestra, a la cual le podemos dar cualquier nombre que se nos ocurra, por ejemplo: usuarios.fdb, accesosusuarios.fdb, datosusuarios.fdb, seguridad.fdb, miseguridad.fdb, o cualquier otro nombre. Y guardarla en cualquier carpeta de la computadora donde se encuentra el Servidor del Firebird.
Y también tenemos la posibilidad de que cada Base de Datos guarde dentro de ella los datos de los usuarios que pueden conectarse. Por ejemplo, si nuestra Base de Datos se llama conta.fdb, los nombres de los usuarios que pueden conectarse a conta.fdb se guardan dentro de conta.fdb, y por lo tanto, si los datos de un usuario no se encuentran dentro de conta.fdb entonces no podrá conectarse a conta.fdb. Eso lo consigue el Firebird 3 porque cada vez que crea una Base de Datos que tiene ODS 12.0 esa Base de Datos tiene dentro suyo la misma tabla que tiene security3.fdb
Cambiando el nombre de la «Base de Datos de seguridad» centralizada
Por defecto, el nombre de esta «Base de Datos de seguridad» es security3.fdb y se encuentra en la misma carpeta en donde instalaste al Firebird 3. Pero en el archivo FIREBIRD.CONF ahora existe un parámetro llamado SecurityDatabase que te permite elegir tanto la ubicación como el nombre de tu «Base de Datos de seguridad» centralizada y por defecto.
#SecurityDatabase = $(dir_secDb)/security3.fdb
El símbolo de numeral # indica que se trata de un comentario. Si deseas cambiar la carpeta o el nombre de tu archivo de seguridad entonces deberás eliminar ese símbolo de numeral. La palabra dir_secDb indica que se trata de la carpeta por defecto (o sea, la misma carpeta donde instalaste al Firebird 3).
Si en el archivo FIREBIRD.CONF reemplazas la línea de arriba por algo como:
SecurityDatabase = D:\SISTEMAS\SEGURIDAD\admitidos.fdb
Cuando reinicies el Servidor del Firebird la administración de usuarios centralizada ya no se realizará usando el archivo security3.fdb que se encuentra en la carpeta del Firebird 3 sino que se realizará usando el archivo admitidos.fdb que se encuentra en la carpeta: D:\SISTEMAS\SEGURIDAD\
¡¡¡Muy interesante!!!
Entonces, aunque la administración de usuarios seguiría estando centralizada, la ubicación y el nombre de la «Base de Datos de seguridad» cambiaron, dificultando por lo tanto la tarea de cualquier intruso.
Esta es la explicación al casi escrito más arriba. En versiones anteriores no podíamos cambiar ni la carpeta ni el nombre de la «Base de Datos de seguridad». Ahora ya podemos.
El archivo DATABASES.CONF
Hasta el Firebird 2.5.9 existe un archivo de texto plano llamado ALIASES.CONF donde podemos ponerles alias a las bases de datos para que los usuarios puedan conectarse a ellas usando los alias, y no las rutas y los nombres de las bases de datos.
Por ejemplo, en el archivo ALIASES.CONF podríamos tener:
CONTA=D:\CONTABILIDAD\DATABASES\CONTA.FDB
Y entonces, la conexión se podría realizar escribiendo:
CONNECT CONTA USER SYSDBA PASSWORD masterkey;
Desde Firebird 3 ya no existe el archivo ALIASES.CONF pero existe un nuevo archivo, mucho más poderoso, llamado DATABASES.CONF en el cual se especifican para cada Base de Datos sus parámetros de configuración.
Eso se hace escribiendo el alias, la ruta y el nombre de la Base de datos, abriendo llave, escribiendo los parámetros de configuración, y cerrando llave.
Por lo tanto, en este archivo DATABASES.CONF podemos especificar el alias, igual que hacíamos antes, pero también tiene otras posibilidades, por ejemplo especificar cual será la «Base de Datos de seguridad» que usará cada Base de Datos normal.
Veamos unos ejemplos para entender mejor todo esto.
Listado 1. La «Base de Datos de seguridad» por defecto en el archivo FIREBIRD.CONF
#SecurityDatabase = $(dir_secDb)/security3.fdb
Si no cambiamos la línea mostrada en el Listado 1. entonces la «Base de Datos de seguridad» por defecto se llamará security3.fdb y se encontrará en la misma carpeta en la cual instalaste al Firebird 3.
Listado 2. Se cambia la «Base de Datos de seguridad» en el archivo FIREBIRD.CONF
SecurityDatabase = D:\SISTEMAS\SEGURIDAD\USUARIOS_ADMITIDOS.FDB
Si escribimos algo similar a lo mostrado en el Listado 2. entonces se cambiará la carpeta y el nombre de la «Base de Datos de seguridad» por defecto (fíjate que el símbolo de numeral # que estaba al inicio fue eliminado).
Listado 3. Se configura la «Base de Datos de seguridad» por defecto en el archivo DATABASES.CONF
security.db = D:\SISTEMAS\SEGURIDAD\USUARIOS_ADMITIDOS.FDB
{
RemoteAccess = false
}
El parámetro security.db del archivo DATABASES.CONF es un alias para el parámetro SecurityDatabase del archivo FIREBIRD.CONF
Eso implica 2 cosas:
- Que lo escrito a continuación del símbolo = en el archivo FIREBIRD.CONF debe coincidir exactamente con lo escrito a continuación del símbolo = en el archivo DATABASES.CONF (mira el Listado 2. y el Listado 3.)
- Que en el archivo DATABASES.CONF podemos configurar o parametrizar a nuestra «Base de Datos de seguridad» por defecto. En el Listado 3. lo que se hizo fue impedir que desde otras computadoras puedan conectarse a la «Base de Datos de seguridad» por defecto, lo cual es una medida elemental de seguridad.
Recuerda que todas las bases de datos pueden ser configuradas en el archivo DATABASES.CONF, incluidas las «bases de datos de seguridad».
Listado 4. Se cambia la «Base de Datos de seguridad» en el archivo DATABASES.CONF para una Base de Datos específica
CONTA = D:\SISTEMAS\CONTABILIDAD\DATABASES\CONTABILIDAD.FDB
{
SecurityDatabase = E:\SEGURIDAD\ADMINISTRATIVOS.FDB
}
VENTAS = D:\SISTEMAS\VENTAS_COBRANZAS\DATABASES\VENTAS.FDB
{
SecurityDatabase = E:\SEGURIDAD\ADMINISTRATIVOS.FDB
}
En este ejemplo la «Base de Datos de seguridad» tanto para contabilidad.fdb como para ventas.fdb se llama administrativos.fdb
Lo que esto implica es que esas dos bases de datos no usarán a usuarios_admitidos.fdb (como vimos en el Listado 2. y en el Listado 3.) porque con el parámetro SecurityDatabase se especificó que la «Base de Datos de seguridad» que usarán será: administrativos.fdb
Listado 5. La «Base de Datos de seguridad» de una Base de Datos es esa misma Base de Datos
SALARIOS = D:\SISTEMAS\SUELDOS_Y_JORNALES\DATABASES\SUELDOS.FDB
{
SecurityDatabase = SALARIOS
}
Como el parámetro SecurityDatabase es el mismo que el alias entonces dentro de la Base de Datos se tiene su propia «Base de Datos de seguridad».
Esto es posible porque todas las bases de datos cuyo ODS es 12 tienen dentro suyo la misma tabla que tiene y utiliza security3.fdb
NOTA: En el parámetro SecurityDatabase puedes escribir el alias de la Base de Datos (como se hizo en el Listado 5.) o su ruta y nombre completos, como prefieras.
Listado 6. En el archivo DATABASES.CONF una Base de Datos no especifica el parámetro SecurityDatabase
TESORERIA = D:\SISTEMAS\TESORERIA\DATABASES\TESORERIA.FDB
Como en el Listado 6. hay un alias pero no se usó el parámetro SecurityDatabase entonces se usará la «Base de Datos de seguridad» especificada en el Listado 1. (si no se cambió el valor por defecto) o en el Listado 2. (si se cambió el valor por defecto), y que como ya sabes deben coincidir con el parámetro security.db del Listado 3.
Resumiendo:
- Si el alias de una Base de Datos no se encuentra en el archivo DATABASES.CONF entonces usará la «Base de Datos de seguridad» por defecto, la cual fue especificada en el archivo FIREBIRD.CONF (como en el Listado 1. o como en el Listado 2.)
- Si el alias de una Base de Datos sí se encuentra en el archivo DATABASES.CONF y: a) no se especificó el parámetro SecurityDatabase entonces usará la «Base de Datos de seguridad» por defecto o sea la especificada en el archivo FIREBIRD.CONF, o b) sí se especificó el parámetro SecurityDatabase entonces se usará la «Base de Datos de seguridad» especificada allí (como en el Listado 4.). Que inclusive puede ser su mismo alias (como en el Listado 5.)
- En el archivo DATABASES.CONF se pueden configurar o parametrizar todas las bases de datos, incluidas todas las «bases de datos de seguridad»
- La «Base de Datos de seguridad» escrita en el parámetro SecurityDatabase del archivo FIREBIRD.CONF debe ser exactamente la misma «Base de Datos de seguridad» que la que se le asignó al alias security.db del archivo DATABASES.CONF. Y es que security.db es el alias de la «Base de Datos de seguridad» por defecto.
Un ejemplo práctico
En la computadora donde se encuentra el Servidor del Firebird hay 6 bases de datos, cuyos nombres son:
- ALICIA.FDB
- GRACIELA.FDB
- MARCELA.FDB
- SILVIA.FDB
- SUSANA.FDB
- VERONICA.FDB
Y en el archivo de texto DATABASES.CONF tenemos:
MARCELA = D:\SISTEMAS\CONTABILIDAD\DATABASES\MARCELA.FDB
SILVIA = D:\SISTEMAS\CONTABILIDAD\DATABASES\SILVIA.FDB
{
SecurityDatabase = E:\SEGURIDAD\USUARIOS_OK.FDB
}
SUSANA = D:\SISTEMAS\CONTABILIDAD\DATABASES\SUSANA.FDB
{
SecurityDatabase = SUSANA
}
VERONICA = D:\SISTEMAS\CONTABILIDAD\DATABASES\VERONICA.FDB
{
SecurityDatabase = VERONICA
}
security.db = E:\SEGURIDAD\PERMISOS.FDB
Como ALICIA.FDB y GRACIELA.FDB no tienen alias en el archivo DATABASES.CONF entonces la «Base de Datos de seguridad» que usarán será la especificada en el alias security.db (que como ya sabes, debe coincidir con el parámetro SecurityDatabase del archivo FIREBIRD.CONF).
Como MARCELA.FDB tiene un alias pero no tiene el parámetro SecurityDatabase entonces la «Base de Datos de seguridad» que usará será también la especificada en el parámetro security.db
Como SILVIA.FDB tiene especificado el parámetro SecurityDatabase entonces usará la «Base de Datos de seguridad» que allí se hubiera escrito (en este ejemplo: E:\SEGURIDAD\USUARIOS_OK.FDB)
Como SUSANA.FDB y VERONICA.FDB han especificado el parámetro SecurityDatabase y además el nombre de la «Base de Datos de seguridad» es el mismo nombre que el alias entonces su «Base de Datos de seguridad» es interna, no es externa como en todos los demás casos. Eso significa que los nombres y los hash de los usuarios que pueden conectarse a SUSANA.FDB y a VERONICA.FDB se encuentran dentro de SUSANA.FDB y de VERONICA.FDB y no en una Base de Datos externa.
Administración de usuarios descentralizada
Como ahora se puede determinar cual «Base de Datos de seguridad» usará cada Base de Datos normal, eso implica que los usuarios que pueden conectarse a una Base de Datos normal pueden ser distintos a los usuarios que pueden conectarse a otra Base de Datos normal.
En nuestro ejemplo, los usuarios que pueden conectarse a marcela.fdb pueden ser (y generalmente son) distintos a los que pueden conectarse a silvia.fdb o a susana.fdb o a veronica.fdb.
IMPORTANTE: esas restricciones se aplican solamente a los usuarios que se conectan desde otras computadoras ya que los usuarios que se conectan desde la computadora donde está instalado el Servidor del Firebird sí podrían conectarse ya que por defecto el acceso está configurado como «embedded» y por lo tanto no requiere ni nombre de usuario ni contraseña.
Creando nuestras propias «Bases de Datos de seguridad»
Hemos visto en los apartados anteriores que además de security3.fdb podemos tener otras «Bases de datos de seguridad» a las cuales podríamos llamar usuarios.fdb, admitidos.fdb, seguridad.fdb, accesos.fdb, o como nos guste.
¿Y cómo creamos a esas «bases de datos de seguridad» alternativas?
En la carpeta en la cual instalamos al Firebird 3 hay un archivo cuyo nombre es security3.fdb.empty que tiene exactamente la misma estructura que security3.fdb pero está vacío, no tiene datos de usuarios.
Entonces, lo que hacemos es copiar el archivo security3.fdb.empty a otra carpeta y lo renombramos con cualquier nombre que nos guste, por ejemplo: seguridad.fdb
Y luego, en FIREBIRD.CONF o en DATABASES.CONF ya podemos referirnos a nuestra «Base de datos de seguridad» alternativa. En este ejemplo, usaríamos a: seguridad.fdb
¿Estás entendiendo todo hasta aquí? ¿Te queda claro como se administran los usuarios y la seguridad con Firebird 3?
Este es un tema MUY IMPORTANTE y deberías asegurarte de entenderlo muy bien.
Y como es bastante diferente a todo lo conocido con las versiones anteriores del Firebird, habrá más artículos para ir profundizando el tema.
Artículos relacionados:
Usuarios y seguridad en Firebird 3 (1)
Usuarios y seguridad en Firebird 3 (3)
Usuarios y seguridad en Firebird 3 (4)
Usuarios y seguridad en Firebird 3 (5)
Usuarios y seguridad en Firebird 3 (6)
El índice del blog Firebird21
Comentarios recientes