Declaración GRANT de MySQL
La sentencia GRANT en MySQL se utiliza para asignar privilegios a las cuentas de usuario de MySQL. Define qué operaciones pueden realizar los usuarios en los objetos de la base de datos, como tablas y vistas, garantizando un acceso controlado a la base de datos.
Utilización
La sentencia GRANT se emplea cuando necesitas dar permisos a usuarios concretos para ejecutar determinados tipos de operaciones SQL. Ayuda a gestionar los derechos de los usuarios de forma eficaz y segura.
GRANT privileges
ON database_name.table_name
TO 'user'@'host'
[IDENTIFIED BY 'password'];
En esta sintaxis, privileges son los permisos concedidos, database_name.table_name especifica el ámbito, user es el nombre de usuario de MySQL y host es la ubicación desde la que se conecta el usuario. Ten en cuenta que la cláusula IDENTIFIED BY 'password' sólo es aplicable al crear un nuevo usuario. En MySQL 8.0 y versiones posteriores, normalmente se recomienda utilizar CREATE USER seguido de GRANT para la creación de usuarios y la asignación de privilegios.
Ejemplos
1. Concesión de privilegios básicos
GRANT SELECT, INSERT
ON mydb.mytable
TO 'user1'@'localhost';
Este ejemplo concede los privilegios SELECT y INSERT en mydb.mytable a user1 conectándose desde localhost.
2. Conceder todos los privilegios en una base de datos
GRANT ALL PRIVILEGES
ON mydb.*
TO 'user2'@'192.168.1.1';
Aquí, a user2 se le conceden todos los privilegios sobre toda la base de datos mydb desde el host 192.168.1.1.
3. Conceder privilegios con contraseña
GRANT SELECT, UPDATE
ON mydb.mytable
TO 'user3'@'%' IDENTIFIED BY 'securepassword';
Esta sentencia concede privilegios a SELECT y UPDATE en mydb.mytable a user3 desde cualquier host (%), estableciendo una contraseña especificada. Utilizar % permite conexiones desde cualquier host, lo que podría tener implicaciones de seguridad.
Información adicional
Privilegios globales
Para conceder privilegios globales que se apliquen a todas las bases de datos, utiliza la sintaxis ON *.*. Concede globalmente los privilegios especificados.
Revocación de privilegios
Para revocar privilegios, utiliza la declaración REVOKE:
REVOKE privileges
ON database_name.table_name
FROM 'user'@'host';
Esto elimina los privilegios especificados del usuario.
Consejos y buenas prácticas
- Limita los privilegios. Concede sólo los privilegios necesarios a los usuarios para minimizar los riesgos de seguridad.
- Utiliza nombres de host específicos. Siempre que sea posible, especifica nombres de host o direcciones IP para restringir el acceso, en lugar de utilizar
%para todos los hosts. - Gestiona las contraseñas de forma segura. Utiliza siempre contraseñas fuertes y únicas cuando crees cuentas de usuario.
- Revisa periódicamente los permisos. Audita periódicamente y revoca los privilegios innecesarios para mantener una seguridad óptima. Utiliza la tabla
mysql.usero las vistas del esquema de información relevante para revisar los privilegios de usuario existentes. - Cambios en los documentos. Lleva un registro de todas las declaraciones
GRANTemitidas para facilitar el seguimiento de los permisos.