Permisos en MySQL

Dar permisos

Para poder acceder a los objetos de una base de datos se necesitan tener privilegios (permisos).

  • Los privilegios sobre objetos permiten acceder y realizar cambios en las tablas  de los esquemas de la base de datos. Por ejemplo, INSERT, SELECT, UPDATE y DELETE, son privilegios sobre objetos.
  • Los privilegios de sistema son los que dan derecho a ejecutar un tipo de comando SQL o a realizar alguna acción sobre objetos de un  tipo especificado, por ejemplo, CREATE USER, ALTER, CREATE o CREATE VIEW.

Un privilegio o permiso se otorga con el comando GRANT (conceder) una vez creado el usuario con CREATE USER

Nota. En versiones de MySQL anteriores a la versión 8.x, el comando GRANT también permitía crear a un usuario en el momento de concederle permisos.

GRANT {permiso[(listacolumnas)] [, permiso[(listacolumnas)]...|ALL]}

ON [tipoobjeto]{nombretabla | *.* | basedatos.*}

TO {usuario1 [IDENTIFIED BY [PASSWORD] contraseña} [, usuario2 [IDENTIFIED BY [PASSWORD] contraseña] ... }

[WITH GRANT OPTION];

donde:

  • permiso: privilegio sobre objeto o sistema.
  • listacolumnas: columnas sobre las que se concede el permiso.
  • tipoobjeto =TABLE  | FUNCTION  | PROCEDURE
  • ON especifica el objeto sobre el que se conceden los privilegios.
  • TO señala a los usuarios  a los que se conceden privilegios.
  • ALL concede todos los privilegios sobre el objeto especificado.
  • usuarioN: (nombreUsuario@ubicación) usuario al que se le concede los permisos. Se especifica indicando un nombre, luego @ y después la ubicación de acceso. La ubicación % hace refercnia a cualquier equipo, ‘localhost’ al equipo local, pero también se puede especificar la dirección IP o nombre del equipo dentro de una red, entre otros.
  • contraseña: password del usuario.
  • WITH GRANT OPTION: permite al usuario otorgar permisos a otros usuarios, para ello, el usuario debe tener esos permisos sobre los objetos correspondientes.

Con GRANT también se pueden asignar permisos a Roles. Los Roles están permitidos en MySQl desde la versión 8.x.

En el siguiente ejemplo el usuario root ha accedido a la base de datos y ejecuta los siguientes comandos:

$ sudo mysql -u root -p
  • Crear el usuario pepe
CREATE USER 'pepe'@'localhost' IDENTIFIED BY 'malaga';
  • oncede al usuario pepe con conexión desde el equipo local (pepe@localhost) permiso para insertar datos en la tabla alumnos de la base de datos institutoDB:
GRANT INSERT ON institutoDB.alumnos TO pepe@localhost;
  • Concede todos los privilegios sobre la base de datos institutoDB a la usuaria alba con conexión desde el equipo local (alba@localhost)
GRANT ALL ON institutoDB.* TO alba@localhost;
  • Crea el usuario admin con la password malaga y concédele todos los permisos para gestionar todas las bases de datos
mysql> CREATE USER 'admin'@'localhost' IDENTIFIED BY 'malaga';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

Quitar permisos

Con el comando REVOKE se retiran los privilegios:

  • Sobre objetos:
REVOKE {permiso[(listacolumnas)] [, permiso]...|ALL}

ON [tipoobjeto] {nombretabla|*.*|basedatos.*}

FROM {usuario1} [,usuario2] ...;

root va a quitar el permiso de consultar y de actualizar sobre la tabla usuarios a olga@localhost:

REVOKE SELECT, UPDATE ON usuarios FROM olga@localhost;
  • sobre usuarios

y va a quitarle el permiso de eliminar usuarios, a juan cuando se conecta desde cualquier ubicación:

REVOKE DROP USER FROM juan@'%';

Más información:

Asignar permisos a usuarios MySQL

MySQL Manual: Database Administration Statements

Privileges Provided by MySQL

Using Roles

phpMyAdmin

Otra forma de manejar los permisos es usando phpMyAdmin:

Acceso a un servidor MySQL remoto

¿Cómo permitir al usuario alumno conectarse a un servidor MySQL remoto y permitirle ver el contenido de las tablas en la bases de datos institutoDB?

Deja un comentario