También me gustaría que esta subvención persista para la creación de nuevas tablas en el futuro también. [...] He dragado la documentación y parece que no puedo encontrar una solución adecuada.
Porque antes del 9.0 no hay ninguno. Todo lo que puede obtener es establecer los permisos para tablas existentes. Tienes que hacer un GRANT
para cada tabla, porque antes de 9.0 no había modo "bulk". Ver la gramática SQL para 8.4 y 9.0:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] tablename [, ...]
TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
y 9.0 aquí:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
El nuevo ALL TABLES IN SCHEMA
parte es la que le falta.
También: Establecer permisos en el nivel de la base de datos como en su pregunta no lo ayudará: "solo" establecerá los permisos en la base de datos, pero no en elementos "contenidos" como tablas. La sección pertinente:
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE dbname [, ...]
TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
Lo que significa que sólo se puede establecer CREATE
, CONNECT
y TEMP
permisos en la base de datos en sí, pero no SELECT
, etc. INSERT
hasta ahora para las cosas malas. Lo que puede hacer son las siguientes cosas:
Reducir el número de gestión de permisos mediante la concesión de derechos no a los usuarios, sino a los roles. Luego agregue roles a usuarios individuales. Cuando se crea una nueva tabla, solo necesita ajustar uno o dos roles, pero no cientos de usuarios.
Consulta los catálogos del sistema y crea los comandos GRANT
adecuados. Guárdelos en un archivo y ejecútelo. Esto debería darte un inicio más fácil.
una consulta de este tipo podría tener este aspecto:
select 'GRANT ALL ON ' || table_schema || '.' || table_name ||' to my_group;'
from information_schema.tables
where
table_type = 'BASE TABLE' and
table_schema not in ('pg_catalog', 'information_schema');
¿Por qué no puedes actualizar? Seguramente debe haber una forma de actualizar PostgreSQL. Las versiones actuales se pueden descargar desde el sitio web de Postgres. –
Definitivamente hay formas de actualizar, pero no deseo porque los paquetes suministrados por el proveedor están bien integrados, probados y entendidos. Nuestro plan es hasta 9.1 al mismo tiempo que Debian wheezy se declara estable. – pointyhat
Nunca entenderé por qué algunos sistemas operativos patrocinan mucho al usuario. –