HDP115

Comandos DCL en SQL

Aprende sobre los comandos de Data Control Language (DCL) en SQL para gestionar los permisos y el control de acceso a la base de datos.

CE

Cristian Escalante

Última actualización: 10 de mayo de 2025

sql
programación
desarrollo

Comandos DCL en SQL

El Lenguaje de Control de Datos (DCL - Data Control Language) es un subconjunto de SQL utilizado para controlar el acceso a los datos almacenados en la base de datos. Los comandos DCL se utilizan principalmente para gestionar los permisos y privilegios de los usuarios, garantizando la seguridad y la integridad de los datos.

GRANT

El comando GRANT se utiliza para otorgar permisos o privilegios a usuarios o roles en la base de datos.

Sintaxis básica

GRANT tipo_privilegio [(columna)]
ON objeto
TO usuario [WITH GRANT OPTION];
  • tipo_privilegio: El tipo de operación que se permite (SELECT, INSERT, UPDATE, DELETE, EXECUTE, etc.).
  • columna: Opcional, especifica una o más columnas a las que aplica el privilegio.
  • objeto: La tabla, vista, procedimiento almacenado u otro objeto de la base de datos.
  • usuario: El usuario o rol al que se le otorga el privilegio.
  • WITH GRANT OPTION: Opcional, permite al usuario otorgar el mismo privilegio a otros usuarios.

Otorgar privilegios específicos

-- Otorgar permiso de selección en una tabla
GRANT SELECT ON empleados TO usuario1;

-- Otorgar permiso de inserción y actualización
GRANT INSERT, UPDATE ON clientes TO usuario2;

-- Otorgar permisos de actualización solo para columnas específicas
GRANT UPDATE (nombre, apellido) ON empleados TO usuario3;

Otorgar todos los privilegios

-- Otorgar todos los privilegios en una tabla
GRANT ALL PRIVILEGES ON productos TO administrador;

-- Otorgar todos los privilegios en todas las tablas de un esquema
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO administrador;

Otorgar con la opción de conceder

-- Permitir que el usuario pueda otorgar los mismos permisos a otros
GRANT SELECT ON ventas TO gerente WITH GRANT OPTION;

REVOKE

El comando REVOKE se utiliza para quitar permisos o privilegios previamente otorgados a usuarios o roles.

Sintaxis básica

REVOKE [GRANT OPTION FOR] tipo_privilegio [(columna)]
ON objeto
FROM usuario;

Revocar privilegios específicos

-- Revocar permiso de selección en una tabla
REVOKE SELECT ON empleados FROM usuario1;

-- Revocar múltiples privilegios
REVOKE INSERT, UPDATE ON clientes FROM usuario2;

-- Revocar privilegios específicos de columnas
REVOKE UPDATE (salario) ON empleados FROM usuario3;

Revocar todos los privilegios

-- Revocar todos los privilegios en una tabla
REVOKE ALL PRIVILEGES ON productos FROM usuario4;

-- Revocar todos los privilegios en todas las tablas de un esquema
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM usuario4;

Revocar la opción de conceder

-- Revocar solo la capacidad de otorgar permisos, pero mantener el privilegio
REVOKE GRANT OPTION FOR SELECT ON ventas FROM gerente;

Implementación del control de acceso

Creación de usuarios y roles

Aunque no son comandos DCL estrictos, la creación de usuarios y roles es fundamental para el control de acceso:

-- Crear un nuevo usuario (PostgreSQL)
CREATE USER empleado WITH PASSWORD 'contraseña';

-- Crear un rol (PostgreSQL/Oracle)
CREATE ROLE admin;

-- Asignar un rol a un usuario (PostgreSQL)
GRANT admin TO empleado;

Esquema de privilegios por niveles

Un enfoque común es tener diferentes niveles de acceso según el rol del usuario:

-- Crear roles con diferentes niveles de acceso
CREATE ROLE lector;
CREATE ROLE editor;
CREATE ROLE administrador;

-- Otorgar privilegios a cada rol
GRANT SELECT ON ALL TABLES IN SCHEMA public TO lector;

GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO editor;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO administrador;

-- Asignar usuarios a roles
GRANT lector TO usuario1;
GRANT editor TO usuario2;
GRANT administrador TO usuario3;

