ERREUR: permission refusée pour le langage c
Lors de la création d'une fonction comme ceci avec un non-super-utilisateur je reçois l'erreur ci-dessous:
ERROR: permission denied for language c
SQL state: 42501
La fonction créée est :
CREATE OR REPLACE FUNCTION dblink_connect (text)
RETURNS text
AS '$libdir/dblink','dblink_connect'
LANGUAGE C STRICT;
Mais si je voulais donner l'autorisation sur le langage C pour mon non-super-utilisateur, j'obtiens l'erreur ci-dessous:
postgres=# grant usage on language c to caixa;
ERROR: language "c" is not trusted
Cela signifie que, non-super utilisateur ne peut pas créer de la fonction avec le langage C? ou est-il autre chose que je fais mal?
- Probablement vous n'avez pas besoin de subvention
USAGE
privilège decaixa
rôle explicitement, parce que c'est accordée àPUBLIC
(tous les rôles) déjà. La clé ici estlanpltrusted
propriété depg_language
catalogue système.
Vous devez vous connecter pour publier un commentaire.
Qui, selon doc:
Vérification rapide:
Si vous vraiment voulez, alors vous pourriez modifier
pg_language
système de catalogue (MODIFIER la LANGUE
n'ont pas cette option):Par utilisateur @Otheus ci-dessous: la mise à JOUR de la déclaration doit être faite dans la base de données où la fonction sera en résidence.
Au lieu de définir la langue de confiance, qui est considéré comme mauvais, et dangereux,
vous devriez plutôt utiliser des rôles de fournir des privilèges de super-utilisateur temporairement à l'utilisateur pendant le temps qu'il manipule les procédures stockées:
en tant que superutilisateur:
alors connecté en tant qu'utilisateur, vous pouvez
set role dba
Et puis vous pouvez créer des procédures stockées dans C, alors que vous temporairement le rôle
dba
.reset role;
lorsque vous avez terminé pour revenir à la normale des droits de l'.Plus d'infos ici: https://dba.stackexchange.com/questions/37336/cannot-create-function-in-plpython3u-permission-denied
(no)inherit
fonctionne dans l'autre sens. À partir de la documentation: "Ces clauses de déterminer si un rôle "hérite" des privilèges de rôles c'est un membre de." (l'emphase est mienne) Qui est,user
est celui qui doitnoinherit
afin de rendreset role dba
nécessaire. Réglagenoinherit
sur ledba
rôle dans cet exemple ne fait rien, puisquedba
n'est pas un membre de n'importe quel rôle.