FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
Cita:
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 Código:
TBL_BASE pk-base_id base_ruta_conexion 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. |
#3
|
|||
|
|||
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 |
#4
|
||||
|
||||
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:
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:
__________________
El malabarista. |
#5
|
|||
|
|||
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'; 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'; Código:
GRANT SELECT ON nombre_base_de_datos.* TO 'usuario'@'host'; Código:
REVOKE ALL PRIVILEGES ON otra_base_de_datos.* FROM 'usuario'@'host'; 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'; 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. |
|
|
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 |
|