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 una respuesta
Lo siento, debes estar conectado para publicar un comentario.