Creazione di estensione UUID come non super-utente privilegiato
-
22-10-2019 - |
Domanda
Ho bisogno di caricare l'estensione uuid sul mio database, che viene creato in fase di esecuzione. L'utente che ha creato il db non è superutente, ha solo le autorizzazioni "CreateDB".
C'è un modo per fare questo? Grazie.
Soluzione
Vedo due possibilità:
1.
Installare l'estensione in un database di template (solo una base di dati regolare) e usarlo come modello per CREATE DATABASE
:
CREATE DATABASE new_db TEMPLATE my_template_db;
che copia tutte le estensioni nel nuovo database installato. Il tuo manuale, ovviamente, può fare che .
Inoltre, se creato il database lei dovrebbe avere i privilegi necessari per CREATE EXTENSION
correre comunque. cito il manuale di :
Per la maggior parte delle estensioni sono necessari questo mezzo di superutente o proprietario del database privilegi.
2.
Crea un SECURITY DEFINER
la funzione di eseguire tutte le istruzioni DML necessari, di proprietà di un superutente. Revoca tutti i privilegi da public
e Grant EXECUTE
al ruolo utente:
CREATE FUNCTION foo() ... SECURITY DEFINER;
REVOKE ALL ON FUNCTION foo() FROM public;
GRANT EXECUTE ON FUNCTION foo() to my_user;
Leggi il capitolo "Scrittura SECURITY DEFINER funzioni in modo sicuro " nel manuale.