sql >> Base de Datos >  >> RDS >> Mysql

MySql:¿Otorgar opciones de solo lectura?

Depende de cómo definas "todo leído".

"Leer" de tablas y vistas es 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:

"Leyendo" la definición de vistas es SHOW VIEW privilegio.

"Leer" la lista de consultas actualmente en ejecución por parte 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 busca 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 reutilizable 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 los privilegios no merecidos, 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 administradores de bases de datos , el cartel 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, por definición, no es 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 cualquiera con EXECUTE privilegio en el procedimiento para asumir temporalmente privilegios escalados para permitirles hacer las cosas específicas que logra el procedimiento.