GRANT

Nombre

GRANT  --  otorga privilegios de acceso a un usuario, un grupo o a todos los usuarios

Synopsis

GRANT privilege [, ...] ON object [, ...]
    TO { PUBLIC | GROUP group | username }
  

Entradas

privilege

Los posibles privilegios son:

SELECT

Acceso a todas las columnas de una tabla/vista específica.

INSERT

Inserta datos en todas las columnas de una tabla específica.

UPDATE

Actualiza todas las columnas de una tabal específica.

DELETE

Elimina filas de una tabla específica.

RULE

Define las reglas de la tabla(vista (cer sentencia CREATE RULE).

ALL

Otorga todos los privilegios-

object

El nombre de un objeto al que se quiere conceder el acceso. Los posibles objetos son:

  • tabla

  • vista

  • secuencia

  • indice

PUBLIC

Una abreviación para representar a todos los usuarios.

GROUP group

Un grupo al que se otorgan privilegios. En la actual versión, el grupo debe haber sido creado explícitamente como se describe más adelante.

username

El nombre de un usuario al que se quiere conceder privilegios. PUBLIC es una abreviatura para representar a todos los usuarios.

Salidas

CHANGE

Mensaje devuelto se la acción se ha realizado satisfactoriamente.

ERROR: ChangeAcl: class "object" not found

Mensaje devuelto si el objeto especificado no está disponible o si es imposible dar los provilegios a grupo o usuarios especificado.

Descripción

GRANT permite al creador de un objeto el dar permisos específicos a todos los usuarios (PUBLIC) o a un cierto usuario o grupo. Usuarios distintos al creador pueden no tener permisos de acceso a menos que el creador se los conceda, una vez que el objeto ha sido creado.

Una vez que un usuario tiene privilegios sobre un objeto, tiene posibilidad de ejecutar ese privilegio. No hay necesidad de conceder privilegios al creador de un objeto; el creador obtiene automáticamente TODOS los privilegios, y puede también eliminar el objeto.

Notas

Actualmente, para conceder prvilegios en Postgres a solo algunas columnas, he de crear una vista que contenga las columnas deseadas, y conceder provilegios sobre esa vista.

Use psql \z para obtener más información sobre los permisos de los objetos existentes:

	  Database    = lusitania
   +------------------+---------------------------------------------+
   |  Relacion        |        Conceder/Eliminar Permisos           |
   +------------------+---------------------------------------------+
   | mytable          | {"=rw","miriam=arwR","group todos=rw"}      |
   +------------------+---------------------------------------------+
   Leyenda:
         uname=arwR -- se conceden privilegios a un usuario
   group gname=arwR -- se conceen privilegios al un GRUPO
              =arwR -- se conceden privilegios a PUBLIC

                  r -- SELECT
                  w -- UPDATE/DELETE
                  a -- INSERT
                  R -- RULE
               arwR -- ALL
    

Sugerencia

Actualmente, para crear un GRUPO ha de insertar los datos manualmente en la tabla pg_group como sigue:

INSERT INTO pg_group VALUES ('todos');
CREATE USER miriam IN GROUP todos;
      

Véase la sentencia REVOKE para ver como eliminar los privilegios de acceso.

Uso

Concede privilegios de inserción a todos los usuarios de la tabla 'films':

GRANT INSERT ON films TO PUBLIC;
   

Concede todos los privilegiso al usuario 'manuel' sobre la vista 'kinds':

GRANT ALL ON kinds TO manuel;
   

Compatibilidad

SQL92

La sintaxis de SQL92 para GRANT permite establecer derechos sobre columnas individuales, y permite establecer el privilegio de conceder el mismo privilegio a otros:

GRANT privilege [, ...]
    ON object [ ( column [, ...] ) ] [, ...]
    TO { PUBLIC | username [, ...] } [ WITH GRANT OPTION ]
    

Los campos son compatibles con los de la implementación de Postgres, con las siguientes incorporaciones:

privilege

SQL92 permite privilegios adicionales a los mencionados:

SELECT

REFERENCES

Permitido para hacer referencia a alguna o todas las columnas de una tabla/vista específica en limitaciones de integridad.

USAGE

Permitido para usar un dominio, un conjunto de caracteres, cotejo o traducción. Si un objeto especifica algo que no sea una tabla/vista, privilegio ha de especificar solo USAGE.

object

[ TABLE ] table

SQL92 permite adicionalmente la palabra clave no funcional TABLE.

CHARACTER SET

Se permite usar el juego de caracteres especificado.

COLLATION

Se permite usar la secuencia de cotejo especificada.

TRANSLATION

Se permite usar la conversión de juego de caracters especificada.

DOMAIN

Se permite usar el dominio especificado.

WITH GRANT OPTION

Se permite conceder el mismo privilegio a otros.