Mi piacerebbe anche che questa concessione continui anche per la creazione di nuove tabelle in futuro. [...] Ho trascinato la documentazione e non riesco a trovare una soluzione adeguata.
Perché prima del 9.0 non ce n'è. Tutto quello che puoi ottenere è impostare le autorizzazioni per tabelle esistenti. Devi fare uno GRANT
per ogni tabella, perché prima del 9.0 non c'era la modalità "bulk". Vedere la grammatica SQL per 8.4 e 9.0:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] tablename [, ...]
TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
e 9.0 qui:
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 ]
Il nuovo ALL TABLES IN SCHEMA
parte è quello che si sta perdendo.
Inoltre: l'impostazione delle autorizzazioni a livello di database come nella domanda non ti aiuterà: "imposterai" solo "le autorizzazioni sul database, ma non su qualsiasi contenuto" contenuto "come le tabelle. La sezione pertinente:
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE dbname [, ...]
TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
che significa che è possibile impostare solo CREATE
, CONNECT
e TEMP
autorizzazioni sul database stesso, ma non SELECT
, INSERT
ecc
Finora per le cose cattive. Che cosa si può fare sono le seguenti cose:
ridurre il numero di gestione dei permessi per la concessione di diritti, non per gli utenti, ma a ruoli. Quindi aggiungi ruoli ai singoli utenti. Quando viene creata una nuova tabella, devi solo regolare uno o due ruoli, ma non centinaia di utenti.
Cercare i cataloghi di sistema e creare i comandi appropriati GRANT
. Salvali in un file ed esegui quel file. Questo dovrebbe darti un avvio più facile.
Tale richiesta potrebbe assomigliare a questo:
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');
Perché non è possibile eseguire l'aggiornamento? Deve esserci sicuramente un modo per aggiornare PostgreSQL. Le versioni attuali possono essere scaricate dal sito Web di Postgres. –
Ci sono sicuramente dei modi per eseguire l'aggiornamento, ma non desidero poiché i pacchetti forniti dal fornitore sono ben integrati, testati e compresi. Il nostro piano è fino a 9.1 allo stesso tempo Debian wheezy è dichiarato stabile. – pointyhat
Non capirò mai perché alcuni sistemi operativi proteggano molto l'utente. –