PostgreSQL - PRIVILEGIOS

Siempre que se crea un objeto en una base de datos, se le asigna un propietario. El propietario suele ser quien ejecutó la declaración de creación. Para la mayoría de los tipos de objetos, el estado inicial es que solo el propietario (o un superusuario) puede modificar o eliminar el objeto. Para permitir que otros roles o usuarios lo usen, se deben otorgar privilegios o permisos.

Los diferentes tipos de privilegios en PostgreSQL son:

  • SELECT,
  • INSERT,
  • UPDATE,
  • DELETE,
  • TRUNCATE,
  • REFERENCES,
  • TRIGGER,
  • CREATE,
  • CONNECT,
  • TEMPORARY,
  • EJECUTAR, y
  • USAGE

Dependiendo del tipo de objeto (tabla, función, etc.), se aplican privilegios al objeto. Para asignar privilegios a los usuarios, se utiliza 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 - los valores pueden ser: SELECT, INSERT, UPDATE, DELETE, RULE, ALL.

  • object- El nombre de un objeto al que conceder acceso. Los posibles objetos son: tabla, vista, secuencia

  • PUBLIC - Un formulario corto que representa a todos los usuarios.

  • GRUPO group - Un grupo al que conceder privilegios.

  • username- El nombre de un usuario al que conceder privilegios. PUBLIC es una forma corta que representa a todos los usuarios.

Los privilegios se pueden revocar mediante el comando REVOKE.

Sintaxis de REVOKE

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

REVOKE privilege [, ...]
ON object [, ...]
FROM { PUBLIC | GROUP groupname | username }
  • privilege - los valores pueden ser: SELECT, INSERT, UPDATE, DELETE, RULE, ALL.

  • object- El nombre de un objeto al que conceder acceso. Los posibles objetos son: tabla, vista, secuencia

  • PUBLIC - Un formulario corto que representa a todos los usuarios.

  • GRUPO group - Un grupo al que conceder privilegios.

  • username- El nombre de un usuario al que conceder privilegios. PUBLIC es una forma corta que representa a todos los usuarios.

Ejemplo

Para comprender los privilegios, primero creemos un USUARIO de la siguiente manera:

testdb=# CREATE USER manisha WITH PASSWORD 'password';
CREATE ROLE

El mensaje CREAR ROL indica que se ha creado el USUARIO "manisha".

Considere la tabla EMPRESA que tiene registros de la siguiente manera:

testdb# 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)

A continuación, concedamos todos los privilegios en una mesa EMPRESA al usuario "manisha" de la siguiente manera:

testdb=# GRANT ALL ON COMPANY TO manisha;
GRANT

El mensaje GRANT indica que todos los privilegios están asignados al USUARIO.

A continuación, revoquemos los privilegios del USUARIO "manisha" de la siguiente manera:

testdb=# REVOKE ALL ON COMPANY FROM manisha;
REVOKE

El mensaje REVOKE indica que se revocan todos los privilegios del USUARIO.

Incluso puede eliminar al usuario de la siguiente manera:

testdb=# DROP USER manisha;
DROP ROLE

El mensaje DROP ROLE indica que el USUARIO 'Manisha' se ha eliminado de la base de datos.