El lenguaje de control de datos (DCL por sus siglas en inglÈs) es la parte de SQL que se encarga de controlar la seguridad y los permisos de la base de datos. Las directivas de DCL de SQL
son m·s parte de cada uno de los SGBD y tienen una gran cantidad de variaciones. Sus principales caracterÌsticas para la protecciÛn de los datos son:
Maneja b·sicamente tres niveles de seguridad para los usuarios de una base de datos:
La asignación de privilegios en una base de datos se hace por medio de la siguiente instrucción:
GRANT lista_de_privilegios [lista_de_columnas]
ON objeto
TO lista_de_usuarios
[WITH GRANT OPTION];
Los privilegios que se pueden asignar son:
- Para tablas y vistas:
- SELECT
- DELETE
- INSERT [lista_de_columnas]
- UPDATE [lista_de_columnas]
- REFERENCES [lista_de_columnas]
Dominios, character sets, collations, translations
- USAGE
Los objetos pueden ser:
- [TABLE] nombre
- DOMAIN
- CHARACTER SET
- COLLATION
- TRANSLATION
La revocación de privilegios en una base de datos se hace por medio de la siguiente instrucción:
REVOKE [GRANT OPTION FOR] lista_de_privilegios
ON objeto
FROM lista_de_usuarios [RESTRICT | CASCADE]
Una Transacción es un conjunto de instrucciones de SQL que se ejecutan como una unidad, es decir, o todas las instrucciones se ejecutan exitósamente o ninguna de ellas se ejecuta. Lo anterior se logra mediante el uso de las capacidades de "commit" y "rollback". Si todas las instrucciones de la transacción son exitosas, se realiza un "commit" para que dichas instrucciones tomen un efecto permanente en la base de datos. Si ocurre algún error, se ejecuta un "rollback" para cancelar las instrucciones ejecutadas. Cualquier instrucción que se haya ejecutado hasta ese momento dentro de la transacción es deshecha, dejando la base de datos en el mismo estado en el que se encontraba antes de comenzar la transacción. Una transacción comienza con BEGIN o BEGIN TRAN;
Una Transacción termina con COMMIT; o ROLLBACK;
Ejemplos:
START TRANSACTION;
INSERT INTO t SET name = 'William';
INSERT INTO t SET name = 'Wallace';
COMMIT;
START TRANSACTION;
INSERT INTO t SET name = 'Gromit';
INSERT INTO t SET name = 'Wallace';
ERROR 1062 (23000): Duplicate entry 'Wallace' for key 1
ROLLBACK;