Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Solo Ver una BD (https://www.clubdelphi.com/foros/showthread.php?t=96867)

pruz 30-09-2024 14:37:24

Solo Ver una BD
 
Hola amigos:
Tengo el siguiente problema:
Tengo un motor de datos Mysql, con 5 Base datos y 3 usuarios

ejemplo:
Base Datos, ventas, contabilidad, inventario, personal y automoviles
Usuario; usuario1, usuario2 y usuario3.

Quiero que el "usuario1" solo pueda ver la Base Datos "Ventas", que las otra ni siquiera se entere que existen, cualquier herramienta que use solo pueda ver y manipular esa Base Dato.

O que el "usuario2" solo puede ver y manipular la Base Datos "Personal y Ventas", por ejemplo


Existe alguna forma de hacerlo a nivel de usuario o BD, sin importar la herramienta que use para accesar a ella, ya sea Delphi, PHP, MysqlFront, MysqlManager, etc..


Gracias

delphi.com.ar 30-09-2024 15:25:43

Simplemente debes usar el sistema de permisos de MySql y crear usuarios nominales en la base de datos, solo permitiendo el acceso a las bases esperadas.

Código SQL [-]
CREATE USER 'usuario1'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT ON usuario1.* TO 'usuario1'@'%';

https://dev.mysql.com/doc/refman/8.4...eate-user.html
https://dev.mysql.com/doc/refman/8.4/en/grant.html

Saludos.

pruz 01-10-2024 00:22:16

Pero esto:

Código Delphi [-]
CREATE USER 'usuario1'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT ON usuario1.* TO 'usuario1'@'%';

solo me permite administrar la BD, en cuestion.
Pero me deja ver las demas igual? me refiero que ni siquiera saber que existe otra?

Gracias,

aposi 01-10-2024 22:01:28

Hoy es el dia de chatgpt


he puesto tu pregunta al chatgpt y su respuesta es:


Para lograr lo que necesitas en MySQL, debes gestionar cuidadosamente los privilegios de los usuarios sobre las bases de datos. Puedes restringir el acceso de cada usuario a las bases de datos específicas que les corresponden y evitar que puedan ver o manipular otras bases de datos en el sistema.
Los pasos generales son los siguientes:

1. Crear usuarios (si no existen)

Si aún no has creado los usuarios, puedes hacerlo con el siguiente comando SQL:
CREATE USER 'usuario1'@'%' IDENTIFIED BY 'password1';
CREATE USER 'usuario2'@'%' IDENTIFIED BY 'password2';
CREATE USER 'usuario3'@'%' IDENTIFIED BY 'password3';

Reemplaza % si solo deseas permitir el acceso desde un host específico, y ajusta las contraseñas según sea necesario.

2. Otorgar privilegios específicos a cada usuario

Debes otorgar privilegios únicamente sobre las bases de datos que deseas que cada usuario pueda ver y manipular.

Usuario1: Solo acceso a la base de datos ventas.
GRANT ALL PRIVILEGES ON ventas.* TO 'usuario1'@'%';

Usuario2: Acceso a las bases de datos personal y ventas.
GRANT ALL PRIVILEGES ON personal.* TO 'usuario2'@'%';
GRANT ALL PRIVILEGES ON ventas.* TO 'usuario2'@'%';

Usuario3: Si tiene acceso a otras bases de datos o si no tiene acceso a ninguna base de datos en particular, puedes configurar los privilegios según sea necesario. Ejemplo de acceso a la base de datos inventario:

GRANT ALL PRIVILEGES ON inventario.* TO 'usuario3'@'%';

3. Revocar acceso a otras bases de datos

Asegúrate de que ningún usuario tenga privilegios en otras bases de datos. Esto es importante porque si un usuario tiene algún tipo de privilegio sobre una base de datos, podrá verla.

Por ejemplo, para asegurarte de que usuario1 no pueda acceder a otras bases de datos como contabilidad o inventario, puedes ejecutar lo siguiente:

REVOKE ALL PRIVILEGES ON contabilidad.* FROM 'usuario1'@'%';
REVOKE ALL PRIVILEGES ON inventario.* FROM 'usuario1'@'%';
REVOKE ALL PRIVILEGES ON personal.* FROM 'usuario1'@'%';
REVOKE ALL PRIVILEGES ON automoviles.* FROM 'usuario1'@'%';

Haz lo mismo para cada usuario según las bases de datos que no deben ver.




4. Evitar que los usuarios puedan listar todas las bases de datos

Aunque hayas revocado los privilegios, los usuarios podrían aún ser capaces de listar todas las bases de datos usando herramientas como SHOW DATABASES. Para evitar esto, debes modificar el archivo de configuración de MySQL para que los usuarios solo puedan ver las bases de datos a las que tienen acceso.
  1. Edita el archivo de configuración de MySQL (usualmente my.cnf o my.ini dependiendo del sistema operativo).
  2. Busca la sección [mysqld] y agrega la siguiente línea:
skip-show-database



Reinicia el servidor MySQL para que los cambios surtan efecto:
  • En Linux:
sudo systemctl restart mysql


En Windows, usa el Administrador de Servicios para reiniciar MySQL.


5. Aplicar los cambios

Finalmente, después de realizar todos estos pasos, aplica los cambios ejecutando:


FLUSH PRIVILEGES;

navbuoy 12-10-2024 13:21:39

recuerda tambien que el simbolo "%" equivale a "desde cualquier host o localizacion" por si tienes que operar desde el propio servidor (entonces en vez de % seria localhost o la propia IP del servidor MySQL)


La franja horaria es GMT +2. Ahora son las 07:18:44.

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