Encontraste la abreviatura para establecer privilegios para todas las tablas existentes en el esquema dado. El manual aclara :
(pero tenga en cuenta que ALL TABLES
se considera que incluye vistas y tablas externas ).
El énfasis audaz es mío. serial
las columnas se implementan con nextval()
una secuencia como columna predeterminada y, citando el manual :
Para secuencias, este privilegio permite el uso de las funciones currval
y nextval
.
Entonces, si hay serial
columnas, también querrá otorgar USAGE
(o ALL PRIVILEGES
) en secuencias
GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;
Nota: las columnas de identidad en Postgres 10 o posterior usan secuencias implícitas que no requieren privilegios adicionales. (Considere actualizar las serial
columnas).
¿Qué pasa con los objetos nuevos ?
También le interesarán los DEFAULT PRIVILEGES
usuarios o esquemas :
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT USAGE ON SEQUENCES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo REVOKE ...;
Esto establece privilegios para los objetos creados en el futuro automáticamente, pero no para los objetos preexistentes.
Los privilegios predeterminados solo se aplican a los objetos creados por el usuario objetivo ( FOR ROLE my_creating_role
). Si se omite esa cláusula, el valor predeterminado es la ejecución del usuario actual ALTER DEFAULT PRIVILEGES
. Para ser explícito:
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo GRANT ...;
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo REVOKE ...;
Tenga en cuenta también que todas las versiones de pgAdmin III tienen un error sutil y muestran privilegios predeterminados en el panel SQL, incluso si no se aplican a la función actual. Asegúrese de ajustar la FOR ROLE
cláusula manualmente al copiar el script SQL.
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
¿cómo sabe qué base de datos?SCHEMA foo
puede existir en una base de datos diferente?Mi respuesta es similar a esta en ServerFault.com .
Ser conservador
Si desea ser más conservador que otorgar "todos los privilegios", es posible que desee probar algo más parecido a estos.
El uso de
public
allí se refiere al nombre del esquema predeterminado creado para cada nueva base de datos / catálogo. Reemplácelo con su propio nombre si creó un esquema.Acceso al esquema
Para acceder a un esquema, para cualquier acción, el usuario debe tener derechos de "uso". Antes de que un usuario pueda seleccionar, insertar, actualizar o eliminar, primero se le debe otorgar "uso" a un esquema.
No notará este requisito cuando utilice Postgres por primera vez. De forma predeterminada, cada base de datos tiene un primer esquema denominado
public
. Y a cada usuario de forma predeterminada se le han otorgado automáticamente derechos de "uso" para ese esquema en particular. Al agregar un esquema adicional, debe otorgar derechos de uso explícitamente.Extracto del documento de Postgres :
Para obtener más información, consulte la pregunta: ¿Qué hace exactamente el USO DE SUBVENCIONES EN EL ESQUEMA? . Preste especial atención a la respuesta del experto de Postgres Craig Ringer .
Objetos existentes versus futuro
Estos comandos solo afectan a los objetos existentes. Las tablas y demás que cree en el futuro obtienen privilegios predeterminados hasta que vuelva a ejecutar las líneas anteriores. Vea la otra respuesta de Erwin Brandstetter para cambiar los valores predeterminados que afectan a los objetos futuros.
fuente