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.user
o 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
GRANT
emitidas para facilitar el seguimiento de los permisos.