PostgreSQL PRIVILEGES (Permisos)

Siempre que se crea un objeto de base de datos, se le asigna un propietario, que normalmente es la persona que ejecuta la sentencia create.

Para la mayoría de los tipos de objetos, el estado inicial es que solo el propietario (o superusuario) puede modificar o eliminar el objeto. Para permitir que otros roles o usuarios lo utilicen, se deben establecer permisos para ese usuario.

En PostgreSQL, los permisos se dividen en los siguientes tipos:

  • SELECT
  • INSERT
  • UPDATE
  • DELETE
  • TRUNCATE
  • REFERENCES
  • TRIGGER
  • CREATE
  • CONNECT
  • TEMPORARY
  • EXECUTE
  • USAGE

Según el tipo de objeto (tabla, función, etc.), el permiso especificado se aplica a ese objeto.

Para asignar permisos a un usuario, se puede utilizar el comando GRANT.

Sintaxis de GRANT

La sintaxis básica del comando GRANT es la siguiente:

GRANT privilege [, ...]
ON object [, ...]
TO { PUBLIC | GROUP group | username }
  • privilege − El valor puede ser: SELECT, INSERT, UPDATE, DELETE, RULE, ALL.
  • object − El nombre del objeto al que se concederá acceso. Los objetos posibles son: table, view, sequence.
  • PUBLIC − Representa a todos los usuarios.
  • GROUP group − Concede permisos al grupo de usuarios.
  • username − El nombre de usuario al que se conceden los permisos. PUBLIC es una forma abreviada que representa a todos los usuarios.

Además, podemos usar el comando REVOKE para cancelar permisos. Sintaxis de REVOKE:

REVOKE privilege [, ...]
ON object [, ...]
FROM { PUBLIC | GROUP groupname | username }

Ejemplo

Para entender los permisos, crea un usuario:

ejemplodb=# CREATE USER ejemplo WITH PASSWORD 'password';
CREATE ROLE

El mensaje CREATE ROLE indica que se ha creado un usuario 'ejemplo'.

Ejemplo

Crea la tabla COMPANY (Descargar el archivo SQL de COMPANY), el contenido de los datos es el siguiente:

ejemplodb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Ahora asigna permisos al usuario 'ejemplo':

ejemplodb=# GRANT ALL ON COMPANY TO ejemplo;
GRANT

El mensaje GRANT indica que todos los permisos han sido asignados a 'ejemplo'.

A continuación, revoca los permisos del usuario 'ejemplo':

ejemplodb=# REVOKE ALL ON COMPANY FROM ejemplo;
REVOKE

El mensaje REVOKE indica que los permisos del usuario han sido revocados.

También puedes eliminar el usuario:

ejemplodb=# DROP USER ejemplo;
DROP ROLE

El mensaje DROP ROLE indica que el usuario 'ejemplo' ha sido eliminado de la base de datos.

Otras extensiones