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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top