Controlar permisos en PostgreSQL; GRANT &
REVOKE
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!