Ir al contenido



Foto

Creando BBDD de seguridad con isql - Firebird 3.0


  • Por favor identifícate para responder
7 respuestas en este tema

#1 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 320 mensajes
  • LocationCerrillos - Salta - Argentina

Escrito 13 diciembre 2018 - 04:44

Buenas, estoy intentando crear una BBDD de seguridad particular (non-default security database). Sigo las indicaciones de la Documentación pero no he podido lograrlo.

La única particularidad mía respecto al ejemplo que se cita es: En mi configuración tengo DataBaseAccess = None.

 

Pongo lo que dice la documentación:


php
  1. Firebird now supports an unlimited number of security databases. Any database may act as a security database and can be a security database for itself.
  2. Use databases.conf to configure a non-default security database. This example configures /mnt/storage/private.security.fdb as the security database for the first and second databases:
  3.  
  4. first = /mnt/storage/first.fdb
  5. {
  6. SecurityDatabase = /mnt/storage/private.security.fdb
  7. }
  8.  
  9. second = /mnt/storage/second.fdb
  10. {
  11. SecurityDatabase = /mnt/storage/private.security.fdb
  12. }
  13.  
  14. Here we use third database as its own security database:
  15. third = /mnt/storage/third.fdb
  16. {
  17. SecurityDatabase = third
  18. }
  19.  
  20.  
  21. Note
  22. The value of the SecurityDatabase parameter can be a database alias or the actual database path.
  23.  
  24. Creating an Alternative Security Database
  25. To start using a separate, non-default security database, the first step is to create it, unless it already exists. An embedded isql connection is used:
  26.  
  27. > isql -user sysdba
  28. SQL> create database '/mnt/storage/private.security.fdb';
  29.  
  30. Now connect to any database which will be served by the security database you are currently preparing, in order to create its SYSDBA user:
  31. SQL> connect first;
  32. SQL> create user sysdba password 'sysdba-in-private-security-password';
  33. SQL> commit;
  34. SQL> exit;

Esta es mi configuración en mi Databases.conf


php
  1. VendedoresPruebaSecurity = D:\SistemasXE5\SamiSoft\Software\BBDD\PruebaSecurity.fdb
  2. {
  3. MiSecurityFB30 = D:\SistemasXE5\SamiSoft\Software\BBDD\MiSecurityFB30.fdb
  4. } 

Esto me responde:


php
  1. SQL> -user sysdba
  2.  
  3. CON> create database D:\SistemasXE5\SamiSoft\Software\BBDD\MiSecurityFB30.fdb;
  4.  
  5. Use CONNECT or CREATE DATABASE to specify a database
  6.  
  7. SQL> create database 'D:\SistemasXE5\SamiSoft\Software\BBDD\MiSecurityFB30.fdb';
  8.  
  9. Statement failed, SQLSTATE = 28000
  10. Use of database at location D:\SISTEMASXE5\SAMISOFT\SOFTWARE\BBDD\MISECURITYFB30.FDB is not allowed by server configuration 

Cuando lo hago con un alias:


php
  1. SQL> create database 'MiSecurityFB30';
  2.  
  3. Statement failed, SQLSTATE = 28000
  4.  
  5. Use of database at location C:\FIREBIRD30\MISECURITYFB30.FDB is not allowed by server configuration
  6. SQL> create database MiSecurityFB30;
  7. Statement failed, SQLSTATE = 42000
  8. SQL error code = -104
  9. -Token unknown
  10. -MiSecurityFB30 

....

 

¿Alguien ha tenido suerte con esto?

Bueno, espero haber sido claro.

 

Santiago


  • 0

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.233 mensajes
  • LocationArgentina

Escrito 13 diciembre 2018 - 06:06

Tu tienes puesto:


xml
  1. VendedoresPruebaSecurity = D:\SistemasXE5\SamiSoft\Software\BBDD\PruebaSecurity.fdb
  2. {
  3. MiSecurityFB30 = D:\SistemasXE5\SamiSoft\Software\BBDD\MiSecurityFB30.fdb
  4. }

Y debe ser algo como:


php
  1. NombreBaseDatos = Ruta\A\la\Base\De\Datos\archivo_db.fdb
  2. {
  3. SecurityDatabase = NombreDeBaseDatosSeguridad|Alias
  4. }

Tu tienes puesto mal el parámetro. Es SecurityDatabase.

Recuerda que puedes indicar el nombre de la base datos que hará de seguridad o bien su Alias.

 

Ahora, respecto al otro tipo de error, que te impide crear las bases de datos, me pregunto si el user sydba tiene los permisos admin o si es que se tiene los permisos de escritura en el disco.

 

Saludos,


  • 0

#3 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.233 mensajes
  • LocationArgentina

Escrito 13 diciembre 2018 - 06:37

Ahora que leo mejor el tema, yo recién me estoy metiendo con FB 3, si se tiene en None DataBaseAccess, la conexión solamente puede ser por alias:

 

 

The DatabaseAccess parameter in firebird.conf can be set to Restrict to limit access to explicitly listed filesystem trees, or even to None to allow access to aliased databases only. Default is Full, i.e. no restrictions.

Note that this is not the same thing as the filesystem-level access protection discussed earlier: when DatabaseAccess is anything other than Full, the server will refuse to open any databases outside the defined scope even if it has sufficient rights on the database files.

 

Más info aquí

 

Saludos,


  • 0

#4 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 320 mensajes
  • LocationCerrillos - Salta - Argentina

Escrito 14 diciembre 2018 - 09:56

Tu tienes puesto:


xml
  1. VendedoresPruebaSecurity = D:\SistemasXE5\SamiSoft\Software\BBDD\PruebaSecurity.fdb
  2. {
  3. MiSecurityFB30 = D:\SistemasXE5\SamiSoft\Software\BBDD\MiSecurityFB30.fdb
  4. }

Y debe ser algo como:


php
  1. NombreBaseDatos = Ruta\A\la\Base\De\Datos\archivo_db.fdb
  2. {
  3. SecurityDatabase = NombreDeBaseDatosSeguridad|Alias
  4. }

Tu tienes puesto mal el parámetro. Es SecurityDatabase.

Recuerda que puedes indicar el nombre de la base datos que hará de seguridad o bien su Alias.

 

Ahora, respecto al otro tipo de error, que te impide crear las bases de datos, me pregunto si el user sydba tiene los permisos admin o si es que se tiene los permisos de escritura en el disco.

 

Saludos,

 

Hola.

Tienes razón, puse mal el Parámetro.

De hecho me di cuenta y lo corregí. Puse SecurityDatabase y el problema persiste.


  • 0

#5 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 320 mensajes
  • LocationCerrillos - Salta - Argentina

Escrito 14 diciembre 2018 - 10:03

Estoy leyendo por todos lados y dicen lo mismo. Solo habría que poner entre paréntesis la Base de Datos de seguridad y ya Firebird reconocería a esa como la local de tu BBDD de trabajo. Pero no he logrado crear la BBDD de seguridad particular.

Así es como tengo ahora la declaración:


delphi
  1. # Prueba Security propia
  2. Prueba = D:\SistemasXE5\Pruebas\Firebird\Firebird30\BBDD\Prueba.fdb
  3. {
  4. SecurityDatabase = D:\SistemasXE5\Pruebas\Firebird\Firebird30\BBDD\SecurityPrueba.fdb
  5. }

Mi configuración en Firebird.conf es:


delphi
  1. # ----------------------------
  2. # Database Paths/Directories
  3. #
  4. # DatabaseAccess may be None, Full or Restrict. If you choose Restrict,
  5. # provide ';'-separated trees list, where database files are stored.
  6. # Relative paths are treated relative to the root directory of firebird.
  7. # Default value 'Full' gives full access to all files on your site.
  8. # To specify access to specific trees, enum all required paths
  9. # (for Windows this may be something like 'C:\DataBase;D:\Mirror',
  10. # for unix - '/db;/mnt/mirrordb'). If you choose 'None', then only
  11. # databases listed in databases.conf can be attached.
  12. #
  13. # Note: simple quotation marks shown above should *NOT* be used when
  14. # specifying values and directory path names. Examples:
  15. #
  16. # DatabaseAccess = None
  17. # DatabaseAccess = Restrict C:\DataBase
  18. # DatabaseAccess = Restrict C:\DataBase;D:\Mirror
  19. # DatabaseAccess = Restrict /db
  20. # DatabaseAccess = Restrict /db;/mnt/mirrordb
  21. # DatabaseAccess = Full
  22. #
  23. # UNCONTROLLED DATABASE ACCESS MAY COMPROMISE YOUR SYSTEM!
  24. # IT IS STRONGLY RECOMMENDED THAT THIS SETTING BE USED TO LIMIT
  25. # DATABASE LOCATIONS!
  26. #
  27. # Type: string (special format)
  28. #
  29. DatabaseAccess = None

Con lo cual solamente puedo acceder a través de un Alias.

Ahora bien, tengo que crear ambas BBDD, tanto Prueba como SecurityPrueba.

 

Sigo las indicaciones del Capítulo Seguridad en Release Notes de Firebird 3.0, que es lo que publiqué en mi Post anterior, y no puedo hacer que funcione.

 

Bueno, sigo buscando la forma. Si encuentro algo, lo publico. También espero que alguien mas esté haciendo lo mismo y pueda dar una mano.

 

Gracias.


  • 0

#6 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.233 mensajes
  • LocationArgentina

Escrito 14 diciembre 2018 - 02:27

Yo dispongo de Firebird 3, y puedo hacer las pruebas mañana. Si no te es molestia esperar.

 

Saludos,


  • 0

#7 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.233 mensajes
  • LocationArgentina

Escrito 15 diciembre 2018 - 12:08

Estoy intentando simular tu caso y creo que en parte lo he logrado, pero todavía hay cosas que no logro entender, y otras que no me funcionan. Hace poco empecé con FB 3, y a pesar de haber leído la documentación el manejo de los usuarios, roles, y bases de datos de seguridad me ha roto los esquemas y no he podido aprovechar estas nuevas cosas que tiene FB.

 

AVISO: actualmente tengo un sólo usuario registrado, el SYSDBA que genera el instalador, con la clave que éste me solicita.

 

Esto es lo que hice, aunque no se si es lo más apropiado:

1. Cree con IBExpert 2 bases de datos: test y testseguridad en una carpeta en mi disco D, con el usuario SYDBA. Sin añadir tablas. Están vacias. Modo de conexión: TCP/IP.

2. Luego entré a databases.conf y añadí los respectivos alias para cada una, y además, le indiqué a test el alias de la base de datos que hará de seguridad:


xml
  1. testseg = D:\Mis Trabajos\PruebaFB3\TESTSEGURIDAD.FDB
  2.  
  3. test = D:\Mis Trabajos\PruebaFB3\TEST.FDB
  4. {
  5. Securitydatabase = testseg
  6. }

Esto es así porque si la idea es emplear DatabaseAccess en None, todo conexión debe ser por alias.

 

3. Luego en firebird.conf cambié la configuración de DatabaseAccess a None.

4. Luego por consola simplemente hago:

 

4.1. isq -user sysdba;

4.2. connect test;

 

La consola me indica que la conexión se realizó y el user es SYSDBA.

Ahora bien, en la documentación indica después de conectarse a la base de datos que vamos a asociar a la de seguridad (en mi ejemplo, test) se le debe de crear el usuario.

Un intento de agregar el SYSDBA, me reporta un error, que olvidé de copiar. Lo que me queda de duda es cual SYSDBA es el logueado en la consola, si el que estaba inicialmente en test, o bien, si ya ha pasado a ser el de la base de datos de seguridad,o el SYDBA "global". Creería que el de la base de datos de seguridad, ya que está activa la configuración de Securitydatabase.

 

5. Luego desregistré las bases de datos que cree con IBExpert. Ya que se ha cambiado los modos de conexión. y todo ser por alias.

6. Registro la base de datos en IBexpert, con la configuración:

Servidor: localhost, default

archivo: test

alias: test

Usuario: SYSDBA

 

Hago en verificar conexión, y me indica que anda todo bien. Acepto.

 

Luego presiono en Conectar, y obtengo el error que adjunto en la imagen.

 

Quizá se pregunten porqué cree con IBExpert. Lo hice porque por algún motivo que no logro entender por consola un create database no me creaba la base de datos. Me fijaba en la carpeta en cuestión y no había archivo fdb. Tampoco me reportaba error. Me llevaba a CON>, como si todo estuviera bien.

 

Ahora bien, si uno PRIMERO configura los .conf para que todo sea por DatabaseAccess = None, un POSTERIOR intento de crear una base de datos reporta el error que se ha comentado al inicio del hilo.

La creación por medio del alias (create database test2;) tampoco resulta, aunque en esta oportunidad arroja otro error:

SQSTATE = 42000

SQL error code = -104

-token unknown

-test2

 

Dando a entender que quizá si fuera posible la creación por alias, aunque leyendo en la documentación no encuentro algo que me indique como proceder. La primera lección aquí es que si se va a utilizar DatabaseAccess = None (y por consiguiente el uso de alias obligatoriamente), es que PRIMERO se creen las DBs, y luego se configuren database.conf y firebird.conf en ESE ORDEN.

 

La segunda lección: hay que seguir estudiando como es este nuevo mecanismo de seguridad y permisos de usuarios y conexiones basadas en plugins que ofrece FB 3. Si alguien más puede aportar sus 2 centavos al tema agradecería mucho. Ya que yo también estoy empezando con Firebird 3.

 

Entorno de producción:

Windows 10 64bits

Firebird 3.0.4.33054 64bits

IBExpert 2018.11.15.1

 

Saludos,

Archivos adjuntos


  • 0

#8 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.233 mensajes
  • LocationArgentina

Escrito 15 diciembre 2018 - 12:18

Si sirve de ayuda para determinar si es parte del problema, adjunto una captura del error al intentar crear una base de datos (restableciendo los cambios para DatabaseAccess = Full)

 

EDITO:

El error parece ser por no indicar el password. Al probar con create database -user SYSDBA -password *****; crea el archivo correctamente. La cosa es si por ejemplo, si yo abro el isql.exe de forma manual en lugar de hacerlo via cmd, ni siquiera es necesario poner el user, ya que se asume SYSDBA.

 

A mi me está confundiendo la documentación ya que en sus ejemplos veo la falta pasar el password en un create database.

 

Saludos,

Archivos adjuntos


  • 0