Ik zou ook graag willen dat deze subsidie ook in de toekomst blijft bestaan voor het maken van nieuwe tabellen.[...] Ik heb de documentatie doorzocht en ik kan geen geschikte oplossing vinden.
Omdat er vóór 9.0 geen is. Het enige dat u kunt krijgen, is de machtigingen instellen voor bestaande tafels. Je moet één GRANT
. doen voor elke tafel, omdat er vóór 9.0 geen "bulk" -modus was. Zie de SQL-grammer voor 8.4 en 9.0:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] tablename [, ...]
TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
en 9.0 hier:
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 ]
De nieuwe ALL TABLES IN SCHEMA
een deel is degene die je mist.
Ook:machtigingen instellen op databaseniveau zoals in uw vraag zal u niet helpen:u zult "alleen" de machtigingen op de database instellen, maar niet op "bevatte" dingen zoals tabellen. De relevante sectie:
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE dbname [, ...]
TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
Wat betekent dat je alleen CREATE
. kunt instellen , CONNECT
en TEMP
machtigingen op de database zelf, maar geen SELECT
, INSERT
enz.
Tot zover de slechte dingen. Wat u kunt doen zijn de volgende dingen:
-
Verminder het aantal machtigingenbeheer door rechten niet aan gebruikers maar aan rollen te verlenen. Voeg vervolgens rollen toe aan individuele gebruikers. Wanneer een nieuwe tabel wordt gemaakt, hoeft u slechts een of twee rollen aan te passen, maar niet honderden gebruikers.
-
Doorzoek de systeemcatalogi en creëer de juiste
GRANT
commando's. Sla ze op in een bestand en voer dat bestand uit. Dit zou u een gemakkelijkere opstart moeten geven.
Zo'n zoekopdracht kan er als volgt uitzien:
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');