it-swarm.com.de

Postgresql ermöglicht Erweiterungen ohne Superuser

Ich habe einen PostgreSQL 9.5-Server, auf dem ich Skripte habe, die automatisch Rollen und Datenbanken für Benutzer erstellen. Innerhalb dieser Datenbanken wäre es hilfreich, bestimmte Erweiterungen (z. B. pgcrypto) zu aktivieren, aber nach meinem Verständnis muss man ein Superuser sein, um CREATE EXTENSION Ausführen zu können. Gibt es eine Möglichkeit, solche Erweiterungen zu aktivieren, ohne sich manuell mit einem Superuser-Konto anzumelden?

13
beldaz

Von die Dokumente auf Erweiterungen,

superuser (boolean) Wenn dieser Parameter true ist (dies ist die Standardeinstellung), können nur Superuser die Erweiterung erstellen oder auf eine neue Version aktualisieren. Wenn false festgelegt ist, sind nur die Berechtigungen erforderlich, die zum Ausführen der Befehle im Installations- oder Aktualisierungsskript erforderlich sind.

Der Wert ist nicht in pgcrypto.control festgelegt, daher wird standardmäßig true verwendet, was einen SuperUser erfordert.

Dies bedeutet, dass Sie nicht CREATE EXTENSION Als bloßer Eigentümer der Datenbank sein können, ungeachtet dessen, was die Dokumente zu CREATE EXTENSION Sie glauben machen.

Ich habe mich sehr bemüht, es auf false zu setzen, und keine Freude. C ist eine nicht vertrauenswürdige Sprache und Sie werden bekommen

FEHLER: Erlaubnis für Sprache verweigert c

Von die Dokumente auf pg_language

Nur Superuser können Funktionen in nicht vertrauenswürdigen Sprachen erstellen.

... natürlich können Sie c als Superuser mit UPDATE pg_language set lanpltrusted = true where lanname = 'c'; vertrauenswürdig machen. Dann funktioniert CREATE EXTENSION pgcrypto Als Nicht-Superuser einwandfrei. Das klingt jedoch nach einer schlechten Idee, wenn Sie sich Sorgen machen müssen, dass Ihre Benutzer die Quelle in Ihr Erweiterungsverzeichnis hochladen und dann in der Datenbank installieren. Das heißt, ich würde nicht so weit gehen. Ich würde einen anderen Weg finden, diese Katze zu häuten.

10
Evan Carroll