Ejemplos prácticos

Sistema de gestión de biblioteca

-- Crear usuarios para diferentes roles
CREATE USER bibliotecario WITH PASSWORD 'bib123';
CREATE USER admin_biblioteca WITH PASSWORD 'admin456';
CREATE USER visitante WITH PASSWORD 'visit789';

-- Crear roles
CREATE ROLE gestion_libros;
CREATE ROLE gestion_usuarios;
CREATE ROLE solo_lectura;

-- Asignar privilegios a los roles
-- Rol para gestión de libros
GRANT SELECT, INSERT, UPDATE ON libros, autores, editoriales TO gestion_libros;
GRANT SELECT ON usuarios, prestamos TO gestion_libros;

-- Rol para gestión de usuarios y préstamos
GRANT SELECT, INSERT, UPDATE, DELETE ON usuarios, prestamos TO gestion_usuarios;
GRANT SELECT ON libros, autores, editoriales TO gestion_usuarios;

-- Rol de solo lectura
GRANT SELECT ON libros, autores, editoriales, prestamos TO solo_lectura;

-- Asignar roles a usuarios
GRANT gestion_libros TO bibliotecario;
GRANT gestion_usuarios, gestion_libros TO admin_biblioteca;
GRANT solo_lectura TO visitante;

-- Revocar privilegios específicos
REVOKE DELETE ON prestamos FROM gestion_usuarios;

-- Permitir a admin otorgar privilegios
GRANT gestion_libros TO admin_biblioteca WITH GRANT OPTION;

Consideraciones de seguridad

  1. Principio de privilegio mínimo: Otorgar solo los permisos necesarios para realizar las tareas requeridas.
  2. Uso de roles: Utilizar roles para agrupar privilegios y facilitar la gestión.
  3. Auditoría: Implementar mecanismos de auditoría para monitorear el acceso y los cambios en los permisos.
  4. Revisión periódica: Revisar regularmente los permisos otorgados para identificar y revocar privilegios innecesarios.
  5. Evitar WITH GRANT OPTION: Limitar el uso de esta opción para mantener un control centralizado sobre los permisos.
  6. Seguridad a nivel de columna: Utilizar permisos a nivel de columna para datos sensibles cuando sea posible.

Características específicas por SGBD

MySQL

-- Crear usuario y otorgar privilegios en MySQL
CREATE USER 'usuario'@'localhost' IDENTIFIED BY 'contraseña';
GRANT SELECT, INSERT ON base_datos.tabla TO 'usuario'@'localhost';
FLUSH PRIVILEGES;

PostgreSQL

-- Crear usuario y otorgar privilegios en PostgreSQL
CREATE USER usuario WITH PASSWORD 'contraseña';
GRANT SELECT, INSERT ON tabla TO usuario;

SQL Server

-- Crear login y usuario en SQL Server
CREATE LOGIN usuario WITH PASSWORD = 'contraseña';
CREATE USER usuario FOR LOGIN usuario;
GRANT SELECT, INSERT ON dbo.tabla TO usuario;

Oracle

-- Crear usuario y otorgar privilegios en Oracle
CREATE USER usuario IDENTIFIED BY contraseña;
GRANT CONNECT TO usuario;
GRANT SELECT, INSERT ON schema.tabla TO usuario;
Propiedades ACID
Comprende las propiedades ACID (Atomicidad, Consistencia, Ai...
Referencias
Microsoft. SQL Server Security - Authorization and Permissions. https://docs.microsoft.com/en-us/sql/relational-databases/security/permissions-database-engine
PostgreSQL Documentation. PostgreSQL Grant. https://www.postgresql.org/docs/current/sql-grant.html

Conceptos Básicos de HTML

Aprende los conceptos básicos de HTML

Conceptos Básicos de CSS

Aprende los conceptos básicos de CSS

Conceptos Básicos de JavaScript

Aprende los conceptos básicos de JavaScript

Conceptos Básicos de GIT

Aprende los conceptos básicos de GIT

Conceptos Básicos de Python

Aprende los conceptos básicos de Python

Conceptos Básicos de UML

Aprende los conceptos básicos de UML

Refuerzo Academico de Herramientas de Productividad 2025