GRANT privilege [, ...] ON object [, ...] TO { PUBLIC | GROUP group | username }
Los posibles privilegios son:
Acceso a todas las columnas de una tabla/vista específica.
Inserta datos en todas las columnas de una tabla específica.
Actualiza todas las columnas de una tabal específica.
Elimina filas de una tabla específica.
Define las reglas de la tabla(vista (cer sentencia CREATE RULE).
Otorga todos los privilegios-
El nombre de un objeto al que se quiere conceder el acceso. Los posibles objetos son:
tabla
vista
secuencia
indice
Una abreviación para representar a todos los usuarios.
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.
El nombre de un usuario al que se quiere conceder privilegios. PUBLIC es una abreviatura para representar a todos los usuarios.
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.
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.
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;
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:
SQL92 permite privilegios adicionales a los mencionados:
Permitido para hacer referencia a alguna o todas las columnas de una tabla/vista específica en limitaciones de integridad.
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.
SQL92 permite adicionalmente la palabra clave no funcional TABLE.
Se permite usar el juego de caracteres especificado.
Se permite usar la secuencia de cotejo especificada.
Se permite usar la conversión de juego de caracters especificada.
Se permite usar el dominio especificado.
Se permite conceder el mismo privilegio a otros.