Diferencia entre revisiones de «Mysql Gestión de permisos»
Ir a la navegación
Ir a la búsqueda
(→GRANT) |
|||
| Línea 43: | Línea 43: | ||
GRANT SELECT,UPDATE ON *.* TO 'user1'@'localhost' | GRANT SELECT,UPDATE ON *.* TO 'user1'@'localhost' | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| − | : <u>Nota:</u> Los cambios no tienen efecto hasta que se reinicie el servidor | + | : <u>Nota:</u> Los cambios no tienen efecto hasta que se reinicie el servidor o se ejecute la orden SQL: flush privileges; |
[[Imagen:Mysql_grantrevoke_4.jpg|400px|center]] | [[Imagen:Mysql_grantrevoke_4.jpg|400px|center]] | ||
| Línea 83: | Línea 83: | ||
select User,Host, Create_user_priv,Create_tablespace_priv from mysql.user; | select User,Host, Create_user_priv,Create_tablespace_priv from mysql.user; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| − | : <u>Nota:</u> Los cambios no tienen efecto hasta que se reinicie el servidor | + | : <u>Nota:</u> Los cambios no tienen efecto hasta que se reinicie el servidor o se ejecute la orden SQL: flush privileges; |
=Consideraciones finales= | =Consideraciones finales= | ||
Revisión del 16:14 23 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.
GRANT
- Esta es la orden SQL que concede permisos.
- Podemos consultar su sintaxis completa en este enlace.
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: Los cambios no tienen efecto hasta que se reinicie el servidor o se ejecute la orden SQL: flush privileges;
- 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.
- Podemos otorgar varios permisos en una única operación, separándolos con comas:
1 GRANT SELECT,UPDATE ON *.* TO 'user1'@'localhost'
- Nota: Los cambios no tienen efecto hasta que se reinicie el servidor o se ejecute la orden SQL: flush privileges;
- 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.
- Una vez creado un tablespace podemos crear una tabla o varias tablas y hacer que se guarde en ese tablespace.
- Un ejemplo:
- 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:
, CREATE USER, FILE, 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: Los cambios no tienen efecto hasta que se reinicie el servidor o se ejecute la orden SQL: flush privileges;
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).