Es hat mit dem Objektmodell von Python zu tun - es gibt immer eine Möglichkeit, einen Verweis auf Objekte zu erhalten, die unsicher sein könnten. In der Dokumentation zum rexec-Modul und im Kapitel zur eingeschränkten Ausführung der Dokumente finden Sie einige Informationen zu den Problemen sowie:
Die Einschränkungen haben nichts mit PostgreSQL selbst zu tun, sie sind der CPython-Interpreter-Implementierung oder möglicherweise sogar der Python-Sprache selbst eigen.
Einige andere Sprachen wie Perl, Java, JavaScript und Lua haben die Laufzeiten überprüft. Die meisten von ihnen hatten mit einer Reihe von Sicherheitsproblemen zu kämpfen, da solche eingeschränkten Ausführungsumgebungen nur sehr schwer vor allen möglichen Jailbreak-Exploits zu schützen sind.
Nichts hindert PostgreSQL wirklich daran, einen semitrusted Python-Interpreter hinzuzufügen, da rexec für viele Zwecke "gut genug" ist. PostgreSQL neigt nicht dazu, nur - meistens - irgendwie - gut genug - vielleicht zu sein. Es wird wahrscheinlich nur akzeptiert, wenn es als Nur-Superuser markiert ist, aber Sie können dann immer bestimmten Benutzern Zugriff darauf gewähren. Es wäre besser als nicht vertrauenswürdiges Python.
Persönlich denke ich, dass PL / V8 oder ähnliches die Zukunft hier ist, und würde gerne sehen, dass es in Richtung Kernunterstützung geht.
Ich habe auch vage die Idee eines vertrauenswürdigen Mono untersucht, das "sichere" Assemblys laden kann, die in C #, VB.NET, IronPython oder was auch immer geschrieben sind, aber nicht viel zu diesem Thema tun konnten.
rexec
Moduls als inhärent unsicher entfernt, wie oben verlinkt. Ich stelle mir vor, dass eine plpython mit PyPi möglicherweise einen eingeschränkten Modus liefern kann, den Pg dann verwenden kann. Ich habe nicht nachgesehen, ob es viel Arbeit gibt. Sie irren sich auch über eine "spezielle vertrauenswürdige Version von Perl" - es ist in der Tat ganz normales Perl, der gleiche Interpreter wird für plperl und plperlu verwendet. Der Unterschied ist die Laufzeitkonfiguration.pp_require_safe
undplperl_trusted_init
. Ich weiß nicht genug, um eine Meinung über die wahre Sicherheit einer eingeschränkten Perl-Ausführung zu haben. Ich würde es vorziehen, eine vertrauenswürdige Version von Lua zu sehen oder eine bessere Mindshare und Akzeptanz zu erhalten, einen vertrauenswürdigen JavaScript-Interpreter. Aber was wir haben, ist vorerst plperl.