Saltar al contenido

MySql: ¿Otorgar opciones de solo lectura?

Te damos la bienvenida a nuestro sitio, ahora encontrarás la resolución de lo que estás buscando.

Solución:

Si hay algún privilegio único que represente TODAS las operaciones de LECTURA en la base de datos.

Depende de cómo defina “todo leído”.

“Leer” de tablas y vistas es el SELECT privilegio. Si eso es lo que quiere decir con “todo leído”, entonces sí:

GRANT SELECT ON *.* TO 'username'@'host_or_wildcard' IDENTIFIED BY 'password';

Sin embargo, parece que te refieres a la capacidad de “ver” todo, de “mirar pero no tocar”. Entonces, aquí están los otros tipos de lectura que me vienen a la mente:

“Leer” la definición de vistas es la SHOW VIEW privilegio.

“Leer” la lista de consultas actualmente en ejecución de otros usuarios es el PROCESS privilegio.

“Leyendo” el estado de replicación actual es el REPLICATION CLIENT privilegio.

Tenga en cuenta que cualquiera o todos estos pueden exponer más información de la que pretende exponer, según la naturaleza del usuario en cuestión.

Si esa es la lectura que desea hacer, puede combinar cualquiera de esos (o cualquier otro de los privilegios disponibles) en un solo GRANT declaración.

GRANT SELECT, SHOW VIEW, PROCESS, REPLICATION CLIENT ON *.* TO ...

Sin embargo, no hay un solo privilegio que otorgue algún subconjunto de otros privilegios, que es lo que parece que está preguntando.

Si está haciendo las cosas manualmente y está buscando una manera más fácil de hacerlo sin necesidad de recordar la concesión exacta que normalmente otorga a una determinada clase de usuario, puede buscar la declaración para regenerar las concesiones de un usuario comparable y cambiarla. para crear un nuevo usuario con privilegios similares:

mysql> SHOW GRANTS FOR 'not_leet'@'localhost';
+------------------------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                                      |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, REPLICATION CLIENT ON *.* TO 'not_leet'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' |
+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Cambiar ‘not_leet’ y ‘localhost’ para que coincida con el nuevo usuario que desea agregar, junto con la contraseña, dará como resultado un GRANT declaración para crear un nuevo usuario.

Por supuesto, si desea una sola operación para configurar y otorgar el conjunto limitado de privilegios a los usuarios, y tal vez eliminar cualquier privilegio inmerecido, puede hacerlo creando un procedimiento almacenado que encapsule todo lo que desea hacer. Dentro del cuerpo del procedimiento, construiría el GRANT instrucción con SQL dinámico y/o manipular directamente las propias tablas de concesión.

En esta pregunta reciente sobre los administradores de bases de datos, el autor quería la capacidad de que un usuario sin privilegios modifique a otros usuarios, lo cual, por supuesto, no es algo que se pueda hacer normalmente: un usuario que puede modificar a otros usuarios es, por definición, no un usuario sin privilegios, sin embargo, los procedimientos almacenados proporcionaron una buena solución en ese caso, porque se ejecutan con el contexto de seguridad de su DEFINER usuario, permitiendo a cualquier persona con EXECUTE privilegio en el procedimiento para asumir temporalmente privilegios escalados para permitirles hacer las cosas específicas que logra el procedimiento.

GRANT SELECT ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Esto creará un usuario con SELECT Privilegio para todas las bases de datos, incluidas las Vistas.

Varios permisos que puede otorgar a un usuario son

ALL PRIVILEGES- This would allow a MySQL user all access to a designated database (or if no database is selected, across the system)
CREATE- allows them to create new tables or databases
DROP- allows them to them to delete tables or databases
DELETE- allows them to delete rows from tables
INSERT- allows them to insert rows into tables
SELECT- allows them to use the Select command to read through databases
UPDATE- allow them to update table rows
GRANT OPTION- allows them to grant or remove other users' privileges

Para proporcionar un permiso a un usuario específico, puede utilizar este marco:

GRANT [type of permission] ON [database name].[table name] TO ‘[username]’@'localhost’;

Encontré este artículo muy útil.

Comentarios y valoraciones

Puedes añadir valor a nuestro contenido asistiendo con tu experiencia en las notas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *