SQL - DCL
Control de acceso a la BD
Bases de datos – 1º DAW
I.E.S. Gregorio Prieto – Valdepeñas
Curso 2024/2025
DCL
El DCL (Data Control Language) o Lenguaje de Control de Datos es la parte de
SQL dedicada a controlar el acceso a los datos de una base de datos.
Las sentencias DCL más utilizadas son las siguientes:
• GRANT: se utiliza para asignar permisos a un usuario o rol.
• REVOKE: se utiliza para eliminar los permisos que se han asignado a un
usuario o rol.
01 Gestión de usuarios
Creación de usuarios
La sintaxis simplificada para crear un usuario en MySQL es la siguiente:
CREATE USER [IF NOT EXISTS]
user [auth_option] [, user [auth_option]] ...
DEFAULT ROLE role [, role ] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH resource_option [resource_option] ...]
[password_option | lock_option] ...
[COMMENT 'comment_string' | ATTRIBUTE 'json_object’];
Creación de usuarios
EJEMPLO
CREATE USER 'nombre_usuario'@'localhost' IDENTIFIED BY 'contraseña’;
• Se reemplaza nombre_usuario y contraseña por los datos del nuevo usuario
que se desea crear.
• Una vez creado el usuario hay que asignarle permisos para que pueda
acceder a la/s base/s de datos que se necesite en cada momento.
Documentación oficial de CREATE USER en MySQL
Modificación de usuarios
La sintaxis simplificada para modificar un usuario en MySQL es la siguiente:
ALTER USER [IF NOT EXISTS]
user [auth_option] [, user [auth_option]] ...
DEFAULT ROLE role [, role ] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH resource_option [resource_option] ...]
[password_option | lock_option] ...
[COMMENT 'comment_string' | ATTRIBUTE 'json_object']
Modificación de usuarios
EJEMPLO
ALTER USER 'nombre_usuario'@'localhost' IDENTIFIED BY 'contraseña’;
• Se reemplaza nombre_usuario y contraseña por los nuevos datos que se
desean modificar del usuario.
Documentación oficial de ALTER USER en MySQL
Eliminación de usuarios
La sintaxis simplificada para crear un usuario en MySQL es la siguiente:
DROP USER [IF EXISTS] user [, user] ... ;
EJEMPLO
DROP USER IF EXISTS 'nombre_usuario'@'localhost’;
Documentación oficial de DROP USER en MySQL
02 Gestión de permisos
Gestión de permisos
• Ningún usuario puede llevar a cabo una operación si antes no se le ha
concedido el permiso para ello.
• Para poder acceder a los objetos de una base de datos necesitas tener
privilegios (permisos). Éstos se pueden agrupar formando roles, lo que
simplificará la administración.
• Los roles pueden activarse, desactivarse o protegerse con una clave.
• Mediante los roles podemos gestionar los comandos que pueden utilizar los
usuarios.
• Un permiso se puede asignar a un usuario o a un rol.
Gestión de permisos
Se pueden otorgar los siguientes permisos:
• ALL PRIVILEGES: permite a un usuario de MySQL acceder a todas las bases
de datos asignadas en el sistema.
• CREATE: permite crear nuevas tablas o bases de datos.
• DROP: permite eliminar tablas o bases de datos
• DELETE: permite eliminar registros de tablas.
• INSERT: permite insertar registros en tablas.
• SELECT: permite leer registros en las tablas.
• UPDATE: permite actualizar registros seleccionados en tablas.
• GRANT OPTION: permite asignar privilegios a otros usuarios.
Asignación de permisos
La sintaxis simplificada para asignar permisos a un usuario en MySQL:
GRANT [permiso] ON [nombre_base_de_datos].[nombre_tabla] TO
'nombre_usuario'@'localhost’;
EJEMPLO:
GRANT ALL PRIVILEGES ON *.* TO 'nombre_usuario'@'localhost’;
En este comando, los asteriscos indican que estamos aplicando el permiso
ALL PRIVILEGES al usuario nombre_usuario para todas las tablas de cada una
de las bases de datos.
Asignación de permisos
Después de asignar los permisos con el comando anterior habrá que ejecutar el
siguiente comando para refrescar todos los privilegios a los usuarios:
FLUSH PRIVILEGES;
Documentación oficial de GRANT en MySQL
Revocación de permisos
La sintaxis simplificada para eliminar permisos a un usuario en MySQL es:
REVOKE [permiso] ON [nombre_base_de_datos].[nombre_tabla] FROM
'nombre_usuario'@'localhost’;
Documentación oficial de REVOKE en MySQL
Consulta de usuarios
03 y permisos
Consulta de usuarios
• Los usuarios de MySQL se almacenan en la tabla [Link]. La clave
primaria de esta tabla está formada por los valores user y host, de modo que
cada fila vendrá identificada por un nombre de usuario y el host desde el que
puede conectarse.
La siguiente consulta nos devuelve el listado de usuarios que tenemos en
MySQL y desde qué host pueden conectarse:
SELECT user,host FROM [Link];
Consulta de usuarios
• El usuario root@localhost es un usuario que sólo puede conectarse desde la
máquina local y el usuario root@'%' es un usuario que se puede conectar
desde una máquina remota.
También se pueden consultar qué permisos específicos tiene un determinado
usuario. La siguiente consulta devuelve los permisos que tiene el usuario root:
SHOW GRANTS FOR root@localhost;