Byl bych také rád, aby tento grant vydržel pro vytváření nových tabulek i v budoucnu.[...] Prohrabal jsem se dokumentací a nemohu najít vhodné řešení.
Protože před 9.0 žádná není. Jediné, co můžete získat, je nastavit oprávnění pro existující tabulky. Musíte udělat jeden GRANT
pro každou tabulku, protože před 9.0 neexistoval žádný "hromadný" režim. Podívejte se na gramatiku SQL pro 8.4 a 9.0:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] tablename [, ...]
TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
a 9.0 zde:
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 ]
Nové ALL TABLES IN SCHEMA
část je ta, která vám chybí.
Také:Nastavení oprávnění na úrovni databáze, jak je uvedeno ve vaší otázce, vám nepomůže:Oprávnění nastavíte "pouze" pro databázi, ale ne pro "obsažené" věci, jako jsou tabulky. Příslušná sekce:
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE dbname [, ...]
TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
To znamená, že můžete nastavit pouze CREATE
, CONNECT
a TEMP
oprávnění k databázi samotné, ale žádné SELECT
, INSERT
atd.
Zatím k těm špatným věcem. Co můžete jsou následující věci:
-
Snižte počet správ oprávnění udělením práv nikoli uživatelům, ale rolím. Poté přidejte role jednotlivým uživatelům. Když je vytvořena nová tabulka, stačí upravit pouze jednu nebo dvě role, ale ne stovky uživatelů.
-
Vyhledejte systémové katalogy a vytvořte vhodný
GRANT
příkazy. Uložte je do souboru a spusťte tento soubor. To by vám mělo usnadnit spuštění.
Takový dotaz může vypadat takto:
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');