Diferencia entre revisiones de «Mysql Gestión de permisos»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 74: Línea 74:
 
:* [https://dev.mysql.com/doc/refman/5.7/en/general-tablespaces.html Enlace].
 
:* [https://dev.mysql.com/doc/refman/5.7/en/general-tablespaces.html Enlace].
 
   
 
   
−
, CREATE USER, FILE, PROCESS, RELOAD, REPLICATION CLIENT,
+
 
 +
<br />
 +
:* [https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html#priv_execute EXECUTE]: El usuario tiene permiso para ejecutar procedimientos y funciones.
 +
 +
 
 +
:* [https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html#priv_file FILE]: Quien tenga otorgado este privilegio puede leer y escribir en ficheros del servidor utilizando las intrucciones [https://dev.mysql.com/doc/refman/5.7/en/load-data.html LOAD DATA INFILE], [https://dev.mysql.com/doc/refman/5.7/en/select-into.html SELECT INTO ...OUTFILE] y la función [https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_load-file LOAD_FILE()].
 +
 
 +
 
 +
, CREATE USER, , PROCESS, RELOAD, REPLICATION CLIENT,
 
REPLICATION SLAVE, SHOW DATABASES, SHUTDOWN, and SUPER
 
REPLICATION SLAVE, SHOW DATABASES, SHUTDOWN, and SUPER
  

Revisión del 17:38 28 nov 2017

Introdución

  • Las dos órdenes SQL que nos van a permitir establecer y quitar permisos son: GRANT y REVOKE.
  • Cada vez que ejecutemos una de estas órdenes será necesasrio ejecutar la orden FLUSH PRIVILEGES para que los cambios tengan efecto.


  • Los permisos que vamos a otorgar estarán en uno de los niveles de seguridad que vimos en un punto anterior y que por lo tanto se traducirá en la inserción, modificación y borrado de filas en las tablas: user,db,tables_priv y columns_priv.


  • Cuando se crea un usuario el único permiso que tiene es el de USAGE que le da derecho a conectarse a Mysql.
Mysql grantrevoke 1.jpg



GRANT

  • Esta es la orden SQL que concede permisos.

Permisos a nivel global

  • Para que otorgar un permiso a este nivel, hay que indicar: ON *.* en la cláusula grant.
  • La sintaxis básica para dar permisos a nivel del gestor Mysql, incluyendo los permisos administrativos sería:
1 GRANT SELECT ON *.* TO 'user1'@'localhost'
Nota: Si el usuario ya está conectado cuando se realiza el cambio de permisos, no serán aplicados. El usuario necesita cerrar la conexión y volver a abrirla.
En este ejemplo, estaríamos dando permiso de selección sobre todas las tablas de todas las bases de datos, al usuario 'user1' conectado desde host 'localhost'.
Recordar que esta sentencia se traducirá en una orden INSERT sobre la tabla mysql.user.
Mysql grantrevoke 3.jpg


  • Podemos otorgar varios permisos en una única operación, separándolos con comas:
1 GRANT SELECT,UPDATE ON *.* TO 'user1'@'localhost'
Nota: Si el usuario ya está conectado cuando se realiza el cambio de permisos, no serán aplicados. El usuario necesita cerrar la conexión y volver a abrirla.
Mysql grantrevoke 4.jpg


  • Como ya comentamos en un punto anterior, existen ciertos permisos que permiten administrar el gestor Mysql y que no tienen 'otros niveles' como sucede con el permiso SELECT por ejemplo (podemos tener un select a nivel de base de datos, a nivel de tabla, a nivel de columna de una tabla).
Nota: Lógicamente para que un usuario pueda otorgar estos permisos, debe de tener permiso para poder otorgarlo. Esto lo veremos posteriormente, pero por ahora indicar que el usuario que ejecuta las órdenes que otorgan los permisos es 'root'.


Estos permisos son los siguientes:
  • CREATE TABLESPACE: El usuario tiene permiso para crear (CREATE), borrar (DROP) o modificar (ALTER) 'tablespace'. Un 'tablespace' es una parte de disco donde podemos guardar la información de una o varias tablas. La principal ventaja es que nos va a permitir guardar los datos de una tabla 'fuera' del directorio de datos de Mysql. Existen otras funcionalidades que se pueden consultar en el enlace anterior.
Un ejemplo:
1 GRANT CREATE TABLESPACE ON *.* TO 'user1'@'localhost'
Por defecto se crea en el mismo director que donde Mysql guarda los datos, indicado por la variable del sistema datadir.
Mysql grantrevoke 5.jpg


Una vez creado un tablespace podemos crear una tabla o varias tablas y hacer que se guarde en ese tablespace.
Un ejemplo:
Mysql grantrevoke 6.jpg
En este ejemplo estamos creando un tablespace en el directorio '/datos/', creado previamente y con permisos por parte de apparmor (tenéis que darle los mismos permisos que los de datos) y posteriormente creamos una tabla en ese tablespace, comprobando como después de añadir dos filas, físicamente aparece el 'archivo ibd' en el directorio.
Más información:



  • EXECUTE: El usuario tiene permiso para ejecutar procedimientos y funciones.



, CREATE USER, , PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHOW DATABASES, SHUTDOWN, and SUPER


  • Veamos un ejemplo:
1 GRANT CREATE USER,CREATE TABLESPACE ON *.* TO 'user1'@'localhost';
2 select User,Host, Create_user_priv,Create_tablespace_priv from mysql.user;
Nota: Si el usuario ya está conectado cuando se realiza el cambio de permisos, no serán aplicados. El usuario necesita cerrar la conexión y volver a abrirla.

Consideraciones finales

  • No dejar el permiso file_priv en ninguna cuenta de Mysql.
Es uno de los más peligrosos.








-- Ángel D. Fernández González -- (2017).