web-dev-qa-db-fra.com

Postgresql permettant des extensions sans super-utilisateur

J'ai un serveur PostgreSQL 9.5 sur lequel j'ai des scripts qui créent automatiquement des rôles et des bases de données pour les utilisateurs. Dans ces bases de données, il serait utile d'activer des extensions spécifiques (par exemple pgcrypto), mais si je comprends bien, il faut être un superutilisateur pour exécuter CREATE EXTENSION. Existe-t-il un moyen d'activer de telles extensions sans vous connecter manuellement avec un compte superutilisateur?

13
beldaz

De la documentation sur les extensions,

superutilisateur (booléen) Si ce paramètre est vrai (qui est la valeur par défaut), seuls les superutilisateurs peuvent créer l'extension ou la mettre à jour vers une nouvelle version. S'il est défini sur false, seuls les privilèges requis pour exécuter les commandes dans le script d'installation ou de mise à jour sont requis.

La valeur n'est pas définie dans pgcrypto.control , sa valeur par défaut est donc true, ce qui nécessite un superutilisateur.

Cela signifie que vous ne pouvez pas CREATE EXTENSION en tant que simple propriétaire de la base de données, malgré ce que les documents sur CREATE EXTENSION vous font croire.

J'ai essayé de le régler sur false, et pas de joie. C est un langage non fiable et vous obtiendrez

ERREUR: autorisation refusée pour la langue c

De les documents sur pg_language

Seuls les superutilisateurs peuvent créer des fonctions dans des langages non fiables.

... bien sûr, vous pouvez faire confiance à c avec UPDATE pg_language set lanpltrusted = true where lanname = 'c'; en tant que superutilisateur. Alors CREATE EXTENSION pgcrypto fonctionnera bien en tant que non-superutilisateur. Mais cela semble être une mauvaise idée si vous devez vous soucier du téléchargement de la source de vos utilisateurs vers votre répertoire d'extension, puis de son installation dans la base de données. C'est-à-dire que je n'irais pas aussi loin. Je trouverais une autre façon d'écorcher ce chat.

10
Evan Carroll