Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-11-2023
pruz pruz is offline
Miembro
 
Registrado: sep 2003
Posts: 201
Poder: 22
pruz Va por buen camino
Angry 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
Responder Con Cita
  #2  
Antiguo 14-11-2023
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 638
Poder: 21
mRoman Va por buen camino
Cita:
Empezado por pruz Ver Mensaje
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.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!

Última edición por mRoman fecha: 14-11-2023 a las 18:43:00.
Responder Con Cita
  #3  
Antiguo 14-11-2023
pruz pruz is offline
Miembro
 
Registrado: sep 2003
Posts: 201
Poder: 22
pruz Va por buen camino
Talking

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
Responder Con Cita
  #4  
Antiguo 14-11-2023
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.927
Poder: 26
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
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;
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 05-10-2024
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 245
Poder: 1
navbuoy Va por buen camino
Para controlar qué bases de datos puede ver o acceder un usuario en MySQL, se gestionan los privilegios de acceso mediante la instrucción GRANT o la manipulación directa de los permisos en las tablas de privilegios.

Pasos para otorgar o restringir acceso a bases de datos en MySQL:
Crear el usuario (si aún no existe): Si el usuario aún no existe, puedes crearlo con la siguiente instrucción:

Código:
CREATE USER 'usuario'@'host' IDENTIFIED BY 'contraseña';
usuario: Nombre del usuario.
host: Puede ser localhost, % (para cualquier host), o una IP específica.
contraseña: La contraseña del usuario.
Otorgar acceso a una base de datos específica: Para otorgar acceso a una base de datos específica, puedes usar la instrucción GRANT:

Código:
GRANT ALL PRIVILEGES ON nombre_base_de_datos.* TO 'usuario'@'host';
Esto le dará al usuario acceso completo a la base de datos nombre_base_de_datos. Si solo deseas otorgar permisos específicos, como SELECT, puedes hacer algo como:

Código:
GRANT SELECT ON nombre_base_de_datos.* TO 'usuario'@'host';
Revocar el acceso a otras bases de datos: Si el usuario tiene acceso a otras bases de datos y deseas quitárselo, utiliza REVOKE:

Código:
REVOKE ALL PRIVILEGES ON otra_base_de_datos.* FROM 'usuario'@'host';
Esto revoca todos los privilegios del usuario en la base de datos otra_base_de_datos.

Verificar los privilegios del usuario: Para ver los privilegios de un usuario, puedes usar la siguiente instrucción:

Código:
SHOW GRANTS FOR 'usuario'@'host';
Ocultar bases de datos que no tienen permisos: Si has configurado correctamente los privilegios, el usuario solo verá las bases de datos a las que tiene acceso. En versiones más antiguas de MySQL, a veces un usuario puede ver el nombre de una base de datos aunque no tenga permisos para accederla, pero no podrá interactuar con ella. Sin embargo, versiones más recientes y configuraciones adecuadas ocultan por completo las bases de datos a las que un usuario no tiene acceso.

recordar ejecutar el FLÜSH PRIVILEGES despues de GRANT o PRIVILEGES

Código:
FLUSH PRIVILEGES;

Aquí tienes una lista de los privilegios más comunes que puedes conceder:

Privilegios Generales (a nivel de servidor o base de datos):
ALL PRIVILEGES: Concede todos los privilegios excepto GRANT OPTION. Se puede aplicar a nivel de servidor, base de datos, tabla, etc.

ALTER: Permite alterar la estructura de tablas o bases de datos (modificar, añadir, eliminar columnas, etc.).

ALTER ROUTINE: Permite alterar o eliminar rutinas almacenadas (procedures y functions).

CREATE: Permite crear bases de datos y tablas.

CREATE ROUTINE: Permite crear rutinas almacenadas (procedures y functions).

CREATE TEMPORARY TABLES: Permite crear tablas temporales.

CREATE USER: Permite crear, eliminar y renombrar usuarios.

CREATE VIEW: Permite crear vistas.

DELETE: Permite eliminar registros de tablas.

DROP: Permite eliminar bases de datos, tablas o vistas.

EVENT: Permite crear, modificar y eliminar eventos en el programador de eventos.

EXECUTE: Permite ejecutar rutinas almacenadas (procedures).

FILE: Permite leer y escribir archivos en el servidor (útil para operaciones como LOAD DATA INFILE).

INDEX: Permite crear y eliminar índices.

INSERT: Permite insertar registros en tablas.

LOCK TABLES: Permite bloquear tablas para la lectura o escritura.

PROCESS: Permite ver y gestionar los procesos en ejecución.

REFERENCES: Permite crear claves foráneas y realizar operaciones de referencia entre tablas.

RELOAD: Permite recargar las tablas de privilegios y vaciar logs.

REPLICATION CLIENT: Permite al usuario consultar el estado de la replicación.

REPLICATION SLAVE: Permite a los esclavos de replicación conectarse al servidor maestro.

SELECT: Permite leer datos de tablas y vistas.

SHOW DATABASES: Permite al usuario ver la lista de todas las bases de datos.

SHOW VIEW: Permite consultar las definiciones de vistas.

SHUTDOWN: Permite apagar el servidor MySQL.

SUPER: Permite ejecutar operaciones administrativas como detener procesos y modificar variables de sistema.

TRIGGER: Permite crear, eliminar o invocar triggers.

UPDATE: Permite actualizar registros en tablas.

USAGE: No concede ningún privilegio, pero crea el usuario.

Privilegios a nivel de tabla/columna:
SELECT (nombre_columna): Permite leer datos solo de las columnas especificadas.
INSERT (nombre_columna): Permite insertar datos solo en las columnas especificadas.
UPDATE (nombre_columna): Permite actualizar datos solo en las columnas especificadas.
Privilegios Especiales:
GRANT OPTION: Permite al usuario conceder a otros usuarios los privilegios que posee.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Conectar base de datos Firebird con base de datos Oscommerce 2.3.3 Adriadob Firebird e Interbase 11 31-10-2012 12:28:46
Error en alta masiva de datos en una sóla transacción afxe Firebird e Interbase 3 07-05-2007 11:27:38
Dos aplicaciones y sola base de datos..? kia Conexión con bases de datos 19 01-05-2006 19:08:20
DbExpres: Dod Bases de Datos, una sola Transacción. josemmerida Conexión con bases de datos 1 09-02-2005 20:43:58
¿15 MB para una sola base de datos? M@rcos Conexión con bases de datos 2 20-06-2003 16:49:26


La franja horaria es GMT +2. Ahora son las 20:00:24.


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
Copyright 1996-2007 Club Delphi