Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Ver Base Datos una sola (https://www.clubdelphi.com/foros/showthread.php?t=96488)

pruz 14-11-2023 16:49:53

Ver Base Datos una sola
 
Hola Amigos:

Tengo la siguiente problema, aqui va el contexto.

1.- Tengo un motor de datos Mysql, con varias Base de Datos (Base1, Base2, Base3, Base4, etc)
2.- Tengo varios usuarios con sus privilegios respectivos (Usuario1, Usuario2, Usuario3, etc).

Pero solo quiero que cada usuario vea su base de datos y no otras, es decir, Usuario1 con Base1, Usuario2 con Base2 y asi sucesivamente.

Cualquier select o consulta, no pueda ver otra base de datos que no se la suya.

Si alguien sabe como asignar esos niveles de seguridad o privilegios de usuario...Por favor.

Gracias.
Patricio

mRoman 14-11-2023 17:37:22

Cita:

Empezado por pruz (Mensaje 553293)
Hola Amigos:

Tengo la siguiente problema, aqui va el contexto.

1.- Tengo un motor de datos Mysql, con varias Base de Datos (Base1, Base2, Base3, Base4, etc)
2.- Tengo varios usuarios con sus privilegios respectivos (Usuario1, Usuario2, Usuario3, etc).

Pero solo quiero que cada usuario vea su base de datos y no otras, es decir, Usuario1 con Base1, Usuario2 con Base2 y asi sucesivamente.

Cualquier select o consulta, no pueda ver otra base de datos que no se la suya.

Si alguien sabe como asignar esos niveles de seguridad o privilegios de usuario...Por favor.

Gracias.
Patricio

Hola Patricio.

Cual sería "la naturaleza" de tu aplicación, que existe "la necesidad" de que nUsuarios se conecten a nBasesDeDatos??...me resulta interesante saber que tipo de sistema sería.

Ahora, considero, que se pudiera resolver desde que el usuario se "logea" al SISTEMA, se me ocurre, tener una base de datos general, donde tengas registrado ahi a los nUsuarios y tener definido ahí a que bases de datos se pueden conectar, así de esta manera cuando se logee el Usuario1, en la bd general, estará definido que se deberá conectar a la Base1....

Es decir tendrías una BD General con las siguientes tablas:

USUARIO
BASE

En USUARIO tendrías -talvez- los siguientes campos:

Código:

TBL_USUARIO
pk-usuario_id
fk-base_id
  usuario_contraseña

Y en BASE los siguientes campos:

Código:

TBL_BASE
pk-base_id
    base_ruta_conexion

Donde TBL_USUARIO, estará relacionado con la tabla TBL_BASE por el campo "base_id", como te darás cuenta, con este sencillo modelo, también podrás definir si USUARIO1 se puede conectar a otra base de datos....si es el caso, BASE2 x ej.

Y a partir de aqui, generas código para realizar las conexiones a las base de datos de cada usuario.

Espero te sirve esta idea.

Saludos.

pruz 14-11-2023 20:11:00

Hola Roman:

Gracias por responder.
el sistema es uno de Clientes Relacionados, es decir, por cada cliente creo una base de datos, ya que con ello puedo miminizar los tiempo de respuesta, sobre todo con los inventarios. Eso , es algo simple.

Pero creo que la solucion que me das no es toda completa o no logre entenderla bien

Por que, si un usuario hace un show databases; el podra ver todas las bases de datos, y solo quiero que vea la suya al hacer Show database.

Patricio

mamcx 14-11-2023 22:50:22

Lo que haces se llama una arquitectura "multi-tenant"


Con respecto a la solución, tienes que aplicar los privilegios:

https://dev.mysql.com/doc/refman/8.0...-provided.html


Es algo como:


Código SQL [-]
GRANT PRIVILEGE? ON database.table TO 'username'@'host';
FLUSH PRIVILEGES;

Donde `PRIVILEGE?` es algo que debes elegir con intencion. La documentacion lo explica.

P.D: probablemente es mejor si haces un "split" donde tienes el usuario "admin" con todo y uno que solo tiene permisos "crud" como:

Código SQL [-]
GRANT INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'username'@'host' WITH GRANT OPTION;


La franja horaria es GMT +2. Ahora son las 17:39:39.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi