web-dev-qa-db-fra.com

Ne peut pas `Créer une fonction` dans PLPYTHON3U, autorisation refusée

En tant qu'utilisateur Postgres, j'ai create extension plpython3u; dans ma base de données

ensuite, j'ai mis le plpython3u Pour faire confiance: select lanpltrusted from pg_language where lanname like 'plpython3u'; retourne vrai

mais quand mon db_user essaie

  create function check_data_valid(id bigint)
    returns boolean
    as $$
    -- ...
    return true
    $$ language plpython3u;

J'ai eu l'erreur: permission denied for the language plpython3u

Donc, avec mon utilisateur Postgres, j'ai essayé: grant usage on plpython3u to db_user et grant execute on plpython3u to db_user Mais les deux renvoient l'erreur:

relation python doesn't exist

peut-être que c'est parce que c'est une extension ... Cependant, je ne sais pas quoi faire pour créer ma procédure stockée.

4
Stephane Rolland

Premier NON NON FAIT PLPYTHON3U dans une langue de confiance. Ceci est mauvais. Vous donnez accès à toutes sortes de choses sur la base de données, le système de fichiers et similaires d'une manière qui pourrait être horriblement abusée. veuillez reconsidérer.

Maintenant, de vos commentaires, vous souhaitez conserver l'autorisation d'administrateur séparé de la permission normale de l'utilisateur. Le moyen de faire cela est de s'assurer que le superutilisateur est NOINHERIT et l'utilisateur est accordé le rôle. Vous pouvez:

 CREATE ROLE mydba WITH SUPERUSER NOINHERIT;

 GRANT mydba TO myuser;

Ensuite, connecté en tant que myuser alors vous pouvez:

 SET ROLE mydba;

Et vous obtenez des privilèges superutilisateurs. Vous pouvez ensuite utiliser cela pour augmenter temporairement vos autorisations d'une manière similaire à Sudo sur * Nix Systems.

7
Chris Travers