ERREUR: permission refusée pour la langue c

Lorsque je crée une fonction comme celle-ci avec un utilisateur autre que le super utilisateur, l’erreur ci-dessous apparaît:

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 la permission sur la langue C à mon utilisateur non super, j’obtiens le postgres=# grant usage on language c to caixa; ERROR: language "c" is not trusted erreur ci-dessous: postgres=# grant usage on language c to caixa; ERROR: language "c" is not trusted postgres=# grant usage on language c to caixa; ERROR: language "c" is not trusted

Cela signifie que l’utilisateur non super ne peut pas créer de fonction avec le langage C? ou y a-t-il autre chose que je fais mal?

C’est vrai, selon le doc :

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

Vérification rapide:

 SELECT lanpltrusted FROM pg_language WHERE lanname LIKE 'c'; lanpltrusted -------------- f (1 row) 

Si vous le souhaitez vraiment , vous pouvez modifier le catalogue système pg_language ( ALTER LANGUAGE n’a pas cette option):

 UPDATE pg_language SET lanpltrusted = true WHERE lanname LIKE 'c'; 

Au lieu de définir le langage de confiance, ce qui est considéré comme dangereux et dangereux , vous devez plutôt utiliser des rôles pour accorder temporairement les privilèges de superutilisateur à l’utilisateur pendant qu’il manipule les procédures stockées:

en tant que superutilisateur:

 create role dba with superuser noinherit; grant dba to user; 

puis connecté en tant qu’utilisateur, vous pouvez set role dba

Et ensuite, vous pouvez créer des procédures stockées en C pendant que vous avez temporairement le rôle dba .

reset role; quand vous avez fini de revenir à des droits normaux.

Plus d’informations ici: https://dba.stackexchange.com/questions/37336/cannot-create-function-in-plpython3u-permission-denied