Los Sistemas Gestores de Base de Datos Relacionales, cómo Oracle, MySQL o SQL Server y por supuesto PostgreSQL implementan una serie de comandos SQL que permiten al administrador controlar el acceso a los objetos de una Base de Datos.
Estos comando SQL son proporcionados por el lenguaje SQL, más concretamente por el Lenguaje de Control de Datos. Sus siglas son DCL por su nombre en inglés, Data Control Language.
En esta semana aprenderemos dos de los comandos más importantes a la hora de otorgar permisos; los comandos GRANT & REVOKE, con ellos podemos otorgar o revocar privilegios a uno o más roles. Veamos estos comandos con algo de detalle.
Comando GRANT
Este comando tiene dos variantes básicas: uno que otorga membresía en un rol y otra que otorga privilegios sobre un objeto de base de datos. Ésta última es la que vamos a describir.
Los objetos en los cuales podemos otorgar privilegios son los siguientes:
- Tablas
- Columnas
- Vistas
- Tablas externas
- Secuencias
- Base de datos
- Contenedor de datos externos (FDW)
- Servidor externo
- Funciones
- Procedimientos
- Lenguaje de programación
- Esquemas
- Espacio de tablas
Con el comando GRANT le otorgamos privilegios específicos a los usuarios y roles en estos objetos mencionados anteriormente.
Podemos otorgar privilegios en todos los objetos del mismo tipo dentro de un esquema. Esta funcionalidad actualmente en la versión 11 soporta los siguientes objetos: Tablas, Secuencias, Funciones y Procedimientos.
En cuanto a los privilegios que se le otorgan a los roles, nos permite especificar un rol en concreto o incluso a todos los roles existentes y a los nuevos roles que se creen posteriormente.
Comando REVOKE
Con este comando eliminamos los privilegios otorgados o los que ya tenían por defecto los roles. Un rol solo puede revocar los privilegios otorgados directamente por el mismo rol.
Por ejemplo, tenemos el rol “A” que le concede un privilegio al rol “B” con la cláusula WITH GRANT OPTION, y el rol “B” a su vez le otorga el privilegio al rol “C”. En tal caso, el rol “A” no puede anular el privilegio directamente al rol “C”. Una forma de poder revocar el privilegio al rol “C” es revocar la cláusula WITH GRANT OPTION del rol “B” y usar la opción CASCADE para que el privilegio se revoque a su vez del rol “C”.
En la clase de Autorización del curso de seguridad se muestran cómo utilizar estos comandos de SQL para otorgar y revocar los privilegios a los roles en los objetos de una base de datos.
¡Esto ha sido todo lo que tenemos en esta entrada semanal. Esperamos que os haya sido de utilidad y os esperamos la próxima semana!