Cela a à voir avec le modèle d'objet de Python - il y a toujours un moyen d'obtenir une référence à des objets qui pourraient être dangereux. Voir la documentation du module rexec et le chapitre sur l'exécution restreinte de la documentation pour quelques informations sur les problèmes, ainsi que:
Les limitations n'ont rien à voir avec PostgreSQL lui-même, elles sont inhérentes à l'implémentation de l'interpréteur CPython ou peut-être même au langage Python lui-même.
Certaines autres langues ont vérifié les temps d'exécution, comme Perl, Java, JavaScript et Lua. La plupart d'entre eux ont été confrontés à une série de problèmes de sécurité car ces environnements d'exécution confinés sont très difficiles à protéger contre tous les exploits possibles de jailbreak.
Il n'y a vraiment rien qui empêche PostgreSQL d'ajouter un interpréteur Python semi-fiable, car rexec est "assez bon" à de nombreuses fins. Cependant, PostgreSQL n'a pas tendance à aimer seulement - la plupart du temps - assez bien assez bien. Il ne serait probablement accepté que s'il est marqué comme superutilisateur uniquement, mais vous pouvez toujours lui accorder l'accès à des utilisateurs spécifiques. Ce serait mieux que Python non fiable.
Personnellement, je pense que PL / V8 ou similaire est l'avenir ici, et j'aimerais qu'il évolue vers un support de base.
J'ai également vaguement exploré l'idée d'un Mono de confiance qui peut charger des assemblys «sûrs» écrits en C #, VB.NET, IronPython, ou quoi que ce soit, mais je n'ai pas pu faire grand-chose sur ce sujet.
rexec
module Python comme intrinsèquement non sécurisé, comme indiqué ci-dessus. J'imagine qu'un plpython utilisant PyPi pourrait être en mesure de fournir un mode restreint que Pg pourrait ensuite utiliser. Je n'ai pas cherché à voir s'il y avait beaucoup de travail. Vous avez également tort sur une "version spéciale de confiance de Perl" - c'est en fait parfaitement Perl ordinaire, le même interprète est utilisé pour plperl et plperlu. La différence est la configuration d'exécution.pp_require_safe
etplperl_trusted_init
. Je n'en sais pas assez pour avoir une grande opinion sur la véritable sécurité de l'exécution restreinte de Perl. Je préférerais voir une version de confiance de Lua ou obtenir une meilleure prise de conscience et adoption, un interprète JavaScript de confiance. Mais ce que nous avons, c'est pour l'instant.