Tengo un usuario al que quiero otorgarle todos los permisos READ en un esquema de base de datos.
Una forma es esta:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
¿Hay alguna forma de agrupar todas las operaciones de lectura en concesión?
SHOW VIEW
no esSHOW_VIEW
, pero no es necesario que se lo otorgue a un usuario a menos que desee que pueda hacerloSHOW CREATE VIEW
en las vistas ... pueden seleccionar de las vistas con el únicoSELECT
privilegio. ¿Qué quiere decir con "agrupar todas las operaciones de lectura en concesión"?Respuestas:
Depende de cómo defina "todo leído".
"Leer" de tablas y vistas es un
SELECT
privilegio. Si eso es lo que quiere decir con "todos leídos", entonces sí: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 un
SHOW VIEW
privilegio."Leer" la lista de consultas en ejecución por otros usuarios es el
PROCESS
privilegio."Leer" el estado de replicación actual es el
REPLICATION CLIENT
privilegio.Tenga en cuenta que cualquiera o todos estos podrían 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 una sola
GRANT
declaración.Sin embargo, no existe un privilegio único que otorgue algún subconjunto de otros privilegios, que es lo que parece que estás 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:
Cambiar 'not_leet' y 'localhost' para que coincidan con el nuevo usuario que desea agregar, junto con la contraseña, dará como resultado una
GRANT
declaración reutilizable para crear un nuevo usuario.O, si desea que una sola operación configure y otorgue el conjunto limitado de privilegios a los usuarios, y tal vez elimine cualquier privilegio no merecido, puede hacerlo creando un procedimiento almacenado que encapsule todo lo que desea hacer. Dentro del cuerpo del procedimiento, construiría la
GRANT
declaración con SQL dinámico y / o manipularía directamente las propias tablas de concesión.En esta pregunta reciente sobre administradores de bases de datos , el autor quería la capacidad de un usuario sin privilegios de modificar a otros usuarios, lo cual, por supuesto, no es algo que se pueda hacer normalmente; un usuario que puede modificar a otros usuarios, prácticamente 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, lo que permite a cualquier persona conEXECUTE
privilegios en el procedimiento asumir temporalmente privilegios escalados para permitirles hacer las cosas específicas que procedimiento logra.fuente
Esto creará un usuario con
SELECT
privilegios para todas las bases de datos, incluidas las Vistas.fuente
Varios permisos que puede otorgar a un usuario son
Para otorgar un permiso a un usuario específico, puede usar este marco:
Encontré este artículo muy útil
fuente
Una guía paso a paso que encontré aquí .
Para crear una cuenta de usuario de base de datos de solo lectura para MySQL
En un indicador de UNIX, ejecute el programa de línea de comandos MySQL e inicie sesión como administrador escribiendo el siguiente comando:
Escriba la contraseña de la cuenta raíz. En el indicador de mysql, realice uno de los siguientes pasos:
Para dar acceso al usuario a la base de datos desde cualquier host, escriba el siguiente comando:
Si el recopilador se instalará en el mismo host que la base de datos, escriba el siguiente comando:
Este comando le da al usuario acceso de solo lectura a la base de datos solo desde el host local. Si conoce el nombre de host o la dirección IP del host en el que se instalará el recopilador, escriba el siguiente comando:
El nombre de host debe poder resolverse mediante DNS o mediante el archivo de hosts local. En el indicador de mysql, escriba el siguiente comando:
Escriba
quit
.La siguiente es una lista de comandos de ejemplo y mensajes de confirmación:
fuente
Incluso el usuario tiene una respuesta y @Michael - sqlbot ha cubierto la mayoría de los puntos muy bien en su publicación, pero falta un punto, así que solo trato de cubrirlo.
Si desea otorgar permiso de lectura a un usuario simple (no un tipo de administrador):
Nota: Aquí se requiere EJECUTAR, para que el usuario pueda leer datos si hay un procedimiento almacenado que produce un informe (tiene pocas sentencias de selección).
Reemplace localhost con una IP específica desde la cual el usuario se conectará a la base de datos.
Los permisos de lectura adicionales son-
fuente
Si desea que la vista sea de solo lectura después de otorgar el permiso de lectura, puede usar ALGORITHM = TEMPTABLE en la definición de DDL de su vista.
fuente
Nota para MySQL 8 es diferente
Debe hacerlo en dos pasos:
fuente